ACL权限需用getfacl/setfacl备份恢复:getfacl -R导出、setfacl --restore恢复,注意权限、路径有效性及文件系统ACL支持,恢复后须验证。

ACL(访问控制列表)权限不能通过普通 ls 或 chmod 查看或还原,必须借助 getfacl 和 setfacl 工具进行备份与恢复。
用 getfacl 导出 ACL 权限配置
导出是备份的第一步,确保所有目录和文件的 ACL 规则被完整记录为可读文本。
- 导出单个文件或目录:
getfacl /path/to/file > acl_backup.txt - 递归导出整个目录树(含子目录和文件):
getfacl -R /path/to/dir > acl_full_backup.txt - 若路径含空格或特殊字符,建议加引号:
getfacl -R "/home/user/my project" > backup.acl
导出时注意权限与路径有效性
运行 getfacl 需对目标有读取 x 权限(对目录)和读取 r 权限(对文件),否则会报错跳过。非 root 用户无法读取其他用户设置的 ACL(如系统目录),此时可:
- 使用
sudo getfacl提权导出(需 sudo 权限) - 确认目标路径真实存在且未被挂载覆盖(如 NFS、overlayfs 可能不支持 ACL)
- 避免导出符号链接本身(
getfacl默认解析链接目标;加-h可查看链接自身 ACL,但极少用)
用 setfacl 恢复 ACL 权限
恢复操作依赖之前导出的文本文件,且要求文件系统已启用 ACL 支持(ext4/xfs 等默认开启,需挂载选项含 acl)。
- 从备份文件批量恢复:
setfacl --restore=acl_full_backup.txt - 恢复前建议先测试语法是否合法:
setfacl --test --restore=acl_full_backup.txt 2>&1 | head -10 - 若只恢复某一部分,可先用文本工具提取对应段落再重定向:
sed -n '/# file: \/var\/log/,/^$/{p; /^$/q;}' acl_backup.txt | setfacl --restore=-
验证恢复结果是否准确
恢复后务必抽查关键路径,防止因路径变更、用户/组 ID 不一致或权限冲突导致异常。
- 检查单个目标 ACL:
getfacl /path/to/file - 对比恢复前后差异(需保留原始备份):
diff -u - 注意 UID/GID 映射:若备份在 A 主机生成,恢复到 B 主机时,用户名可能不同但 UID 相同——
getfacl记录的是数字 ID,setfacl恢复时也按 ID 匹配,不是名称

















