ACL权限不生效主因是mask自动收缩截断权限;查看getfacl输出中是否出现#effective:r--或#effective:---,并检查mask::行值,修复只需setfacl -m m::rwx等命令显式重设mask。

ACL 权限不生效,十有八九不是 ACL 没设上,而是 mask 自动收缩把权限“拦腰截断”了。它不报错、不提示,只默默让 rwx 变成 r--,问题藏得深但规律明确——关键就看 getfacl 输出里有没有 #effective。
一眼识别 mask 是否作祟
执行:getfacl /path/to/dir
重点扫三处:
- 每条 user/group ACL 后面是否跟着
#effective:r--或#effective:---?
比如user:jenkins:rwx #effective:r--,说明 jenkins 的 w/x 被 mask 挡掉了 - 目录本身的
mask::行值是多少?例如mask::r--就太严了 - 如果涉及子文件继承,检查
default:mask::是否也过严;新创建的文件上 ACL 显示#effective:---就是它在作怪
哪些操作会悄悄改掉 mask
mask 不是静态的,以下命令可能触发系统自动重算(且不提醒):
-
chmod g-w dir:降低组写位,常导致 mask 从 rwx 降为 r-- -
setfacl -x u:jenkins dir:删 ACL 后,mask 可能回落,行为不可靠 -
setfacl -m g:devs:rx dir:加权限时若超出当前 mask,系统会提;但后续删改其他条目,mask 可能又缩回去
修复只需一条 setfacl 命令
不用删 ACL、不用猜原因,直接显式钉牢 mask:
- 让所有已设 ACL 全部生效:
setfacl -m m::rwx /path - 只要读写不要执行:
setfacl -m m::rw- /path - 对目录还要管默认继承:
setfacl -dm m::rwx /path(加-d设 default mask) - 递归修复整个目录树:
setfacl -Rm m::rwx /path
两个预防习惯,省下大量排查时间
运维中容易忽略,但真能救命:
- 每次用
setfacl -m添加新用户或组权限后,顺手跑一遍getfacl,确认没有#effective出现 - 批量修改权限(如先
chmod +w再setfacl)时,最后统一执行一次setfacl -m m::rwx


















