acl是在传统权限基础上叠加的精细化规则,突破单用户单组限制,支持为多个用户/组单独授权,通过default acl实现新建文件自动继承权限,并由mask字段统一管控非所有者权限上限。

ACL 不是推翻传统权限,而是叠加一层更细的规则,让“谁对什么有哪种权限”这件事不再被 u/g/o 三类身份卡死。
突破单用户单组限制
传统模型只能设一个所有者、一个所属组、其他所有人。ACL 允许你同时为多个用户和多个组单独授权:
- 给用户 alice 单独加读写:
setfacl -m u:alice:rw /data/project - 给用户 bob 只读:
setfacl -m u:bob:r-- /data/project - 让 devs 组可读写执行,qa 组只读执行:
setfacl -m g:devs:rwx,g:qa:r-x /data/project
这些规则互不干扰,也不影响原文件所有者或所属组的权限设置。
用默认 ACL 实现自动继承
目录级的默认 ACL(default ACL)决定了新创建的文件/子目录“一出生就带什么权限”,避免每次手动 chmod:
- 设置后,所有新建文件自动获得指定用户的读权限:
setfacl -d -m u:monitor:r /var/log/app - 新建子目录还会继承目录本身的 default 权限:
setfacl -d -m g:admins:r-x /shared/docs - 注意:default ACL 只对目录有效,且仅影响后续新建项,不影响已有内容
权限生效靠 mask 控制上限
ACL 中的 mask 字段像一道“权限天花板”,它限制所有非所有者、非 other 的 ACL 条目(user:xxx、group:xxx)实际能生效的最大权限范围:
- 当你用
chmod g-w收紧组权限时,mask 会自动同步下调,可能导致已设的u:alice:rw实际只剩r - 想强制提升 mask(比如恢复某条 ACL 的写权限),可显式设置:
setfacl -m m:rw- /path - 执行
getfacl时看到的mask::rwx或mask::r--就是当前生效上限
验证是否真生效
设完不等于起效,三步确认:
- 看结构:
getfacl /target确认 user/group 条目存在、mask 值合理 - 看标识:
ls -l输出末尾出现 +(如-rw-rw-r--+),说明 ACL 已启用 - 真操作:用目标用户身份登录,直接
cat、touch或ls测试,比看配置更可靠











