权限保留取决于执行者身份、工具及属性类型:rsync用-a即可,但属主属组仅root能还原;tar需sudo加-p才真正生效,深层属性须显式加--acls/--xattrs/--selinux。

Linux 文件系统备份中,权限保留不是“加个参数就完事”,而是取决于谁执行、在哪执行、用什么工具、针对哪类属性——rsync 和 tar 各有侧重,不能混用逻辑。
rsync 保留权限:-a 就够了,但属主属组要看身份
rsync 的 -a(archive) 参数已内置 -p(权限)、-t(时间戳)、-o(属主)、-g(属组)、-l(软链接)、-D(设备文件)等行为,等效于 -rlptgoD。日常使用无需拆开拼凑。
- 普通用户运行时,-o 和 -g 会静默忽略(无权修改属主),但 -p 仍生效:目标文件权限与源一致
- root 执行时,-a 能完整还原属主、属组、权限、时间戳、链接等全部元数据
- 路径末尾斜杠很重要:
/src/同步内容,/src同步整个目录(多一层嵌套) - 若目标权限异常,先确认目标目录本身可写(如
chmod 755 /backup),再检查 SELinux 是否拦截(临时可setenforce 0测试)
tar 保留权限:-p 是基础,但 root 才真管用
tar 默认记录权限和属主,但解压时能否真正还原,关键在执行者身份。
-
-p在 root 下解压才真正启用--same-owner,写入原始 UID/GID;普通用户解压,属主会变成当前用户,setuid/sticky 位也会丢失 - web 目录缺执行权限(x)导致 403、二进制无法运行、目录进不去,常因非 root 解压所致
- 打包阶段无需额外操作;解压必须用
sudo tar -xpf archive.tar.gz -C /target - 切勿直接解压到正在运行的服务目录(如
/etc或/usr/local),应先解到空目录,再用cp -a或rsync -aHAX精准同步
深层属性:ACL、扩展属性、SELinux 需显式支持
传统 -p 只覆盖 rwx、setuid、sticky 等基础权限。数据库、容器、安全工具依赖的属性,必须单独启用:
-
--acls:还原getfacl/setfacl设置的访问控制列表 -
--xattrs:还原扩展属性,包括 capability(如cap_net_raw)、user.*自定义键 -
--selinux:还原 SELinux 上下文(如system_u:object_r:bin_t:s0),否则策略引擎直接拒绝访问 - 推荐组合:
sudo tar --acls --xattrs --selinux -xpf backup.tar.gz -C /opt/app
验证是否真还原成功:别信输出,要动手查
命令没报错 ≠ 权限已到位。必须人工验证关键项:
- 查 setuid/sticky:
ls -l /usr/bin/passwd看是否有s,ls -ld /tmp看是否有t - 查 ACL:
getfacl /path/to/file对比备份前后 - 查 capability:
getcap /bin/ping确认是否含cap_net_raw+ep - 检查挂载选项:
findmnt -D /opt,若分区挂了noexec或nosuid,即使权限写入成功,内核也会运行时忽略











