Linux ACL通过四步实现精细化权限控制:确认文件系统支持acl挂载选项;用setfacl -m为用户/组设独立权限;用setfacl -d -m配默认ACL以自动继承;用getfacl查配置并关注mask确保权限生效。

Linux 中通过 ACL 实现精细化权限控制,核心是绕过传统 owner/group/other 三元组限制,为特定用户或组单独加权,不改属主、不调组别,就能做到“谁该有啥权限,就给啥权限”。关键不在堆命令,而在理清四个动作:确认支持、设具体权限、配默认继承、查实际生效。
确认文件系统已启用 ACL
多数现代发行版(如 Ubuntu 20.04+、CentOS 8+)默认支持,但必须验证挂载选项是否含 acl:
- 运行
mount | grep "$(df . | tail -1 | awk '{print $1}')",看输出里有没有 acl - 若无,临时启用:
sudo mount -o remount,acl /mount/point - 永久生效:编辑
/etc/fstab,在对应分区的 options 字段加入 acl(例如defaults,acl),再执行sudo mount -o remount /mount/point
为用户或组设置独立权限
用 setfacl -m 直接授权,不影响原有属主和属组:
- 给用户 alice 读写权限:
setfacl -m u:alice:rw file_or_dir - 给组 devs 读+执行(可进目录、可列内容):
setfacl -m g:devs:r-x dir - 递归设置整个目录树:
setfacl -Rm u:bob:r-x docs/ - 同时设多个规则:
setfacl -m u:alice:rx,u:charlie:w docs/
执行后,ls -l 显示权限串末尾出现 +(如 drwxr-xr-x+),说明 ACL 已生效。
配置默认 ACL 实现自动继承
这是目录级策略落地的关键——让新创建的文件/子目录自动带权限,不用每次手动加:
- 仅对目录有效:
setfacl -d -m g:devs:rwX /project(注意大写 X:对目录加 x,对普通文件不加 x,更安全) - 新建文件自动获得
g:devs:rw-,新建子目录则得g:devs:rwx并继续继承默认 ACL - 可叠加多条默认规则:
setfacl -d -m u:deploy:r-x,g:qa:r-- /project
查看与排查实际权限是否生效
权限是否真起作用,不能只看 setfacl 是否成功,要结合 getfacl 和 mask 理解生效逻辑:
- 查完整配置:
getfacl /path,重点关注user::(属主)、user:alice:(命名用户)、group::(属组)、group:devs:(命名组)、mask::(所有命名项的权限上限) - mask 是闸门:如果
mask::r--,即使设了u:alice:rw-,alice 实际也只有读权限 - 必要时重置 mask:
setfacl -m m::rwx /path,确保显式权限全部生效











