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

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

  •  
  •   shenzhenhk · 1 day ago · 4123 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 大部分人用的都是虚拟环境,与系统自带关系不大。
    26 replies  •  2026-10-24 10:38:14 +08:00
    rodericliu
        1
    rodericliu  
       1 day ago
    现在 php 都用容器,用 remi 的源自己 build image ,ubuntu 自带的版本太老
    hefish
        2
    hefish  
       1 day ago
    人家 alpine 就不锁,所以 ubuntu 也不应该锁。。。
    hefish
        3
    hefish  
       1 day ago
    对了,不能不让他们看到 php 的版本好哒。。。
    Muniesa
        4
    Muniesa  
       1 day ago
    LTS 就是这样的吧,在整个支持周期内更新的版本不会引入和删除接口和功能,只做漏洞修复,确保兼容性,php 应该是小版本间也有功能差异? Python 这边最后一位版本号是只做漏洞修复的所以可以直接用。
    xiliuya
        5
    xiliuya  
       1 day ago
    锁定版本号可以避免大版本的更新导致的不兼容,这也是为什么很多项目只指定某个版本,这是为了稳定和安全考虑的
    Cu635
        6
    Cu635  
       1 day 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  
       1 day ago via Android
    国内监管啥也不懂 还喜欢瞎管 这才是最恶根源
    villivateur
        8
    villivateur  
       1 day ago
    因为 Ubuntu 这类 Linux 发行版的哲学就是,选择一个固定的内核、一个固定的 init 、一堆固定的应用,然后打包出一个稳定的发行版版本。这样能确保可靠性。
    也就是说,一个程序能在你的 Ubuntu24.04 上跑,那也一定能在我的 Ubuntu24.04 上跑。
    要及时更新主版本号的话,建议选择那些滚动更新的发行版,比如 manjaro 。
    newmlp
        9
    newmlp  
       1 day ago
    不然怎么体现 Linux 的稳定呢
    liaohongxing
        10
    liaohongxing  
       1 day ago
    Ubuntu 是在版本不变的情况下,手动在源码级别合并了漏洞补丁再编译的。

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

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

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

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

    当然,新版本的 bug 也可能一并被 port 过来,point release 是采取 freeze 后 + upstream 新版本发布后只 backport 安全更新(而不 backport 功能更新)的模式,类似于 Firefox ESR 的模式。
    SoulFlame
        16
    SoulFlame  
       1 day ago
    @Muniesa #4
    @Cu635 #6 我一直以来更新最后一位小版本都是直接更,还未遇到兼容问题。
    Hardrain
        17
    Hardrain  
       1 day ago   ❤️ 1
    如果你们公司用的网络安全解决方案不能 source 到各个 downstream distros (或者至少你们使用的 distros )自己的 SA 所提及的 patched versions ,那它是个垃圾产品,应该被淘汰。
    RuralHunter
        18
    RuralHunter  
       1 day ago
    ubuntu 软件前面的版本号是上游的版本号,后面的版本是 ubuntu 定制的版本号。上游小版本未必不改,取决于软件的小版本改变的意义。ubuntu 的策略一般是如果小版本是有新功能升级或兼容性风险的,一般就不会跟着改,特别是比较核心的软件。一些无关轻重的软件,ubuntu 自己是懒得定制的,一般都会跟着上游版本改。
    realpg
        19
    realpg  
       1 day 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
       1 day ago
    因为 apt 上有很多包都依赖 php 吧
    zuokanyunqishi
        21
    zuokanyunqishi  
       1 day ago
    直接给他弄个 poc 验证,不妥了...
    iceheart
        22
    iceheart  
       1 day ago via Android
    我丢给 ai 它给加了个 apt 源就更新到 8.3.36 了
    ntedshen
        23
    ntedshen  
       1 day ago
    expose_php = Off
    msg7086
        24
    msg7086  
       22h 52m ago   ❤️ 1
    Debian
    https://packages.debian.org/trixie/php8.4-fpm
    php8.4-fpm ( 8.4.27-1~deb13u1 )

    Red Hat
    https://download.rockylinux.org/pub/rocky/10/AppStream/x86_64/os/Packages/p/
    php8.4-fpm-8.4.27-1.el10_2.x86_64.rpm

    其实只有 Ubuntu 冻结了 Patch number ,别家 Linux 都是只锁 Minor 。
    anxn
        25
    anxn  
       21h 1m ago via Android
    Debian 系的是只有 Ubuntu 会锁吗?
    kaneg
        26
    kaneg  
       19h 3m ago via iPhone
    用 docker 呀,想用什么版本就用什么版本
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1286 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 83ms · UTC 21:42 · PVG 05:42 · LAX 14:42 · JFK 17:42
    ♥ Do have faith in what you're doing.