umask在备份还原中完全无效,权限还原取决于归档工具参数、执行者身份及元数据完整性:打包需sudo加--acls--xattrs--selinux,还原须root执行并验证关键权限位。

umask 本身不参与还原过程,它只影响新建文件或目录的默认权限。在系统备份恢复阶段,真正决定还原后权限的是归档工具的行为、执行用户身份、以及是否启用权限还原参数——而不是当前 shell 的 umask 值。若误以为“只要设了 umask 077,还原出来的目录就自动变 700”,反而会埋下权限错误隐患。
关键在于:还原操作不是“创建新目录”,而是“复原已有权限”。此时 umask 完全不生效,起作用的是归档格式记录的元数据 + 解压命令的选项 + 执行者权限。
还原时 umask 为何无效
-
tar -xpf、rsync -a、cp -a等还原命令,目标权限由归档内存储的 mode/owner/ACL/xattrs 决定,不是按umask推算出来的。 - 即使你
su -c 'umask 002; tar -xpf backup.tar.gz',解压出的文件权限仍和归档里保存的一致(前提是用了对应还原参数)。 - 只有在未指定还原权限参数、且以非 root 用户执行时,
tar才会退化为用当前umask“估算”权限(这是不安全的降级行为,应避免)。
确保还原权限准确的三步闭环
-
打包阶段就存全权限信息
- 用
sudo tar --acls --xattrs --selinux -cpf backup.tar.gz /path打包,确保 ACL、扩展属性、SELinux 上下文一并记录。 - 避免
tar -cf或普通用户打包,否则 setuid、sticky、属主等关键信息会丢失或被重写。
- 用
-
还原必须用 root 执行,并显式启用权限还原
- 正确命令:
sudo tar --acls --xattrs --selinux -xpf backup.tar.gz -C /target -
--same-owner(-p的 root 特权模式)仅在 root 下自动启用;普通用户加-p也只会把属主改成自己,权限位还可能被umask截断。 - 验证:解压后运行
ls -ld /tmp,看是否带t;ls -l /usr/bin/passwd,看是否带s。
- 正确命令:
-
还原目标路径提前隔离与清空
- 不要直接解压到
/etc或/usr等活跃目录——混入旧文件会导致权限覆盖冲突,umask无关,但结果不可控。 - 推荐流程:先
mkdir /tmp/restore && sudo tar -xpf ... -C /tmp/restore,再用sudo rsync -aHAX /tmp/restore/ /同步,避免意外覆盖。 - 目标挂载点需支持权限特性:
findmnt -D /确认无noexec、nosuid、noacl等限制。
- 不要直接解压到
不复杂但容易忽略

















