最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
权限管理中备份恢复如何在tar解压时使用-p参数保留原始文件所有权限
时间:2026-09-02 19:30:49 编辑:袖梨 来源:一聚教程网
必须用root执行sudo tar -xpf并加--acls --xattrs --selinux才能真正还原全部权限;普通用户下-p仅改权限数字、丢属主和特殊位,且ACL、capability、SELinux等深层属性需显式参数支持。
用 tar -xp 解压时加 -p 确实能保留基础权限,但“保留所有权限”不等于“解压后一切正常”——它只管传统权限位(rwx、setuid、sticky、时间戳等),且效果高度依赖执行身份和目标环境。真正起作用的关键不是“有没有 -p”,而是“谁在运行、在哪解、归档里有没有、系统认不认”。
必须用 root 执行,否则 -p 形同虚设
-p 在普通用户下仅保留权限数字(如 755),但会强制把属主/属组改成当前用户,setuid(s)、sticky(t)位静默丢失,比如 /usr/bin/passwd 解压后没了 -rwsr-xr-x 中的 s,直接导致提权失效。只有 root 运行时,-p 才自动启用 --same-owner,还原 UID/GID 和特殊权限位。
- ✅ 正确:
sudo tar -xpf app.tar.gz -C /opt/app - ❌ 错误:
tar -xpf app.tar.gz -C /opt/app(即使加了 -p,属主也变成你,setuid 被丢)
-p 只保基础层,ACL/capability/SELinux 需额外参数
很多报错(如 ping: Operation not permitted、avc denied、目录被 chattr +i 锁死)根源不在 rwx,而在扩展属性:-p 完全不处理这些。
-
--acls:还原getfacl/setfacl设置的访问控制列表 -
--xattrs:还原扩展属性,包括security.capability(如cap_net_raw)和user.*自定义键 -
--selinux:还原 SELinux 上下文(如system_u:object_r:bin_t:s0),缺它 audit 日志满屏 avc
典型完整命令:sudo tar --acls --xattrs --selinux -xpf app.tar.gz -C /opt/app
别直接解压到运行中的服务目录
即使 -p 全生效,直接覆盖 /etc、/usr/local 或正在运行的 /opt/myapp,也会引发隐性冲突:旧配置覆盖新配置、日志目录属主重置、服务因无法写入而崩溃。
- 先解压到空目录,例如:
sudo tar -xpf app.tar.gz -C /tmp/restore - 再用
cp -a或rsync -aHAX同步关键路径(它们比 tar 更稳,且默认含 -p + 扩展属性) - 覆盖前务必备份原目录:
mv /opt/myapp /opt/myapp.bak.$(date +%s)
验证是否真生效,不能只看 ls -l
光看 ls -l 不够,得查底层元数据:
- 检查 setuid/sticky:
ls -l /usr/bin/passwd(应有s),ls -ld /tmp(应有t) - 查完整权限位:
stat /path/to/file | grep "Access:",确认是否含04000(setuid)、1000(sticky) - 查 ACL:
getfacl /path/to/dir(非空输出才说明 --acls 生效) - 查 capability:
getcap /bin/ping(应显示cap_net_raw+ep)
相关文章
- 洛克王国天火废墟在什么位置 09-02
- Redis 性能测试 09-02
- Redis 客户端连接 09-02
- TPLink TLWR2041+ 无线路由器映射服务器操作指导 09-02
- Redis 管道技术 09-02
- 实况足球2016手机版下载 实况足球2016安卓下载地址 09-02