• shenzhenhk

    非 IT 企业,我部门服务器用的是 Ubuntu 24.04 LTS ,自带的 PHP 版本是 8.3.6 ,以后就算一直升级,版本也不会变,只会打补丁变成 8.3.6-0ubuntu0.24.04.XX 这样

    这次 PHP 漏洞发生后,我们第一时间更新到了 8.3.6-0ubuntu0.24.04.13 ,这是 ubuntu 官方公告的修复版。

    结果上方的监控部门发信来说我们没有升级,要求按照 https://www.php.net/archive/2026.php 官网要求升级到 8.3.36 以上

    于是我们得费劲跟他解释 8.3.6-0ubuntu0.24.04.13 就是安全修复后的版本,他还是不懂为什么 8.3.6-0ubuntu0.24.04.13 高于 8.3.36

    其实根源就在于发行版一发布就锁定软件包版本。如果允许小版本浮动,例如 Ubuntu 24.04 刚开始是 PHP 8.3.6 ,后续升级可以是 8.3.7 -> 8.3.8 等,就不会那么难理解了。

    另外 Python 锁定的好像是大版本,例如 Ubuntu 24.04 锁定 3.12 ,后面的小版本还是会升。不过 Python 大部分人用的都是虚拟环境,与系统自带关系不大。

    主楼
  • rodericliu

    现在 php 都用容器,用 remi 的源自己 build image ,ubuntu 自带的版本太老

    #1
  • hefish

    人家 alpine 就不锁,所以 ubuntu 也不应该锁。。。

    #2
  • hefish

    对了,不能不让他们看到 php 的版本好哒。。。

    #3
  • Muniesa

    LTS 就是这样的吧,在整个支持周期内更新的版本不会引入和删除接口和功能,只做漏洞修复,确保兼容性,php 应该是小版本间也有功能差异? Python 这边最后一位版本号是只做漏洞修复的所以可以直接用。

    #4
  • Cu635

    op 有没有给“上方的监控部门”看 ubuntu 的官方安全公告?里面直接明确了修复状态,不用纠结版本号的事儿了:
    https://ubuntu.com/security/CVE-2026-109619
    https://ubuntu.com/security/CVE-2026-109618

    @xiliuya #5
    换句话说,php 的最后一位小版本更新也有不兼容?

    #6
  • SoulFlame

    @Cu635 #6 我一直以来更新最后一位小版本都是直接更,还未遇到兼容问题。

    #16
  • xiliuya

    锁定版本号可以避免大版本的更新导致的不兼容,这也是为什么很多项目只指定某个版本,这是为了稳定和安全考虑的

    #5
  • realpg

    对于 ubuntu 我想说 你可以把 php-指向 php8.1-
    但是你对整个大版本都不再维护其他版本的 php 包就很离谱

    另外 发现个奇葩问题
    我有些机器不在意 php 版本 就是装了个 php-fpm 用来输出一些简单东西,其实不更新也没啥很多都是内网机器

    然后因为这个漏洞我运维平台集体下发,没办法用 ppa add 了一个最大的 php 源
    然后 apt remove php8.1-*时候 会自动装上 php8.4-的对应包
    然后我还得手动卸载了 php8.4 再手动安装 php8.5-*

    #19
  • busier

    国内监管啥也不懂 还喜欢瞎管 这才是最恶根源

    #7
  • villivateur

    因为 Ubuntu 这类 Linux 发行版的哲学就是,选择一个固定的内核、一个固定的 init 、一堆固定的应用,然后打包出一个稳定的发行版版本。这样能确保可靠性。
    也就是说,一个程序能在你的 Ubuntu24.04 上跑,那也一定能在我的 Ubuntu24.04 上跑。
    要及时更新主版本号的话,建议选择那些滚动更新的发行版,比如 manjaro 。

    #8
  • newmlp

    不然怎么体现 Linux 的稳定呢

    #9
  • liaohongxing

    Ubuntu 是在版本不变的情况下,手动在源码级别合并了漏洞补丁再编译的。

    LTS 版本的意义就是防止用户发帖喷一升级整个系统都崩了。缺点就是连小版本都不更新,但是 mysql 的小版本又在滚动,不知道是什么发布政策。

    #10
  • shenzhenhk

    @liaohongxing python 的小版本也是滚动的

    #11
  • ulpyxua

    直接把系统自带的 php, python 全部卸载掉就可以了。再装个宝塔容器,或者 自己 build 个 php 的容器,挂载服务器目录起网站

    #12
  • billlee

    你在非 IT 企业,应该对这个更清楚啊。作为非 IT 企业,软件都是从外面的软件厂商买来的,有问题没办法自己修,所以只能验证过的版本上运行,随便升级版本你不知道哪里有个潜在的 bug 就爆发出来了。

    所以这些发行版的策略是锁定一个版本,只在有安全漏洞的时候把相关的补丁单独挑出来应用。

    至于有的软件是锁小版本,有的软件锁大版本,这个主要就和上游软件的复杂程度和版本管理策略有关。有的上游的小版本真的就是只修严重 bug, 不会引入太多修改,这个就可以锁大版本。有的上游小版本就是各种大小 bug 都一起改,甚至还加新功能,这种就不敢跟了。

    另外还看发行版的大客户的需求,发行版里面官方维护哪些软件包,按什么策略维护,可能都是根据他们的主要客户的需求来的。其它人就是搭车用用。

    #13
  • vsomeone

    Ubuntu 这种是自己维护了一个代码仓,基线是 8.3.6 ,后面所有的修复都是 Ubuntu 的人 review 之后 backport 进去的,所以前面的版本号固定成了 8.3.6 。RHEL 系的发行版基本都是这样做的,Debian 系的好像只有 Ubuntu 会这样做。其他依赖社区的发行版只会对少部分软件维护代码仓,大部分软件都是用开源的代码直接编译过来

    #14
  • Hardrain

    这就是 point release ,如果不喜欢可以用 rolling release ,你就会得到和 upstream 几乎一样的版本号。

    当然,新版本的 bug 也可能一并被 port 过来,point release 是采取 freeze 后 + upstream 新版本发布后只 backport 安全更新(而不 backport 功能更新)的模式,类似于 Firefox ESR 的模式。

    #15
  • Hardrain

    如果你们公司用的网络安全解决方案不能 source 到各个 downstream distros (或者至少你们使用的 distros )自己的 SA 所提及的 patched versions ,那它是个垃圾产品,应该被淘汰。

    #17
  • RuralHunter

    ubuntu 软件前面的版本号是上游的版本号,后面的版本是 ubuntu 定制的版本号。上游小版本未必不改,取决于软件的小版本改变的意义。ubuntu 的策略一般是如果小版本是有新功能升级或兼容性风险的,一般就不会跟着改,特别是比较核心的软件。一些无关轻重的软件,ubuntu 自己是懒得定制的,一般都会跟着上游版本改。

    #18
  • tcchen

    因为 apt 上有很多包都依赖 php 吧

    #20
  • zuokanyunqishi

    直接给他弄个 poc 验证,不妥了...

    #21
  • iceheart

    我丢给 ai 它给加了个 apt 源就更新到 8.3.36 了

    #22

发表回复

登录后回复