软件吧
登录注册账号
/posts/acl
电脑必备

部署包解压后权限全乱,我拿两台服务器对账,发现是解压工具没保留ACL

码农小张 88 0 13

上周发版踩了个坑,记录一下,给同样用脚本解压部署包的兄弟提个醒。

场景:CI 流水线把构建产物打成 zip,传到目标机后由部署脚本自动解压。一直跑得好好的,结果这次上线后服务起不来,日志报权限拒绝。

排查过程:

  1. 先看文件权限,ls -l 一看,解压出来的可执行文件全变成了 644,原本应该是 755。
  2. 怀疑是打包环节的问题,在构建机上解包测试,权限是对的,排除。
  3. 找运维要了目标机的操作记录,发现解压用的是 Win解压缩 的命令行模式(为了图快)。
  4. 拿两台测试机对账:同一份 zip,A 机用 Win解压缩 解压,B 机用 7-Zip 解压(都带 -aos 之类参数),结果 7-Zip 把 Unix 权限位完整还原了,Win解压缩 解出来全是 644,ACL 和属主信息也丢了。

结论:

  • Win解压缩 在 Windows 桌面端解压确实快,GUI 操作也顺手,但它的命令行对 Unix 权限位的保留支持不行,跨平台部署包慎用。
  • 7-Zip 的 7z x 能保留权限位,配合 -p 和 -o 参数适合脚本化部署。
  • 如果非要用 Win解压缩 做日常压缩,建议只用于纯 Windows 环境的日志、文档包,别往 Linux 服务器上扔。

我的选型建议:

  • 普通用户:Win解压缩 够用,右键菜单和速度都省心。
  • 开发/运维:7-Zip 命令行更靠谱,尤其是涉及权限、符号链接的包。
  • 混合环境:打包时就用 7z 格式,解压端统一用 7-Zip,避免来回折腾。

留个问题:

你们在 CI 里解压部署包都用什么工具?有没有遇到过权限位丢失导致服务起不来的情况?有没有试过 tar.gz 的方案?欢迎交流。

登录后可以为帖子点赞,但本帖内容对所有人开放阅读。

社区回应

0 Replies

还没有回应,抢一个沙发。

登录后可以回应和点赞,但本帖内容对所有人开放阅读。