办公软件
给部署包加权限校验,我比对四种压缩格式的元数据,结论有点意外
70 0 13
最近在搞部署包的权限校验,踩了个坑,记一笔。
背景:我们后端发版,部署包里混着可执行脚本和配置文件,权限位不对直接跑不起来。之前靠人肉 ls -l 核对,后来想着能不能在打包环节就把权限卡死,省得每次部署前还得手动查。
测试方法:拿同一个目录(含 755 脚本、644 配置、600 密钥文件),分别用 zip、tar.gz、7z、rar 打包,解压后对比权限位是否保留。Win 环境下用 7-Zip 24.08 和 WinRAR 7.01 命令行,Linux 侧用 unzip 6.0 和 tar 1.35 解压,各跑三遍。
结果:
- tar.gz:权限位完整保留,解压后和原目录一致。但 Win 下解压得用 bsdtar 或 WSL,普通用户拿 WinRAR 解出来权限全丢。
- 7z:能存权限属性(NTFS 或 Unix 扩展属性),但解压时得看解压工具支不支持。7-Zip 自己解没问题,Win 解压解出来权限位就没了。
- zip:默认不存 Unix 权限,加
-X参数能存,但很多图形解压工具不认。 - rar:WinRAR 默认存 NTFS 权限,Linux 侧解压需要 unrar 且带
-p或-ow参数,坑最多。
结论:如果部署链路全是 Linux,tar.gz 最稳;如果得在 Win 上打包、Linux 上跑,7z 加 7-Zip 命令行解压是折中方案,但得把解压工具版本锁死。Win 解压缩解压速度确实快,但命令行支持弱,没法在脚本里精确控制权限恢复,所以这活我现在交给 7-Zip 命令行干。
额外提醒:WinRAR 打包时默认勾选“保存文件安全信息”,存了 NTFS ACL,解压到 Linux 上会多出一堆 ._ 文件,别问我怎么知道的。
问题抛给你们:有没有人试过用 7z 的 -mcu=on 参数强制存 Unix 扩展属性?我测下来有的版本认、有的不认,想确认是不是我参数写错了。
登录后可以为帖子点赞,但本帖内容对所有人开放阅读。
