setfacl -m 仅修改指定用户/组的ACL权限,不覆盖其他条目;需明确规则类型(u:/g:/o:)、名称及权限位(rwx),多条规则逗号分隔互不影响,注意mask限制并用getfacl验证。

用 setfacl -m 修改已有 ACL 规则,核心是“只动指定项、不动其他条目”。它不是覆盖全部 ACL,而是精准增补或更新某用户/组的权限,原有所有者、所属组、other 以及其他未提及的 ACL 条目均保持不变。
明确目标:改谁、改什么权限
-m 参数后必须写清规则类型(u: 用户、g: 组、o: other)、名称和权限位(rwx 或 ---)。例如:
-
setfacl -m u:alice:rx file→ 给用户 alice 加读+执行,若她已有条目则覆盖,若没有则新增 -
setfacl -m g:devs:rwX dir/→ 给组 devs 加读写,对目录自动加 x,对文件仅当原权限含 x 才加 X -
setfacl -m o::--- file→ 把 other 权限设为空,不影响 user 或 group 的任何 ACL
一次改多个,但互不干扰
多个规则可用逗号连写,每条独立生效,不会牵连其他用户:
setfacl -m u:alice:r,g:team:wX,o::r file- 这条命令只调整 alice、team 和 other 的权限,bob、jane 或其他已存在的 ACL 条目完全不受影响
注意 mask 是否允许你设的权限
即使你写了 u:bob:rwx,如果当前 mask 是 r--,bob 实际只能读。此时需同步刷新 mask:
- 加
--mask让 setfacl 自动重算:setfacl -m u:bob:rwx --mask file - 或手动指定:
setfacl --mask -m mask::rwx file - getfacl 输出中检查
mask::行,确认它放行了你要赋予的权限
验证修改是否生效且未误删
执行后立即用 getfacl 查看:
- 目标用户的条目应更新为新权限
- 其他用户(如 u:carol、g:admins)的行仍存在、权限未变
- 末尾的
+号还在,说明 ACL 仍启用 - 若某用户条目消失,说明你用了
-x而非-m,或误操作了

















