setfacl -x 可精准删除指定用户或组的 acl 条目而不影响其他权限;需先用 getfacl 确认存在对应条目,再执行 setfacl -x u:用户名 或 -x g:组名,支持递归和多条目批量删除,验证用 getfacl 查看是否消失。

用 setfacl -x 可以精准删掉某个用户或组的 ACL 条目,不影响其他权限,也不改动文件所有者、所属组或基础 rwx 设置。
先确认目标用户或组确有ACL条目
运行 getfacl 文件名 查看当前 ACL 列表。如果输出里有类似 user:baduser:r-x 或 group:oldteam:--- 的行,说明该用户/组确实被单独赋权。若权限字符串末尾没 + 号,说明文件系统未启用 ACL,需先检查挂载选项(如 tune2fs -l /dev/sdX | grep acl 或 mount | grep acl)。
执行 -x 删除指定条目
语法固定,只删你明确指定的对象:
- 删单个用户:
setfacl -x u:用户名 文件路径 - 删单个组:
setfacl -x g:组名 目录路径 - 递归删目录下所有匹配项:
setfacl -R -x u:tempuser /var/log/app - 一次删多个:
setfacl -x u:user1 -x u:user2 -x g:teamA script.sh
注意:-x 不会动 mask、default ACL、owner/group/other 权限,也不会影响其他用户的 ACL 条目。
验证是否删干净
再次运行 getfacl 文件名:
- 输出中不再出现
user:用户名:或group:组名:行 - 权限字符串末尾的
+号是否还在——只要还有别的 ACL 条目(比如其他用户或 default),+就保留;全删光了才会消失 - 若想确认该用户现在是否真的按 UGO 规则访问,可用
ls -l看基础权限,并测试其实际访问行为
别和 -b 混用
-x 是“点删”,-b 才是“清空”:
-
setfacl -b 文件会删掉所有扩展 ACL,只剩 owner/group/other 三段基础权限 - 合规清理通常只需 -x,避免误伤其他协作人员的访问能力
- 误删后无法自动恢复,ACL 不自带备份,操作前建议用
getfacl > backup.acl留痕











