限制普通用户目录访问需分层设防:先用标准权限(如700、750)控制基础进出,再通过acl精准授权,辅以组管理和运行时防护。

限制普通用户对目录的访问,核心是控制“谁可以进、谁可以看、谁可以操作”,不能只改一个数字就完事。关键在于分层设防:先用标准权限卡住大面,再靠 ACL 精准封堵个别用户,最后补上组管理和运行时防护。
一、标准权限是第一道门槛
目录权限中,x(执行)权限决定能否进入和列出内容。没有 x,连 cd 都进不去,ls 更会直接报 Permission denied。
- 完全禁止其他用户访问:用 chmod 700,结果为
drwx------——仅属主可读、写、进 - 允许同组成员有限访问:用 chmod 750,即
drwxr-x---——属主全权,属组可进可看,其他人彻底无权 - 家目录默认常是 755,存在隐私风险,应统一加固:
chmod 700 /home/用户名 - 批量处理所有普通用户家目录:
awk -F: '$3 >= 1000 && $3
二、ACL 实现单用户级精准禁止
标准权限只能按“属主/属组/其他”三类划分,无法单独禁掉某一个用户。这时必须用 setfacl:
- 确认文件系统支持 ACL:
mount | grep $(df . | awk 'NR==2 {print $1}')输出需含acl - 彻底禁止某用户访问:
sudo setfacl -m u:unwanted_user:--- /path/to/dir - 让新建子项也自动继承该规则:
sudo setfacl -d -m u:unwanted_user:--- /path/to/dir - 验证是否生效:
getfacl /path/to/dir中应看到user:unwanted_user:---
三、组管理不当会绕过权限
即使目录权限是 700,若用户被误加进某个共享组(如 users、staff),而该组对目标目录有 r/x 权限,照样能越权访问。
- 检查用户实际所属组:
id 用户名,确认只含自身主组(如username) - 剔除冗余组:
sudo gpasswd -d 用户名 共享组名 - 避免把家目录属组设为
wheel或sudo等高危组
四、运行时防护堵住常见绕过
权限设置只是静态防线,还需配合运行时机制防隐蔽访问:
- 挂载
/home时加安全选项:noexec,nosuid,nodev,防止符号链接跨目录跳转 - 限制 D-Bus 接口访问,防止通过
loginctl或hostnamectl获取用户会话信息 - 审计可疑行为:
sudo auditctl -w /home -p rx -k home_access,监控非属主的读/执行操作 - 对 SSH/SFTP 用户启用 chroot:
ChrootDirectory锁定其可见路径范围
不复杂但容易忽略:700 是底线,组管理是保障,运行时防护是补丁。三者缺一不可。











