Centos Stream 9远程更新OpenSSH 9.9p1
Centos Stream 9如何在远程情况下更新openssh 9.9p1的详细步骤,适配systemd。
最近我的VPS服务商给群发了邮件,发现了在几十个实例上的主机遭到了入侵。经分析为“攻击主要受2024年7月爆出的OpenSSH高危漏洞(CVE-2024-6387)以及与‘某国产面板’有关。”,同时也提示仅靠update是无法修复OpenSSH漏洞的,我看了一下软件仓中的OpenSSH版本是8.7,也了解到patch代码已经提交过(不知有没有最终整合到Stream源中),为了保险起见,决定自己手动更新OpenSSH。
鉴于Openssh已经默认安装过,所以更新的思路是只替换/usr/bin/ssh等一系列文件和/usr/sbin/sshd文件,其他保持默认。不过由于官方的源并没有适配systemd初始化框架,因此需要做适当修改。
准备工作:安装gcc、make等编译工具以及其他一些依赖工具。Centos Stream 9应该已经自动安装了zlib-devel、openssl-devel等库。当然也可以一把梭哈将需要的编译工具全部装了。
dnf groupinstall "Development Tools"
同时,手动安装以下依赖:
dnf install systemd-devel // 用于支持systemd服务
dnf install krb5-devel // 用于configure的--with-kerberos5
dnf install selinux-devel // 用于configure的--with-selinux
dnf install pam-devel // 用于configure的--with-pam
第一步:下载并解压最新的OpenSSH源代码
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.9p1.tar.gz
tar zxvf openssh-9.9p1.tar.gz
第二步:生成Makefile
cd openssh-9.9p1
./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-pam --with-ssl-dir=/usr/local/openssl --with-zlib=/usr/local/zlib --with-selinux --with-kerberos5
这个过程如何有报错,请检查准备工作中的库是否安装成功。需要注意的是,即使不安装krb5-devel,configure的过程也不会报错,最后的kerberos也会显示yes,但往上翻看具体的输出信息会有warning,提示编译可能会出错,这点要注意。
第三步:修改代码适配systemd
Centos Stream 9已经完全使用systemd代替了init.d,因此需要对代码做修改,否则在执行systemctl来控制sshd服务的时候会报错。此处的修改参考了这篇博文,感谢原作者。
1.修改sshd.c文件:
在文件头引入systemd头文件(需安装systemd-devel包):
#include <limits.h>
#include <systemd/sd-daemon.h> // 新增systemd头文件
#ifdef WITH_OPENSSL
在如下这处新增一行代码:
sd_notify(0, "READY=1"); // 新增systemd适配代码
/* Accept a connection and return in a forked child */
server_accept_loop(&sock_in, &sock_out,
&newsock, config_s);
2.修改Makefile(注意:如果再次运行了configure则需要重新修改,或直接修改configure引入这个库):在LIBS处引入system库
LIBS= -lselinux -lsystemd
第四步:编译生成Openssh:
make
make install
默认安装在/usr/local/openssh下。这一步openssh的install脚本还对sshd相关的文件进行了校验,如果出现warning可以忽略(如“Deprecated option RSAAuthentication”等,一般是已经被废弃的配置项,可修改信息提示的文件,不管也不影响使用),如果出现错误则按照提示操作。我在某一台机器上出现了/usr/share/crypto-policies/DEFAULT/opensshserver.txt文件中的GSSAPIKexAlgorithms不认识的情况,如果不使用该算法可去掉后再install一遍。
第五步:替换本机openssh文件(此步可先备份原有的ssh相关文件)
特别提示:操作这一步时不要重启或断开主机远程连接,不要systemctl restart sshd服务。如果有需要可使用telnet、vnc提前配好第二种远程连接方式,防止不当操作导致ssh连接不上。
这一步可执行如下命令:
cp /usr/local/openssh/bin/s* /usr/bin/
cp /usr/local/openssh/sbin/sshd /usr/sbin/
如果提示“Text file busy”,可进入对应的目录手动将这些文件改名备份再拷贝新的文件过来,或者使用install命令安装。
第六步:生成新的key:
如果在第四步make install时出现了提示主机key文件权限不正确的情况,可使用这一步生成新的key,命令如下:
cd /etc/ssh/
mkdir backup
mv *host* backup
ssh-keygen -A
第七步:重启sshd服务
systemctl restart sshd
systemctl status sshd
第二行是查看sshd的状态是否是running,如果不是按照日志查找启动失败原因。
第八步:验证服务是否正常
重新remote主机看是否能够正常连接,一切验证通过后,reboot后运行其他连接测试。

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)