如何在不升级操作系统的情况下升级单个损坏的软件包 (Ubuntu)

如何在不升级操作系统的情况下升级单个损坏的软件包 (Ubuntu)

我有一台 Ubuntu 16.04 服务器,其中一个 cron 有一个重大漏洞,该漏洞在 16.04 中被列为“无法修复”,但在 Ubuntu 20.04 中已修复。我想下载补丁,但是当我使用sudo apt upgrade cron它时,它告诉我它是最新版本(这可能是有道理的,因为它是该操作系统的最新版本)。这是生产服务器,当前没有完全升级操作系统的范围。

有什么办法可以在不破坏整个服务器的情况下升级它吗?

答案1

如果您的版本没有提供您感兴趣的更新,您的“最佳”选择通常是下载源码包(具体来说,.dsc和相关文件),并在本地重建包。 (看这个答案有关详细说明如何重建包的简短示例。)

然而这确实带来了许多风险,其中两个主要是:

  • 由于您当前使用的版本而对软件包所做的其他更改可能会影响其功能,例如当前版本可能会采用与其目标版本类似的工作环境,而不是您实际使用的环境;
  • 如果需要的话,您将不再收到该软件包的自动更新 - 实际上您正在承担为该软件包提供支持的负担。

在这个特殊的例子中,CVE-2017-9525,该漏洞的范围有限,详见注释:

我相信实际上剥削该错误需要更新 cron 包。只要 cron 没有更新,易受攻击的代码就不会运行。因此,如果我们在 cron 中发现第二个错误,那么我们确实应该同时修复竞争条件,但只要我们不推送 cron 更新,易受攻击的代码就不会运行。该补丁只是缩小了竞争条件的时间窗口。

仅当运行软件包安装后脚本时,该漏洞才会出现问题,在大多数情况下,只有在升级软件包时才会发生这种情况。 (它可以使用 手动强制执行,dpkg-reconfigure但这不会自动发生。)因此,对您来说最安全的选择似乎是不理会该软件包。

相关内容