关键是要用root执行sudo tar --acls --xattrs --selinux -xpf archive.tar.gz -C /opt/app,优先解压到空目录再迁移,避免覆盖引发权限冲突;-p仅保基础权限,ACL、xattrs、SELinux等需额外参数。

用 tar 备份 Linux 目录结构并真正保留权限,关键不在“加不加 -p”,而在于谁执行、在哪解、保什么层。
必须用 root 执行解压
普通用户运行 tar -xpf 即使加了 -p,属主也会变成当前用户,setuid/sticky 位丢失,web 目录可能缺执行权导致 403 错误。只有 root 运行时,-p 才自动启用 --same-owner,真实还原 UID/GID 和特殊权限位。
- 正确写法:
sudo tar -xpf backup.tar.gz -C /opt/app - 错误写法:
tar -xpf backup.tar.gz -C /opt/app(非 root 用户) - 验证是否生效:解压后运行
ls -l /usr/bin/passwd看是否有s,ls -ld /tmp看是否有t
避免覆盖引发的隐性权限冲突
直接解压到正在运行的服务目录(如 /etc、/usr/local)极易导致配置被旧版覆盖、日志目录属主重置、服务无法写入等故障。
HBuilderX 是由 DCloud 推出的一款轻量级前端开发工具,在 Linux 系统上主要用于 Web 开发与跨平台应用开发,尤其适合 Vue 和 uni-app 相关项目。
- 推荐流程:先解压到空目录(如
/tmp/restore),再用cp -a或rsync -aHAX同步关键路径 - 覆盖前务必备份原目录:
mv /opt/myapp /opt/myapp.bak.$(date +%s) - 检查目标分区挂载选项:
findmnt -D /opt,若含noexec或nosuid,即使权限写入成功,内核也会在运行时忽略
深层属性不能只靠 -p
-p 只管传统权限(rwx、setuid、sticky),但 ACL、capabilities、SELinux 上下文等常被忽略,而它们正是 audit 日志报 avc denied、ping: Operation not permitted 或目录被 chattr 锁死的根源。
-
--acls:还原getfacl/setfacl设置的访问控制列表 -
--xattrs:还原扩展属性,包括cap_net_raw等 capability 和user.*自定义键 -
--selinux:还原 SELinux 上下文(如system_u:object_r:bin_t:s0) - 完整推荐命令:
sudo tar --acls --xattrs --selinux -xpf backup.tar.gz -C /opt/app
打包阶段也要注意路径干净
tar 默认会剥离绝对路径前导斜杠,但若打包时未切换工作目录或未用 -C,归档内可能混入 /home/user/ 这类绝对前缀,解压后多出冗余层级。
- 安全做法:打包前
cd到父目录,用相对路径:cd /opt && tar -cf app.tar app/ - 或显式指定根目录:
tar -C /opt -cf app.tar app/ - 解压前先确认内容:
tar -tzf backup.tar.gz | head -5,确保路径简洁无多余前缀








