<p>限制用户对特定目录访问需分层控制:先用标准权限(如chmod 750)设基础隔离,再用setfacl精准禁止指定用户(sudo setfacl -m u:unwanted_user:--- /path/to/dir),并可通过-d选项设置默认ACL使新建项自动继承禁止规则。</p>

限制用户对特定目录的访问,关键在于分层控制:先用标准权限做基础隔离,再用 ACL 实现精准禁止或放行。直接改 chmod 容易误伤他人,setfacl 才是最稳妥、最常用的方式。
用标准权限设好第一道防线
Linux 默认按“属主-属组-其他”三类身份分配权限。比如目录权限是 drwxr-x---,表示:
- 属主:可读、写、进入(
rwx) - 属组成员:可读、进入(
r-x) - 其他用户:完全无权(
---)
所以,把目标目录设为专用属组,只加允许访问的用户进去,就能天然挡住未授权者:
sudo chown root:allowedgroup /path/to/dirsudo chmod 750 /path/to/dirsudo usermod -aG allowedgroup user1 user2
用 setfacl 精准禁止某个用户
标准权限无法单独禁掉某个人,这时必须用 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:
- 添加默认拒绝:
sudo setfacl -d -m u:unwanted_user:--- /path/to/dir - 删除默认规则:
sudo setfacl -k /path/to/dir
默认 ACL 只影响未来新建项,不影响已有内容,适合长期管控场景。
操作前务必验证和避坑
别跳过这步——否则容易锁死自己或他人:
- 测试前用
su -s /bin/bash -c "ls /path/to/dir" unwanted_user切换身份验证效果 - 切忌修改
/etc、/usr等系统目录权限 - 避免滥用
setfacl -b(批量清除 ACL),可能破坏已有精细控制


















