用getfacl备份并恢复目录权限规则的核心是先完整导出acl配置再原样还原,全程不依赖tar或chmod;需root权限递归导出(sudo getfacl -r)、在上层路径用setfacl --restore精确还原,并通过getfacl或diff验证一致性。

用 getfacl 备份并恢复目录权限规则,核心是“先完整导出 ACL 配置,再原样还原”,整个过程不依赖 tar 或 chmod,专精于 ACL 和传统权限的精确复位。只要备份时覆盖全面、还原时路径和权限上下文一致,就能可靠恢复。
一、用 getfacl 完整备份目录 ACL 权限
必须以 root 身份执行,否则无法读取所有文件的 ACL(普通用户会跳过无权访问的条目,导致备份残缺):
- 递归导出整个目录树的 ACL 到文件:
sudo getfacl -R /path/to/dir > permissions.acl - 避免在目标目录内执行,防止把备份文件本身也纳入导出(
getfacl会自动去除路径前导/,但为防误操作,建议在父目录或临时路径运行) - 导出文件可压缩存档,例如:
gzip permissions.acl,不影响后续还原
二、用 setfacl --restore 精确还原权限
还原操作同样需要 root 权限,并且必须在原始备份时所在的**上层路径**执行(确保相对路径解析正确):
- 执行命令:
sudo setfacl --restore=permissions.acl - 该命令会逐行读取
permissions.acl中每个文件/目录的 owner、group、user/group ACL 条目、mask、default ACL 等全部信息,并一一写回 - 若要还原到其他位置(如测试环境),需先用
sed -i 's|^# file: |# file: /new/path/|' permissions.acl批量修正路径前缀,再还原
三、验证是否还原成功
不能只看 ls -l,必须用专用工具比对:
- 检查单个文件:
getfacl /path/to/file,对比是否与permissions.acl中对应段落完全一致 - 快速筛查差异:可用
diff permissions.acl (注意路径一致性) - 确认默认 ACL 是否生效:在目标目录下新建文件或子目录,用
getfacl查看其是否自动继承 default 规则
四、常见问题与注意事项
实际操作中容易忽略的关键点:
-
getfacl -R不保存 SELinux 上下文或 capability 属性——这些需配合tar --xattrs --xattrs-include='*'单独处理 - 备份后若修改了属主/属组(
chown),--restore不会改回;如需同步修复,应额外备份ls -ldn或stat输出 - 若还原时提示 “Operation not supported”,通常是目标文件系统不支持 ACL(如 vfat、ntfs-3g 默认关闭),需挂载时加
acl选项 - 不要用
chmod或chown混合操作后再还原——它们可能改变 mask 或覆盖 ACL,导致--restore行为异常











