Linux ACL 备份与恢复依赖 getfacl -R 导出和 setfacl --restore 回滚,仅操作权限元数据;需同步备份 /etc/passwd 和 /etc/group 或 UID/GID 映射,并结合 cron、inotifywait 实现自动化与安全加固。

Linux 备份与恢复 ACL 权限,核心就靠两个命令:getfacl 导出、setfacl --restore 回滚。它不碰文件内容,只保存和还原权限元数据,轻量、精准、可版本化。
用 getfacl 递归备份整个目录树的 ACL
getfacl -R 是标准做法,能同时捕获基础 UGO 权限、所有显式 ACL 条目(如 user:alice:rwx)、属主/属组名称及注释信息:
- 备份关键路径(推荐):getfacl -R /etc /home /opt > perms-$(date +%F).acl
- 备份当前目录及子目录:getfacl -R . > permissions.acl
- 输出是纯文本,带 # file、# owner 等标记,确保 restore 时路径和层级准确
- 文件极小(KB 级),适合 Git 管理或每日定时归档
用 setfacl --restore 精准恢复,不依赖当前状态
setfacl --restore 直接按备份文件逐项重写权限,跳过已删除文件,不影响新增文件,也不会误删未在备份中声明的扩展 ACL:
- 全量恢复:setfacl --restore=perms-2026-07-28.acl
- 仅恢复某子目录(如只修 /etc):setfacl --restore=perms-2026-07-28.acl /etc
- 执行前先预演:setfacl --test --restore=perms-2026-07-28.acl,确认无报错再操作
- 注意:恢复必须在原路径挂载点下进行,否则路径不匹配会失败
补全归属快照,避免 UID/GID 错位
getfacl 只记录用户名/组名,不存 UID/GID 数值。若系统重建或用户重编号,仅靠 .acl 文件可能还原出错误权限:
- 同步备份用户数据库:cp /etc/passwd /etc/group /backup/
- 或导出当前所有文件的 UID/GID 映射:find /etc -printf '%p %u:%g\n' > /backup/etc_ownership.list
- 这样即使 passwd 被修改,也能对照还原原始归属关系
自动化与安全加固建议
把权限快照变成日常习惯,比出事再抢救更可靠:
- 加进 crontab 每日凌晨执行:0 2 * * * root getfacl -R /etc /home > /backup/perms-$(date +\%F).acl
- 用 inotifywait 监控 /etc 变更,chmod 或 chown 一触发就立刻快照
- 将 .acl 文件同步到只读 NFS 或 Git bare repo,防本地磁盘损坏导致备份丢失
- 对敏感目录(如 /boot)可设 chattr +a(仅追加)或 +i(不可变),但 +i 会阻断系统更新,慎用


















