• 请不要在回答技术问题时复制粘贴 AI 生成的内容
shenzhenhk
V2EX  ›  程序员

Ubuntu 等 Linux 发行版一发布,就锁定 PHP 版本号的原因是什么?

  •  
  •   shenzhenhk · 7h 57m ago · 2382 views
    非 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 大部分人用的都是虚拟环境,与系统自带关系不大。
    21 replies  •  2026-10-23 15:48:02 +08:00
    rodericliu
        1
    rodericliu  
       7h 56m ago
    现在 php 都用容器,用 remi 的源自己 build image ,ubuntu 自带的版本太老
    hefish
        2
    hefish  
       7h 55m ago
    人家 alpine 就不锁,所以 ubuntu 也不应该锁。。。
    hefish
        3
    hefish  
       7h 54m ago
    对了,不能不让他们看到 php 的版本好哒。。。
    Muniesa
        4
    Muniesa  
       7h 49m ago
    LTS 就是这样的吧,在整个支持周期内更新的版本不会引入和删除接口和功能,只做漏洞修复,确保兼容性,php 应该是小版本间也有功能差异? Python 这边最后一位版本号是只做漏洞修复的所以可以直接用。
    xiliuya
        5
    xiliuya  
       7h 45m ago
    锁定版本号可以避免大版本的更新导致的不兼容,这也是为什么很多项目只指定某个版本,这是为了稳定和安全考虑的
    Cu635
        6
    Cu635  
       7h 32m ago
    op 有没有给“上方的监控部门”看 ubuntu 的官方安全公告?里面直接明确了修复状态,不用纠结版本号的事儿了:
    https://ubuntu.com/security/CVE-2026-109619
    https://ubuntu.com/security/CVE-2026-109618

    @Muniesa #4 @xiliuya #5
    换句话说,php 的最后一位小版本更新也有不兼容?
    busier
        7
    busier  
       7h 23m ago via Android
    国内监管啥也不懂 还喜欢瞎管 这才是最恶根源
    villivateur
        8
    villivateur  
       7h 15m ago
    因为 Ubuntu 这类 Linux 发行版的哲学就是,选择一个固定的内核、一个固定的 init 、一堆固定的应用,然后打包出一个稳定的发行版版本。这样能确保可靠性。
    也就是说,一个程序能在你的 Ubuntu24.04 上跑,那也一定能在我的 Ubuntu24.04 上跑。
    要及时更新主版本号的话,建议选择那些滚动更新的发行版,比如 manjaro 。
    newmlp
        9
    newmlp  
       7h 11m ago
    不然怎么体现 Linux 的稳定呢
    liaohongxing
        10
    liaohongxing  
       7h 8m ago
    Ubuntu 是在版本不变的情况下,手动在源码级别合并了漏洞补丁再编译的。

    LTS 版本的意义就是防止用户发帖喷一升级整个系统都崩了。缺点就是连小版本都不更新,但是 mysql 的小版本又在滚动,不知道是什么发布政策。
    shenzhenhk
        11
    shenzhenhk  
    OP
       6h 48m ago via iPhone
    @liaohongxing python 的小版本也是滚动的
    ulpyxua
        12
    ulpyxua  
       5h 22m ago
    直接把系统自带的 php, python 全部卸载掉就可以了。再装个宝塔容器,或者 自己 build 个 php 的容器,挂载服务器目录起网站
    billlee
        13
    billlee  
       5h 18m ago
    你在非 IT 企业,应该对这个更清楚啊。作为非 IT 企业,软件都是从外面的软件厂商买来的,有问题没办法自己修,所以只能验证过的版本上运行,随便升级版本你不知道哪里有个潜在的 bug 就爆发出来了。

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

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

    另外还看发行版的大客户的需求,发行版里面官方维护哪些软件包,按什么策略维护,可能都是根据他们的主要客户的需求来的。其它人就是搭车用用。
    vsomeone
        14
    vsomeone  
       3h 1m ago
    Ubuntu 这种是自己维护了一个代码仓,基线是 8.3.6 ,后面所有的修复都是 Ubuntu 的人 review 之后 backport 进去的,所以前面的版本号固定成了 8.3.6 。RHEL 系的发行版基本都是这样做的,Debian 系的好像只有 Ubuntu 会这样做。其他依赖社区的发行版只会对少部分软件维护代码仓,大部分软件都是用开源的代码直接编译过来
    Hardrain
        15
    Hardrain  
       2h 42m ago
    这就是 point release ,如果不喜欢可以用 rolling release ,你就会得到和 upstream 几乎一样的版本号。

    当然,新版本的 bug 也可能一并被 port 过来,point release 是采取 freeze 后 + upstream 新版本发布后只 backport 安全更新(而不 backport 功能更新)的模式,类似于 Firefox ESR 的模式。
    SoulFlame
        16
    SoulFlame  
       2h 42m ago
    @Muniesa #4
    @Cu635 #6 我一直以来更新最后一位小版本都是直接更,还未遇到兼容问题。
    Hardrain
        17
    Hardrain  
       2h 40m ago
    如果你们公司用的网络安全解决方案不能 source 到各个 downstream distros (或者至少你们使用的 distros )自己的 SA 所提及的 patched versions ,那它是个垃圾产品,应该被淘汰。
    RuralHunter
        18
    RuralHunter  
       2h 40m ago
    ubuntu 软件前面的版本号是上游的版本号,后面的版本是 ubuntu 定制的版本号。上游小版本未必不改,取决于软件的小版本改变的意义。ubuntu 的策略一般是如果小版本是有新功能升级或兼容性风险的,一般就不会跟着改,特别是比较核心的软件。一些无关轻重的软件,ubuntu 自己是懒得定制的,一般都会跟着上游版本改。
    realpg
        19
    realpg  
       1h 39m ago
    @xiliuya #5
    对于 ubuntu 我想说 你可以把 php-***指向 php8.1-***
    但是你对整个大版本都不再维护其他版本的 php 包就很离谱

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

    然后因为这个漏洞我运维平台集体下发,没办法用 ppa add 了一个最大的 php 源
    然后 apt remove php8.1-*时候 会自动装上 php8.4-的对应包
    然后我还得手动卸载了 php8.4 再手动安装 php8.5-*
    tcchen
        20
    tcchen  
    PRO
       1h 38m ago
    因为 apt 上有很多包都依赖 php 吧
    zuokanyunqishi
        21
    zuokanyunqishi  
       1h 27m ago
    直接给他弄个 poc 验证,不妥了...
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4600 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 82ms · UTC 09:15 · PVG 17:15 · LAX 02:15 · JFK 05:15
    ♥ Do have faith in what you're doing.