setfacl用于实现单用户级精准权限控制,优先级高于chmod;通过-m设置显式拒绝(如u:bob:---),-d添加默认ACL确保新建文件继承限制,配合mask修复和getfacl验证可保障分层权限有效。

限制特定目录的访问权限,关键在于分层控制:先用标准权限(属主/属组/其他)做基础隔离,再用 ACL 实现单用户级精准禁止或放行。直接改 chmod 容易误伤他人,而 setfacl 更安全、灵活、常用。
一、用基础权限设好“第一道门”
Linux 默认按三类身份分配权限:属主(u)、属组(g)、其他(o)。合理设置能天然屏蔽大部分未授权用户。
- 把目录属组设为专用组(如
restricted),只加允许访问的用户:sudo chown root:restricted /path/to/dirsudo chmod 750 /path/to/dirsudo usermod -aG restricted alice - 权限 750 表示:属主全权(rwx)、属组可读+进入(r-x)、其他用户彻底无权(---)
- 注意:目录必须有
x权限才能cd进入,否则即使有读权限也列不出内容
二、用 setfacl 精准禁止某个用户
当需要明确拦住某人(比如 bob),标准权限做不到“只禁这一个”,就得靠 ACL 显式拒绝——它优先级高于传统权限,且 --- 彻底剥夺所有能力。
- 确认文件系统已启用 ACL:
mount | grep "$(df . | awk 'NR==2 {print $1}')" | grep acl(有输出才可用) - 禁止访问(仅当前目录):
sudo setfacl -m u:bob:--- /path/to/dir - 递归禁止(含所有子项):
sudo setfacl -Rm u:bob:--- /path/to/dir - 验证是否生效:
getfacl /path/to/dir应看到user:bob:---这一行
三、让新创建的文件自动继承限制
只设当前权限,无法阻止用户未来在该目录下新建的文件被访问。要长期有效,必须加默认 ACL:
- 添加默认拒绝规则:
sudo setfacl -d -m u:bob:--- /path/to/dir - 此后在此目录中新建的任何文件或子目录,都会自动带
user:bob:--- - 默认 ACL 不影响已有内容;如需同步历史项,仍需补跑
-Rm - 删除默认规则用:
sudo setfacl -k /path/to/dir
四、排查常见失效情况
如果设了却没效果,重点检查这三点:
-
mask 掩码过窄:运行
getfacl /path/to/dir,看mask::是否是rwx;若为r--等,执行sudo setfacl --mask -m mask::rwx /path/to/dir修复 -
用户通过其他组间接获得权限:比如
bob同时属于sudo或wheel组,且该组对目录有访问权,需一并限制或移出用户 -
没确认操作身份:测试前用
su - bob切换真实身份验证,避免用 root 或 sudo 误判


















