acl 是对标准权限的补充,为特定用户或组单独授权,需文件系统启用 acl 挂载选项;通过 setfacl 设置命名用户/组权限及默认 acl,用 getfacl 查看、setfacl -x/-b 管理,注意 mask 限制实际生效权限。

ACL 不是用来替代 chmod 的,而是当标准的用户-组-其他权限不够用时,给特定用户或组加一道“专属门禁”。它不改文件属主、不调组关系,直接为某个用户或组单独开权限。
确认文件系统已启用 ACL 支持
ACL 功能依赖文件系统挂载参数,不是装了命令就能用。静默失败很常见——设了权限却没效果,往往卡在这一步。
- 运行 mount | grep "$(df . | tail -1 | awk '{print $1}')" ,检查输出中是否含 acl(如 rw,relatime,acl)
- 若无,临时启用:sudo mount -o remount,acl /path(例如 / 或 /home)
- 永久生效需编辑 /etc/fstab,在对应分区的挂载选项字段末尾加 ,acl(注意逗号后不空格),再重新挂载
为用户或组单独设置访问权限
不需要把用户拉进组,也不用开放“其他人”权限,直接指定即可。对目录加 x 才允许进入,建议用大写 X 更安全(只对目录或已有执行位的文件生效)。
- 让 alice 可读写文件:setfacl -m u:alice:rw filename
- 让 bob 能进入并浏览目录:setfacl -m u:bob:rX dirname/
- 为组 devteam 授予脚本执行权:setfacl -m g:devteam:x deploy.sh
- 递归设置整个项目目录:setfacl -Rm u:devteam:rwx /opt/app/
让新文件自动继承权限(设置默认 ACL)
普通 ACL 只作用于当前项;要让后续新建的文件、子目录也带权限,必须设默认 ACL。它只对目录有效,且不影响已有内容。
- 设置默认规则:setfacl -d -m u:charlie:rwX,g:editors:rX /shared/docs/
- 之后在 /shared/docs/ 里 touch new.txt,charlie 就默认有读写权
- 新建子目录会同时继承普通 ACL 和默认 ACL,但已有子目录需单独再设一次 -d
查看、校准与清理 ACL 权限
权限没生效?先看 mask——它是所有命名用户/组权限的“天花板”,设了 rwx 但 mask::r--,实际就只能读。
- 查看当前 ACL:getfacl filename 或 getfacl -d dirname/(仅默认 ACL)
- 查看是否启用 ACL 标识:ls -l,权限串末尾出现 + 表示已配置 ACL
- 删除某用户权限:setfacl -x u:alice filename
- 清空所有扩展 ACL(保留基本 u/g/o 权限):setfacl -b filename











