setfacl -x u:alice /path/to/file 可精确删除用户 alice 的整个 acl 条目,使其权限退回到基础权限;-x 不影响 mask 和 default acl,验证可用 getfacl | grep "^user:alice:"。

在 Linux 中,setfacl 本身没有直接“删除某用户某条 ACL 规则”的子命令,但可以通过 重写该用户的全部 ACL 条目(即覆盖为默认权限或完全移除) 来实现“清除指定用户的单项规则”。关键在于:ACL 是按用户/组整体生效的,不能只删其中一条 mask、read、write 的组合 —— 你删的是“该用户在该文件/目录上的整个 ACL 条目”。
确认目标用户当前的 ACL 条目
先用 getfacl 查看,明确要清除的是哪个用户的条目:
getfacl /path/to/file # 输出中找类似这样的行: # user:alice:rwx # user:bob:rw-
如果你只想清除 user:alice:rwx 这一项,说明你要删掉用户 alice 在这个文件上的所有 ACL 权限(而不仅是 r 或 w)。
使用 -x 选项精确删除指定用户的 ACL 条目
setfacl -x 是专门用于删除指定用户或组的整个 ACL 条目的选项,语法简洁安全:
-
setfacl -x u:alice /path/to/file→ 删除用户 alice 的 ACL 条目 -
setfacl -x g:devgroup /path/to/dir→ 删除组 devgroup 的 ACL 条目 - 支持同时删多个:
setfacl -x u:alice -x u:bob file.txt
执行后,该用户将不再出现在 getfacl 输出的 user:xxx:... 行中,其访问权限退回到基础权限(owner/group/others)控制范围。
注意 mask 和默认 ACL 的影响
删除用户 ACL 后,还需留意两点:
-
mask 不会自动更新:如果该文件原有 mask 限制(如
mask::rw-),即使删了 alice 的条目,也不影响其他仍存在的 ACL 用户。一般无需手动调 mask,除非你后续还要加新 ACL。 -
目录的 default ACL 不受影响:
-x只作用于当前文件/目录的访问 ACL(access ACL),不会动 default ACL。如需清理 default 条目,加-d参数:setfacl -d -x u:alice /path/to/dir
验证是否删除成功
运行以下命令确认用户条目已消失:
getfacl /path/to/file | grep "^user:alice:" # 若无输出,说明已清除
也可以直接看完整输出,确保 user:alice: 行不存在。











