acl是对传统chmod权限的补充,需先确认文件系统挂载时启用acl参数,再用setfacl为用户或组授权,支持递归、默认acl继承及mask权限管理。

ACL 是对传统 chmod 权限的补充,不是替代。它允许你绕过“用户-组-其他”三层限制,直接给特定用户或组单独加权限,不改属主、不调组关系,也不影响其他人。
确认文件系统已启用 ACL 支持
ACL 能否生效,第一步取决于底层挂载参数。静默失败很常见——命令执行成功,但权限没效果,大概率卡在这步。
- 运行 mount | grep "$(df . | tail -1 | awk '{print $1}')" ,检查输出中是否含 acl(如 rw,relatime,acl)
- 若无,可临时启用:sudo mount -o remount,acl /(将 / 换成实际挂载点)
- 永久生效需编辑 /etc/fstab,在对应分区的挂载选项末尾加 ,acl(注意逗号后不空格),再执行 sudo mount -o remount /
为指定用户或组快速授权
不需要拉人进组,也不用开放“other”权限,直接点名即可。对目录设 X(大写)比 x 更安全:只对目录或已有执行位的文件生效,避免误给普通文件加执行权。
- 让 alice 可读写某文件:setfacl -m u:alice:rw filename
- 让 bob 能进入并浏览目录:setfacl -m u:bob:rX dirname/
- 递归授权整个项目目录:setfacl -Rm g:devteam:rwx /opt/app/
让新文件自动继承权限(设置默认 ACL)
普通 ACL 只作用于当前项;要让后续新建的文件、子目录也带权限,必须用 -d 设置默认 ACL。它仅对目录有效,且不影响已有内容。
- 设置默认规则:setfacl -d -m u:charlie:rwX,g:editors:rX /shared/docs/
- 之后在该目录下 touch new.txt,charlie 默认有读写权
- 已有子目录不会自动继承,默认 ACL 需单独再设一次 -d
查看、调试与清理 ACL
权限没生效?先看 mask——它是所有命名用户/组权限的“天花板”。比如设了 u:alice:rwx,但 mask::r--,那 alice 实际只能读。
- 查看完整权限:getfacl filename(末尾带 + 号表示存在 ACL)
- 手动调整 mask:setfacl -m m:rwx filename
- 删掉某个用户的 ACL:setfacl -x u:alice filename
- 清空所有 ACL(恢复标准权限):setfacl -b filename











