OpenSSH 高危漏洞和升级教程

OpenSSH 高危漏洞和升级教程

July 02, 2024
#分享 ,

在 TG 上看到 OpenSSH 出现高危远程代码执行漏洞 - 影响超过 1400 万台暴露在公网上的服务器 一文,遂用 ssh -v 检查了一下自己的 SSH 版本,似乎在受影响范围,遂打算赶紧升级一下。

已知受影响的版本有:

  • 低于 4.4p1 版 (不含此版本):受影响
  • 高于 4.4p1 但低于 8.5p1 (不含此版本):不受影响
  • 8.5p1 及后续版本到 9.8p1 (不含此版本):受影响

问了一下 GPT,给的方案是 sudo apt update ,但是不管用,后找了一篇教程 ssh 爆漏洞了,手动更新 OpenSSH 教程,整理了一下相关资讯,教程和注意事项如下。

💡
提示
升级后你的 sshd_config 设置会被覆盖,再重启服务器前请重新设置配置文件。
Ubuntu 的软件源更新了 https://ubuntu.com/security/notices/USN-6859-1
Debian 11 12 已经修复了 https://security-tracker.debian.org/tracker/CVE-2024-6387

尽量使用包管理更新 openssh
make install 安装会导致后续无法使用包管理更新
我按手动方式操作完后出现了问题,后重新使用 apt-get 安装解决
sudo apt-get purge openssh-server
sudo apt-get install openssh-server

自动升级

如果你是 Debian12 的话可以使用 apt 包管理工具一键升级

  1. 更新包列表:sudo apt update
  2. 升级 OpenSSH: sudo apt upgrade openssh-server
  3. 检查版本: ssh -V
  4. 重启服务: sudo systemctl restart ssh

手动编译安装

查看版本

ssh -v
sudo apt update
sudo apt upgrade

更新安装必须的包

sudo apt-get  -y update
sudo apt-get install build-essential zlib1g-dev libssl-dev

下载最新的包:

wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz

解压:

tar -xzf openssh-9.8p1.tar.gz
cd openssh-9.8p1

编译:

./configure
make

安装

sudo make install

重启服务 & 查看版本

sudo systemctl restart ssh
ssh -V

如果版本没显示 openssh-9.8p1,就是需要添加环境变量:

echo 'export PATH=/usr/local/bin:/usr/local/sbin:$PATH' >> ~/.bashrc

验证生效

source ~/.bashrc

查看版本(出现 openssh-9.8p1 就 OK)

ssh -V

修改 ssh.service 文件中的 ExecStartPre、ExecStart 和 ExecReload 行,
将 /usr/sbin/sshd 改为 /usr/local/sbin/sshd

sudo sed -i 's|ExecStartPre=/usr/sbin/sshd|ExecStartPre=/usr/local/sbin/sshd|; s|ExecStart=/usr/sbin/sshd|ExecStart=/usr/local/sbin/sshd|; s|ExecReload=/usr/sbin/sshd|ExecReload=/usr/local/sbin/sshd|' /lib/systemd/system/ssh.service

确认修改内容

grep -E 'ExecStartPre|ExecStart|ExecReload' /lib/systemd/system/ssh.service

注意:以上操作 ssh 的配置文件就变成了 /usr/local/etc/sshd_config,需要更新配置文件内容,把新配置文件删掉,创建链接到 /etc/ssh/sshd_config ,并加载服务

sudo rm /usr/local/etc/sshd_config  
sudo ln -s /etc/ssh/sshd_config /usr/local/etc/sshd_config  
sudo systemctl daemon-reload  
sudo systemctl restart sshd

列出正在运行的 SSH 进程(确认是否是 /usr/local/sbin/sshd)

ps -ef | grep sshd
「 还好我们还有文字... 」

加入评论