我们有一台运行 16.04 的 Ubuntu 服务器,用于客户网站。客户最近进行了安全审核,其中一条建议是将我们的 OpenSSH 版本至少更新到 7.4 版,但 16.04 预装了 7.2 版。我尝试直接更新,但 7.2 是最新版本,所以我们现在尝试手动安装 7.6 版。
我已经下载并安装了 7.6,并且它似乎运行良好:
sshd
OpenSSH_7.6p1, OpenSSL 1.0.2g 1 Mar 2016
但是,当远程连接或者只是运行时,ssh -v localhost
它使用旧的 7.2 进行连接:
root@server-new:~# ssh -v localhost
...
debug1: Local version string SSH-2.0-OpenSSH_7.6
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.2p2
Ubuntu-4ubuntu2.2
debug1: match: OpenSSH_7.2p2 Ubuntu-4ubuntu2.2 pat OpenSSH* compat 0x04000000
...
这基本上是我经历过的过程,除了 7.6 包: https://gist.github.com/techgaun/df66d37379df37838482c4c3470bc48e
我注意到安装目录现在不同了,以前是,/usr/sbin/ssh
但现在是/usr/local/sbin/ssh
root@server-new:~# which sshd
/usr/local/sbin/sshd
root@server-new:~# which ssh
/usr/local/bin/ssh
我确实更新了 /etc/init.d/ssh 和 /etc/init/ssh.conf 以使用新路径,但即使重新启动后似乎也没有太大区别。
我们做错了什么?我假设我们只需要指定在启动时使用 SSH 安装,但我不知道该怎么做。
我发现了很多其他的线索,但似乎没有什么帮助,例如
https://serverfault.com/questions/310384/problem-with-upgrading-openssh-to-the-latest-version
https://forums.cpanel.net/threads/whats-it-take-to-update-to-openssh-5-1-or-higher.170818/
谢谢
答案1
这是经典的“我想要 LTS 但是我不想要 LTS”逻辑陷阱。
Ubuntu LTS 的一个目的是为您提供稳定.Ubuntu 通过以下方式实现此目的不是增加软件版本。当您决定使用 LTS 时,您将自己锁定在这些版本中没有变化两年。
(如果这不是您想要的,那么就不要使用 LTS。)
但有一个小例外:安全更新。Ubuntu 安全团队发布安全更新没有升级到下一个上游版本(这当然会违反 LTS)。相反,他们会修补源代码。
因此,当发现 OpenSSH 7.2 中的漏洞时,会发生两件事:
OpenSSH 网站宣布每个人都应立即升级到新的 OpenSSH 7.3
但是,Ubuntu 安全团队向您推送了 OpenSSH 7.2p2-4ubuntu2.2。
从安全角度来看,它们是相同的 -全部两者中都修复了相同的漏洞。只是你的安全审计员没有意识到这一点。
您有三个选择:
坚持使用 LTS:您可以意识到审核员只是被误导了,对 Ubuntu 安全团队做了一些研究,但最终什么也没做……因为实际上不需要采取任何额外的安全措施。
关注审计员:您可以从 LTS 跳转到 Ubuntu 的正常 6 个月发布版本。如果发布升级改变了您的工作流程或生产系统,那么这可能意味着每六个月需要做大量额外工作。
建立一个Frankensystem:这是两全其美的,风险更大,维护起来也更困难。您可以尝试从 PPA 安装较新版本的 OpenSSH 或将较新版本的 Ubuntu 安装到较旧的 LTS 上。可能会破坏您的系统,也可能不会。可能会破坏未来的升级和安全更新,也可能不会。