setfacl -b 是清空扩展 acl 规则最直接常用的方式,保留基础权限(u/g/o),同时移除所有额外用户/组条目及默认 acl,适用于撤回误配、调试排障或迁移清理等场景。

setfacl -b 是清空扩展 ACL 规则最直接、最常用的方式。它保留基础权限(即所有者、所属组、其他人的 rwx),只移除所有额外添加的用户/组 ACL 条目(包括默认 ACL),适合快速“回归传统权限模型”。
什么时候该用 -b
- 你之前用
setfacl -m给多个用户或组加过权限,现在想彻底撤回,只留原始 u/g/o 权限 - 某个目录被误配了复杂 ACL,导致权限行为异常,需快速重置
- 迁移前清理遗留 ACL,避免干扰新权限策略
- 调试时排除 ACL 干扰,确认问题是否源于扩展规则
注意:-b 不影响文件原有属主、属组、chmod 设置的权限,也不会改变文件内容或属性。
基本用法与示例
# 清空单个文件的扩展 ACL setfacl -b file.txt # 清空单个目录的扩展 ACL(不递归) setfacl -b /path/to/dir # 清空目录及其所有子文件、子目录的 ACL(递归) setfacl -b -R /path/to/project # 清空后立即验证(应看不到 user:xxx 或 group:xxx 行) getfacl file.txt | grep -E "user:|group:" # 输出为空,说明已清空成功
执行后,文件权限显示中末尾的 + 符号会消失(如 ls -l file.txt 原为 -rw-rw-r--+,清空后变为 -rw-rw-r--),这是 ACL 已被移除的直观标志。
常见注意事项
-b会同时删除所有扩展条目 + 默认 ACL(default ACL),不需要再单独加-k若只想删默认 ACL(比如只清理目录的
default:user:xxx:r-x,但保留当前文件上的用户权限),应改用-k对符号链接,默认不跟随;如需处理链接指向的目标,可加
-P(物理模式)或-L(逻辑模式),但通常不建议对链接本身设 ACL-
执行前建议先备份当前 ACL(尤其对生产目录):
getfacl -R /path/to/dir > acl_backup.txt
后续可用
setfacl --restore=acl_backup.txt恢复 没有 root 权限时,只能对自己拥有的文件/目录执行
-b;若提示Operation not permitted,检查是否为 root 所有或是否启用了CAP_DAC_OVERRIDE等能力限制
对比其他清除方式
| 命令 | 作用 | 是否删默认 ACL | 是否递归 |
|---|---|---|---|
setfacl -b file |
清空该文件所有扩展 ACL | ✅ | ❌ |
setfacl -b -R dir |
清空目录及全部子项扩展 ACL | ✅ | ✅ |
setfacl -k dir |
仅删除目录的 default ACL(不影响当前文件权限) | ✅ | ❌(仅作用于目录本身) |
setfacl --set=u::rwx,g::rx,o::rx file |
完全重写 ACL,等效于清空并重设基础权限 | ❌(需手动指定) | ❌ |
-b 是最简洁、最安全的“一键还原”操作,运维中优先选用。











