ACL权限不生效多因mask截断:getfacl中出现#effective:r--或#effective:---即表明mask过严,需用setfacl -m m::rwx等命令显式修复,且添加ACL后应检查并钉牢mask。

ACL 权限不生效,十有八九不是没加对,而是被 mask 拦住了——它不报错、不警告,只悄悄把你的 rwx 截成 r-- 甚至 ---。
一眼识别 mask 是否作祟
运行 getfacl /path,重点看两处:
- 每条 user 或 group ACL 后面是否跟着
#effective:xxx,比如user:jenkins:rwx #effective:r--→ 说明 mask 当前只有 r--,w 和 x 被过滤掉了 - 单独的
mask::r--这一行 → 它就是权限上限,所有非 owner/group/others 的 ACL 实际效果都不能超过它
哪些操作会偷偷改掉 mask
mask 不是静态值,以下命令常触发系统自动重算(且不提示):
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
-
chmod g-w dir:降低组写位,极易让 mask 从 rwx 降为 r-x 或 r-- -
setfacl -x u:jenkins dir:删 ACL 后,mask 可能回落,但行为不确定 -
setfacl -m g:devs:rx dir:加权限时若超出当前 mask,系统会提;但后续删/改其他条目,mask 可能又缩回去
修复只需一条命令,不用删 ACL
直接显式重设 mask,让它匹配你实际需要的权限:
- 想让所有已设 ACL 全部生效:
setfacl -m m::rwx /path - 只要读写不要执行:
setfacl -m m::rw- /path - 对目录还要管子目录继承:
setfacl -Rm m::rwx /path(递归)或setfacl -dm m::rwx /path(设默认 mask)
两个预防习惯,省下大把排查时间
运维中容易忽略,但非常有效:
- 每次用
setfacl -m添加新用户或组权限后,顺手跑一次getfacl,确认没有#effective出现 - 批量改权限(如先
chmod +w再setfacl)后,统一补一句setfacl -m m::rwx /path










