限制用户在特定目录的访问需分层控制:先用标准权限(owner/group/others)粗粒度隔离,再用ACL实现单用户级精准禁止或放行;chmod易误伤他人,setfacl最常用稳妥;标准权限为第一道防线,如drwxr-x---表示属主全权、属组读+进入、其他无权;通过设专用属组并添加允许用户可天然屏蔽未授权者;禁止特定用户须用setfacl -m u:unwanted_user:---,ACL优先于传统权限且---彻底剥夺所有权限;配合默认ACL(setfacl -d -m)使新建子项自动继承禁止规则,-k可删除默认规则;切忌修改系统目录权限或滥用setfacl -b,测试前应su切换身份验证。

限制用户在特定目录的访问行为,核心在于分层控制:先靠标准权限(owner/group/others)做粗粒度隔离,再用 ACL 实现单用户级精准禁止或放行。直接改 chmod 往往误伤他人,而 setfacl 是最常用、最稳妥的方案。
基础权限是第一道防线
Linux 默认按“属主-属组-其他”三类身份分配 r/w/x 权限。比如一个目录权限为 drwxr-x---,表示:
- 属主可读、写、进入(rwx)
- 属组成员可读、进入(r-x)
- 其他用户完全无权访问(---)
因此,把目标目录的属组设为专用组(如 restricted),再仅将允许访问的用户加入该组,就能天然屏蔽未授权用户。命令示例:
sudo chmod 750 /path/to/dir
sudo usermod -aG restricted allowed_user
ACL 实现单用户级禁止访问
当需要明确禁止某个用户(如 unwanted_user)访问某目录时,标准权限无法做到“只禁这一个”,此时必须用 ACL:
- 确认文件系统已启用 acl:检查
mount | grep $(df . | awk 'NR==2 {print $1}')输出含acl字样 - 禁止访问:运行
sudo setfacl -m u:unwanted_user:--- /path/to/dir - 验证效果:执行
getfacl /path/to/dir,能看到类似user:unwanted_user:---的条目
注意:ACL 规则优先于传统权限,且 --- 表示彻底剥夺所有权限(读、写、执行),包括进入目录和查看内容。
配合默认 ACL 控制子项继承
若希望新创建的文件/子目录也自动继承禁止规则,需设置默认 ACL:
- 添加默认拒绝:
sudo setfacl -d -m u:unwanted_user:--- /path/to/dir - 此后在该目录下新建的任何内容,都会自动带上这条禁止规则
- 删除默认规则用:
sudo setfacl -k /path/to/dir
默认 ACL 不影响已有文件,只作用于未来创建项,适合长期管控场景。
避免误操作的关键提醒
限制访问不是越严越好,尤其要避开两类高危操作:
- 不要对
/etc、/bin、/usr等系统目录随意改权限或加 ACL,可能破坏服务启动或登录流程 - 慎用
setfacl -b(清除所有 ACL),它会连同你精心配置的其他用户规则一并删除 - 测试前建议先用
su - unwanted_user切换身份,手动尝试ls、cd、cat等操作验证效果


















