setfacl -m m::r-x 能生效是因为 mask 是 ACL 权限的最终上限,与各 user/group 条目按位与运算,将写权限全部清零;操作后所有条目实际权限被限制为 r-x 或 r--,且需单独设置默认 ACL。

直接用 setfacl -m m::r-x 即可临时把所有 ACL 用户(非属主、非属组)的写权限截断。
为什么这个命令能生效
mask 是 ACL 权限的“最终上限”,它和每个 user:xxx / group:xxx 条目做按位与运算,决定实际生效权限。把 mask 设为 r-x,意味着:无论你给 alice 设置了 rwx,还是给 devs 组设置了 rw-,它们的实际权限都会被压成 r-x & rwx = r-x、r-x & rw- = r--——写位(w)全被清掉。
操作步骤
- 运行
getfacl /path/to/dir确认当前 mask 值(比如是mask::rwx) - 执行
setfacl -m m::r-x /path/to/dir - 再次
getfacl /path/to/dir,会看到mask::r-x,且所有 user/group 条目后出现effective:r-x或effective:r--字样
注意要点
这个操作只影响当前路径,不自动同步到默认 ACL:
- 如果是目录,还需单独处理默认 mask:用
setfacl -d -m m::r-x /path/to/dir - 不要用
chmod替代——它会覆盖 mask,但不可控,还可能意外改掉属主/属组权限 - 恢复写权限只需再设回
setfacl -m m::rwx /path,无需逐条重设用户规则
适用场景
常用于运维临时维护:比如批量更新前禁止所有人写入,或排查权限干扰时快速“锁住”ACL 写能力,不影响读和执行。

















