最常用解法是用 setfacl -m m::rwx 直接修改 mask;mask 是 ACL 权限生效上限,自动重算可能因低权限条目(如 u:bob:r--)导致 mask 缩窄,屏蔽高权限设置;需显式设 mask 或用 --mask 参数确保生效。

直接用 setfacl -m m::rwx 修改 mask 值,是最常用也最有效的解法。mask 不是“可有可无”的字段,它是 ACL 权限的实际生效上限——哪怕你给用户设了 rwx,只要 mask 是 r--,用户最终就只能读。
为什么 mask 会意外变窄
执行 setfacl -m u:alice:rwx dir 后,系统会自动重算 mask,取所有非所有者/非所属组 ACL 条目中的最大权限。如果目录里还存在一条 u:bob:r--,而没有其他带 w 或 x 的条目,mask 就可能被缩为 r--,导致 alice 的写和执行权限被静默屏蔽。
- 运行
getfacl dir,重点看mask::那一行,对比你期望的权限 - 若 mask 权限比你设的用户/组 ACL 权限小,就是它在起作用
- 注意:mask 对所有者(
user::)和所属组(group::)不生效,只约束扩展 ACL 条目
手动设置 mask 的几种方式
推荐优先使用显式指定,避免依赖自动重算逻辑:
-
一步到位设 mask:
setfacl -m m::rwx dir(把rwx换成你需要的最大组合,如rw-、r-x) -
设权限同时强制更新 mask:
setfacl -m u:alice:rwx --mask dir,--mask参数会触发重算并确保新条目生效 -
跳过自动重算(慎用):
setfacl -n -m u:alice:rwx dir,此时 mask 不变,必须提前确认它已足够宽
目录默认 ACL 下的 mask 特别处理
给目录设默认 ACL(-d)时,default:mask:: 也需同步维护。否则新建文件会继承一个过窄的 mask,导致权限从一开始就不完整:
- 先设默认规则:
setfacl -d -m u:dev:rwx /shared - 再设默认 mask:
setfacl -d -m m::rwx /shared - 或合并执行:
setfacl -d -m u:dev:rwx --mask /shared - 已有文件不受默认 ACL 影响,需单独补:
setfacl -R -m u:dev:rwx --mask /shared
验证与清理
改完立刻验证:
- 用
getfacl dir确认mask::和default:mask::(如有)都符合预期 - 检查目标用户能否真正执行对应操作(如创建文件、删除、进入目录)
- 若想彻底重置,可用
setfacl -b dir清空所有 ACL,但注意这不会恢复基础权限,需配合chmod使用


















