mask是ACL中决定非属主、非other权限能否生效的硬性上限,所有扩展ACL条目(如user:xxx、group:xxx)须与mask按位与运算后才得实际权限,且mask会随chmod或setfacl自动重算。

Linux 中的 mask 不是用来“额外限制”ACL权限的开关,而是决定哪些 ACL 条目能真正起作用的**硬性上限**。它不是可选配件,而是 ACL 机制正常工作的必要部分——所有非属主(user::)、非其他人(other::)的权限条目(如 user:alice、group:devteam)都必须和 mask 做按位与运算,结果才是最终生效权限。
mask 是怎么起作用的
实际权限 = ACL 条目设置的权限 & mask 权限(逐位 AND 运算)
- 比如你执行
setfacl -m u:jenkins:rwx /app,但当前mask::r--,那么 jenkins 的实际权限就是r-- & r-- = r-- - getfacl 输出中若出现
user:jenkins:rwx #effective:r--,就说明 mask 正在截断权限 - mask 不影响属主(
user::)和其他人(other::),只约束扩展用户/组和group::字段
哪些操作会自动改 mask
mask 通常由系统自动维护,但它的值取决于你已设的所有命名 ACL 条目:
-
chmod g+rwx dir:提升组权限位,可能同步拉高 mask -
setfacl -m u:alice:rwX dir:若 alice 权限超出当前 mask,系统默认自动扩大 mask(除非加-n参数) -
setfacl -x u:bob dir:删除某条后,mask 可能收缩,但行为不保证,不建议依赖自动收缩
如何手动设置或调整 mask
用 setfacl -m m::xxx 显式设定,这是最可靠的方式:
- 让所有已设 ACL 条目完全生效:
setfacl -m m::rwx /path - 收紧权限,防止过度授权:
setfacl -m m::r-x /path(即使某用户被设了rwx,也最多只能r-x) - 查看当前 mask:
getfacl /path | grep "mask::"
常见问题与应对
权限设了却没效果?先看 mask:
- 新建文件后,default ACL 生效但权限显示
#effective:---→ mask 太严,继承来的权限被清零 - 执行
ls -l看到+,但用户仍无法访问 → 很可能 mask 没覆盖其 ACL 条目 - 修复统一用:
setfacl -m m::rwx /path(根据实际需要填rwx/rw-/r-x)











