Linux ACL 是对传统 UGO 权限的精准补充,解决单用户/组独立授权及新文件自动继承等刚需;配置失效主因是文件系统未启用acl挂载选项、mask限制权限、目录缺少x权限、默认ACL不作用于已有文件、UID/GID匹配错误或挂载覆盖。

Linux ACL 是对传统 UGO 权限的精准补充,不是替代,而是解决“单个用户/组需独立授权”“新文件自动继承权限”等刚需场景。用对了不复杂,但配置后权限没生效,往往卡在几个关键点上。
确认文件系统已启用 ACL
ACL 依赖底层文件系统支持(ext4/xfs/btrfs 均默认支持),但必须挂载时带 acl 选项。未启用则 setfacl 会静默降级为 chmod 行为,权限看似设了实则无效。
- 检查是否启用:
tune2fs -l /dev/sda1 | grep "Default mount options",输出含 acl 即可 - 若无,临时启用:
mount -o remount,acl / - 永久生效:编辑
/etc/fstab,在对应分区行末尾添加 ,acl(注意逗号不空格),再执行mount -a
设置与查看 ACL 的核心命令
setfacl 设权限,getfacl 查详情——这是唯二必须掌握的命令。ls -l 只显示是否有 ACL(末尾的 + 号),不能反映实际规则。
- 给用户 alice 读写权限:
setfacl -m u:alice:rw file.txt - 给组 sales 读执行权限:
setfacl -m g:sales:r-x dir/ - 设目录默认 ACL(子项自动继承):
setfacl -m d:u:bob:rx dir/(注意 d: 前缀) - 查看完整规则:
getfacl file.txt,重点关注 user:、group:、mask:: 三栏
理解 mask 的作用,避免权限“看不见”
ACL 中的 mask 不是掩码位,而是除 owner 和 other 外所有条目的**最大有效权限上限**。即使你给 user:alice 设了 rwx,若 mask 是 r--,alice 实际只有 r 权限。
- setfacl -m 自动重算 mask;如需强制指定,加
--mask参数 - 常见误判:getfacl 显示 user:alice:rwx,但 alice 仍无法写——先看 mask:: 后面是不是包含 w
- 手动更新 mask:
setfacl -m m::rwx dir/
排错:为什么设置了却没效果?
权限不生效,90% 出在路径、继承逻辑或用户身份上,而非命令写错。
- 目录无 x 权限 → 进不去,更看不到里面文件:确保用户对父目录有 x(cd 进入)和 r(ls 列出)权限
-
默认 ACL 只影响新创建项:已存在的子文件/目录不会自动获得默认规则,需加
-R手动设置或用setfacl --restore批量同步 -
用户不在目标组或 UID 不匹配:ACL 按 UID/GID 匹配,不是用户名字符串。用
id -u alice和getfacl输出对比验证 -
挂载点嵌套或 bind mount 覆盖:检查
mount | grep "your_path",确认实际生效的是哪个挂载选项










