mask是ACL权限生效的硬性上限,它不决定谁有权限,只通过按位与运算限制非属主/非other的ACL条目(如user:xxx、group:xxx、default条目)的实际权限,例如user:alice:rwx与mask::r--按位与后实际仅r--。

mask 不是“额外加的权限”,而是 ACL 权限生效的硬性上限。它不决定谁有权限,只决定已有 ACL 条目中,哪些权限能真正起作用。
mask 的本质是按位与运算器
每个非属主、非属组的 ACL 条目(如 user:alice:rwx 或 group:dev:r-x)声明的是“希望给的权限”,但系统会强制用 mask 与之做按位与(&),结果才是用户实际获得的权限。
- 例如:user:alice:rwx + mask::r-- → 实际权限 = rwx & r-- = r--
- 再如:group:qa:rw- + mask::--x → 实际权限 = rw- & --x = ---(完全失效)
- 哪怕你设了 rwx,只要 mask 缺少对应位,该位就归零
哪些 ACL 条目受 mask 约束
mask 控制所有非基础身份的 ACL 权限,包括:
- 显式添加的用户条目(user:xxx:)
- 显式添加的组条目(group:xxx:)
- 默认 ACL 中的用户/组条目(default:user:xxx:、default:group:xxx:)
- 但不约束属主(owner)、属组(group)、other 这三类基础权限
为什么 ls 显示权限末尾有个 + 号
当文件存在有效 ACL(即 getfacl 输出中含 user: 或 group: 条目,且未被 mask 完全截断)时,ls -l 会在权限字符串末尾显示 +,例如:
-rw-rw-r--+ 1 user group 0 Jul 21 05:30 file.txt
- 这个 + 是系统在提示:“别只看这九位,后面还有 ACL 和 mask 在起作用”
- 它不表示权限变强了,只是告诉你:ACL 已启用,实际权限需结合 mask 判断
如何确认 mask 是否正在截断权限
运行 getfacl 文件名,重点观察两处:
- 看 mask:: 行——当前生效上限值
- 看各 user:xxx: 或 group:xxx: 行末是否带 effective: 字样
→ 有 effective:xxx 表示已被 mask 压缩,括号里才是真实权限
→ 没有 effective:,说明该条目权限完整生效

















