Soft_Job 板


LINE

PHP2Shell 那篇有人问:sury 的回补套件只有 Debian/Ubuntu 能用,那 CentOS 怎麽办? 这篇就是答案。我们手上有二十几台 CentOS 7,跑的是 Webtatic 的 php71w 7.1.33。 Webtatic 早就不维护了,其中一套系统光评估升 PHP 8 就要 6 到 8 人天。 所以就自己打包了。网路上找不到有人针对 Webtatic 做过,顺手记下来。 先讲结论: rpmbuild 大约 35 分钟,每台主机上线含检查 2 到 7 分钟,php-fpm 只停 6 秒左右。 修补从哪来 官方给旧版本的最小修补是 php-src 的 commit 712e60f9ed(Avoid state corruption via bailout),但它没办法直接套到 7.1。 GitHub 上有几个社群做的 7.1 移植版,我拿四个去跟官方逐行比,最接近的是 Qsnh/php2shell-fixed,就用它。 sury 的 Debian patch 要先套他另一个 patch 才编得过,就没拿来用。 这个修补大概做了几件事: - 记忆体爆掉时直接让 worker 结束(_exit),不再带着做到一半的状态跳回去继续跑 - 关掉 upload_progress - 解析上传表单时只留必要的栏位,另外加了上传栏位数量上限 - 请求结束时把几个全域变数清乾净 我自己只改了一行。 移植版里把阵列初始容量设成 1,但 7.1 的杂凑表索引大小跟 7.3 以後不一样,设 1 会让记忆体对不齐。这是我请 Codex 看 diff 时它抓到的,我再回去翻 7.1 原始码确认, 改成 2: #define array_init_singleton(arg) do { \ array_init(arg); \ - Z_ARRVAL_P(arg)->nTableSize = 1; \ + Z_ARRVAL_P(arg)->nTableSize = 2; \ } while (0) 很小的一行,但没改的话是那种平常不会出事、哪天突然挂掉也查不出原因的坑。 怎麽编 用 podman 开一个 centos:7 容器,套件来源指到 vault 的封存 repo。 先验 Webtatic SRPM 的签章,再确认里面的原始码压缩档跟 php.net 官方的 sha256 一样。 spec 只改四个地方:Release 後面加 .php2shell1、加一行 Patch400、加一行 %patch400、补一笔 changelog。 接着: yum-builddep -y --define 'dist .w7' SPECS/php71.spec rpmbuild -bb --define "dist .w7" SPECS/php71.spec 第一次跑就死在 make: command not found,因为 yum-builddep 不会帮你装 make。补 装之後再跑,大约 35 分钟编完。Webtatic 的 spec 会编好几种 SAPI,所以不算快。 编出来 33 个 RPM,版本都是 7.1.33-1.w7.php2shell1。版本号排序比原本的 1.w7 新, 以後就算有人手滑 yum update,也不会被盖回去。 怎麽验 我没有拿网路上的攻击程式去打,自己写了一个不会造成破坏的检查,五项: 1. 送 3000 个栏位的上传表单,要被数量上限挡下 2. 正常上传 1MB 档案,要完整收到 3. 上传进度不能被写进 session 4. memory_limit 设 32M 让它爆掉,worker 要直接结束(没修补的版本只会报 Allowed memory size,然後继续活着) 5. 爆掉之後的请求还是要正常回 200 结果:原版 2/5,修补版 5/5,降回原版又变 2/5。 另外跑了 php.net 官方测试,9,454 项: 原版 通过 8,751 失败 34 修补版 通过 8,742 失败 43 多出来的 9 个失败都是预期内的:8 个是上传进度相关的 session 测试,1 个是在检查 旧的记忆体错误讯息。移植版作者回报的也是同样这 9 个。 怎麽上线 每台的流程: 1. 先记下 rpm -qa,再从 Webtatic 的镜像把原本的套件抓回来,当作退路 2. yum --assumeno 预览,画面只能出现「Upgrade N Packages」 3. 停 php-fpm,yum upgrade 本机的 RPM,php-fpm -t 检查设定,再启动 php-fpm 停大约 6 秒,一台含检查 2 到 7 分钟。要退回就用 yum downgrade 装回刚刚 备份的原版。 踩到的两个坑 1. 升级会把 /var/lib/php/session(还有 wsdlcache、opcache)的拥有者重设成 root:apache 770。我们的 php-fpm 不是用 apache 跑的,结果有一台 session_start() 坏了大约 4 分钟,chown 回去才恢复。容器测试没抓到,因为测试环境刚好就是用 apache 跑。升级前先把拥有者记下来。 2. WorkerMan 这种常驻的 CLI 程式,会继续跑旧的执行档,看 /proc/<pid>/exe 会显 示 (deleted)。记得一起重启。 7.4 呢 7.4 我没有自己编。exception0x876 有一份 php74-el7,是拿 Remi 的 7.4.33 重新编, 带的是同一个官方 commit。我验过他签章的 SHA256SUMS,也把他的 SRPM 跟 Remi 官方 的逐档比过,才放心用。 最後讲清楚:这只补了这两个 CVE,7.1 还是 7.1。 它换到的是时间,让我们能好好规划真正的升级,不用在骇客敲门的时候硬升。 -- Key君:「哈哈哈哈哈哈,我就是後宫之王——杉崎键! 我是为了野心不惜伤害重要的人, 但同时为了让她幸福也不怕万苦的男人!」 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 122.116.54.124 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1792872763.A.47C.html
1F:嘘 ladyboy99: PO这什小AI文 语句顺一下好吗 10/25 14:40
2F:→ asdfghjklasd: 他会回你几百亿流水 10/25 15:09
3F:嘘 encorek22554: 都用AI了直接升不就好了 10/25 16:17
4F:→ angusyu: 你烦不烦,是要几篇 10/25 16:34
5F:推 TAKADO: 大家现在可以体会热门套件维护者审山积的AI PR的心情了吧 10/25 17:22
6F:推 chan15: 我升级了好几个专案,5.6 7.x 都有,先主要功能都写 unitt 10/26 06:24
7F:→ chan15: est,开始修改程式码,升级 8.4 後跑测试跟语法检查,然後 10/26 06:24
8F:→ chan15: playwright-cli e2e,其中一个是功能极大的商城花了三个 10/26 06:24
9F:→ chan15: 小时,其他都两小时内,全程 opus 5.5 10/26 06:24
10F:推 Romulus: 我怀疑这几篇连续发文是来钓黑名单的 10/26 10:33
11F:→ Obama19: 就是个怪咖 不知道为何台湾软体业一堆这种人 10/26 12:01
12F:→ superpandal: 浪费时间弄这些一点意思也没有 我很久前也是一直在 10/26 20:44
13F:→ superpandal: rpmbuld dpkg-buildpackage 打补钉 最後发现这两个编 10/26 20:45
14F:→ superpandal: 译打包工具链都很垃圾 只是流行 用这些系统就更新就 10/26 20:48
15F:→ superpandal: 好 不是给你方便自定义和打安全补钉用的 其实一堆管 10/26 20:50
16F:→ superpandal: 理工具都是这样 一堆web介面的管理工具更是 10/26 20:52
17F:→ superpandal: 现在的运维就是学一下基本的工具 然後拿流行开源出来 10/26 20:56
18F:→ superpandal: 的web介面工具用来管理 devops其实也差不多 有意思的 10/26 20:59
19F:→ superpandal: 真的很少 以前有创意有想法多了 10/26 21:01
20F:嘘 mirror0227: AI 10/28 11:37
21F:嘘 kevin9527: ai随便用就好的东西 意义不明的文章 10/28 20:55
22F:推 holishing: 理论上这种事情选对发行版事半功倍,那麽喜欢自己打包的 11/02 20:08
23F:→ holishing: 话,只有 dpkg/rpm, dpkg-buildpackage/rpmbuild 也不够 11/02 20:10
24F:→ holishing: (能chroot/容器化却不做只会搞死自己), 所以...还是问 11/02 20:11
25F:→ holishing: AI吧 XDDD 11/02 20:11
26F:推 holishing: 合理的答案不会像你文章里那种挖东墙补西墙,这一定有更 11/02 20:14
27F:→ holishing: 成熟的工具不会让流程那麽混乱容易出错 11/02 20:15







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job 或 站内搜寻

TOP