完整保留高级ACL属性需同时满足:root权限运行、启用--acls--xattrs--xattrs-include='*'三参数、目标文件系统挂载时含acl选项;缺一不可,否则ACL或capabilities等元数据将丢失。

在 Linux 系统中,用 tar 打包备份时完整保留高级 ACL 属性,关键不是只加 --acls,而是必须满足三个条件:以 root 权限运行、显式启用 ACL 与扩展属性(xattrs)支持、目标文件系统挂载时启用 acl 选项。
必须同时启用三项 tar 参数
ACL 是 POSIX 扩展元数据,普通 tar -cpzf 完全忽略它。--acls 只保存传统访问控制列表(如 user:alice:rwx),但现代系统中常伴随的 capabilities、SELinux 上下文、trusted/user 扩展属性等,需额外参数配合:
-
--acls:保存 POSIX ACL 条目(用户/组级访问规则) -
--xattrs:启用扩展属性整体支持 -
--xattrs-include='*':强制包含所有命名空间(security.*、trusted.*、user.*、system.*),避免默认仅存system.*
缺一不可。例如,漏掉 --xattrs-include='*',getcap /bin/ping 显示的 capability 就会丢失。
操作必须在 root 权限下执行
非 root 用户即使加了 --acls,解压时也无法写入 ACL 或 xattrs——系统会静默跳过,不报错也不生效。
- 备份命令示例:
sudo tar --acls --xattrs --xattrs-include='*' -cpzf backup.tar.gz /data/app - 恢复命令示例:
sudo tar --acls --xattrs --xattrs-include='*' -xpzf backup.tar.gz -C /restore/path
注意:恢复前确保 /restore/path 已存在,且所在分区挂载时含 acl 选项(可用 mount | grep "$(df /restore/path | tail -1 | awk '{print }')" | grep acl 验证)。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
验证是否真正保留成功
不能只看 ls -l —— 它只显示基础权限,带 ACL 的文件末尾会多一个 +,但这只是提示,不代表内容完整。
- 查 ACL 是否还原:
getfacl /restore/path/file,对比源端输出是否一致 - 查扩展属性:
getfattr -d /restore/path/file(如需看 SELinux 上下文,加-m security.selinux) - 查特殊标志:
lsattr /restore/path/file(验证i、a等 chattr 属性)
替代方案:用 getfacl + setfacl 单独备份 ACL
若只需保留 ACL(不涉及 capabilities/SELinux),可脱离 tar,用原生命令组合更轻量、更可控:
- 备份 ACL:
getfacl -R /source/dir > acl-backup.txt - 恢复 ACL:
setfacl --restore=acl-backup.txt(需在目标目录下执行,且目标文件必须已存在)
该方式不依赖 tar 版本或 xattrs 支持,适合 ACL 为主、环境受限的场景。










