要让普通用户无法查看目录下文件列表,核心是移除目录的执行权限(x),因x决定能否进入和列出内容;例如用sudo chmod 700 /opt/private限制访问。

要让普通用户无法查看某个目录下的文件列表,核心是控制“执行权限(x)”——对目录而言,x 权限决定能否进入和列出内容。没有 x,ls 就会报 Permission denied,连目录都进不去,更别说看列表了。
直接修改目录权限(最常用)
使用 chmod 去掉其他用户(others)和同组用户(group)的执行权限即可。例如,限制普通用户访问 /opt/private:
-
sudo chown root:root /opt/private—— 把目录所有者设为 root,避免被普通用户篡改权限 -
sudo chmod 700 /opt/private—— 仅属主(root)有读、写、执行权;组和其他人完全无权限 - 若需允许同组内特定人员访问,可用
chmod 750 /opt/private,再把相关人员加进该组
保护家目录不被他人浏览
默认家目录权限常为 755(即组和其他人可进入并列出内容),存在隐私风险。加固方法很简单:
- 运行
chmod 700 /home/用户名,彻底阻止其他用户访问你的家目录 - 检查效果:
ls -ld /home/用户名,确认末三位是---(即 others 权限全无) - 新用户创建时,可通过修改
/etc/adduser.conf中的DIR_MODE=0700,让系统自动设为安全权限
Web 服务中禁用目录列表(Apache 场景)
当目录通过 Apache 提供网页访问时,若无 index.html 等默认页,服务器可能默认显示文件列表,暴露结构。必须关闭:
- 编辑虚拟主机或全局配置(如
/etc/httpd/conf/httpd.conf或站点配置文件) - 定位到对应
<Directory>区块,在Options行移除Indexes,或显式写成Options -Indexes FollowSymLinks - 重启服务:
sudo systemctl restart httpd(CentOS/RHEL)或sudo systemctl restart apache2(Ubuntu/Debian)
用 chroot 限制 SSH/SFTP 用户范围
对需要远程访问但只能操作特定目录的用户(如运维协作账号),可结合 SSH 的 ChrootDirectory 实现强隔离:
- 创建专用用户并指定根目录:
sudo useradd -d /var/www/user1 -s /bin/false user1 - 在
/etc/ssh/sshd_config末尾添加:
ChrootDirectory /var/www
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
- 确保
/var/www所有者为 root,且无写权限给组/其他人(chown root:root /var/www && chmod 755 /var/www) - 重启 SSH:
sudo systemctl restart sshd,该用户登录后将被锁定在/var/www内,无法看到系统其他路径


















