OpenSSH【安装 03】远程代码执行漏洞CVE-2024-6387修复(OpenSSH_9.7p1升级到9.8p1及cp: 无法创建普通文件“/usr/sbin/sshd“:文本文件忙问题处理)_openssh-9.7p1 openssl 3.2.3 3 sep 2024 (library: o
远程代码执行漏洞CVE-2024-6387修复
- 1.环境说明
- 2.OpenSSH升级过程
-
- 2.1 备份
- 2.2 升级
- 3.\"/usr/sbin/sshd\":文本文件忙
-
- 3.1 原因分析
- 3.2 远程解决方法
本文处理以下问题:
- OpenSSH_9.7p1升级到OpenSSH_9.8p1
- cp: 无法创建普通文件\"/usr/sbin/sshd\":文本文件忙
链接:https://pan.baidu.com/s/1tUBYK4WzCiJBcCqQDOtQhw?pwd=8tfv
提取码:8tfv
(已添加本次升级所需文件 openssh-9.8p1.tar.gz
)也可以自行下载。
本文适用CentOS7.7 和 7.8
且 OpenSSH 版本已升级到 9.7p1
的情况,升级过程的可以参考《OpenSSH漏洞修复》,其他版本未测试。
1.环境说明
如按照《OpenSSH漏洞修复》已升级到 9.7p1
版本, 以下依赖和 zlib-1.3.1.tar.gz
、openssl-3.2.0.tar.gz
均已安装。
# 1.【已下载】的26个依赖文件perl-IPC-Cmd-0.80-4.el7.noarch.rpmpyparsing-1.5.6-9.el7.noarch.rpmgdbm-devel-1.10-8.el7.x86_64.rpmperl-Test-Harness-3.28-3.el7.noarch.rpmperl-ExtUtils-Manifest-1.61-244.el7.noarch.rpmperl-version-0.99.07-6.el7.x86_64.rpmperl-Perl-OSType-1.003-3.el7.noarch.rpmperl-Module-Load-Conditional-0.54-3.el7.noarch.rpmlibdb-devel-5.3.21-25.el7.x86_64.rpmperl-Module-Load-0.24-3.el7.noarch.rpmperl-ExtUtils-MakeMaker-6.68-3.el7.noarch.rpmperl-local-lib-1.008010-4.el7.noarch.rpmperl-Data-Dumper-2.145-3.el7.x86_64.rpmperl-Digest-1.17-245.el7.noarch.rpmperl-Module-Metadata-1.000018-2.el7.noarch.rpmperl-Digest-SHA-5.85-4.el7.x86_64.rpmperl-Locale-Maketext-1.23-3.el7.noarch.rpmperl-Params-Check-0.38-2.el7.noarch.rpmperl-ExtUtils-ParseXS-3.18-3.el7.noarch.rpmsystemtap-sdt-devel-4.0-13.el7.x86_64.rpmperl-devel-5.16.3-299.el7_9.x86_64.rpmperl-ExtUtils-CBuilder-0.28.2.6-299.el7_9.noarch.rpmperl-Locale-Maketext-Simple-0.21-299.el7_9.noarch.rpmperl-ExtUtils-Install-1.58-299.el7_9.noarch.rpmperl-Module-CoreList-2.76.02-299.el7_9.noarch.rpmperl-CPAN-1.9800-299.el7_9.noarch.rpm# 2.安装rpm -ivh --force *.rpm
2.OpenSSH升级过程
升级前请多打开几个SSH
连接,并输入 top
使其保持连接状态,然后进行以下操作。
2.1 备份
# 备份ssh文件cp -r /etc/ssh /etc/ssh.oldcp -p /usr/bin/ssh /usr/bin/ssh.bakcp -p /usr/sbin/sshd /usr/sbin/sshd.bakcp -p /usr/bin/ssh-keygen /usr/bin/ssh-keygen.bak
2.2 升级
- 直接下载或官网下载后上传
openssh-9.8p1.tar.gz
:
# 1.解压tar -zxvf openssh-9.8p1.tar.gzcd openssh-9.8p1# 2.编译安装【3分钟左右】./configure --prefix=/usr/local/ssh --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/sslmake -j 4 && make install
- 配置及覆盖旧版本
# 1.ssh允许root登录 需要密码进行验证echo \'PermitRootLogin yes\' >> /usr/local/ssh/etc/sshd_configecho \'PubkeyAuthentication yes\' >> /usr/local/ssh/etc/sshd_configecho \'PasswordAuthentication yes\' >> /usr/local/ssh/etc/sshd_config# 2.停止sshd服务systemctl stop sshd# 3.将编译安装的新配置文件拷贝到原路径下cp /usr/local/ssh/bin/ssh /usr/bin/sshcp /usr/local/ssh/sbin/sshd /usr/sbin/sshdcp /usr/local/ssh/bin/ssh-keygen /usr/bin/ssh-keygencp /usr/local/ssh/etc/sshd_config /etc/ssh/sshd_configcp /usr/local/ssh/etc/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub # 4.拷贝启动脚本cp -p ./contrib/redhat/sshd.init /etc/init.d/sshd# 5.给sshd添加可执行权限chmod +x /etc/init.d/sshd# 6.设置开机自启systemctl enable sshd# 7.重新启动sshd服务systemctl restart sshd# 8.查看sshd服务状态systemctl status sshd# 9.查看ssh版本是否升级成功,可以查看到已经是9.8p1版本了ssh -VOpenSSH_9.8p1, OpenSSL 3.2.0 23 Nov 2023
ssh -V
查询的是客户端的版本,漏洞实际上是 Server 端的,所以需要验证 sshd 版本 【如果 sshd 文件没有覆盖成功 以下输出会依然是OpenSSH_9.7p1, OpenSSL 3.2.0 23 Nov 2023
】
# 查看sshd版本【sshd并没有查询版本的参数 错误参数也可以输出sshd的版本信息】sshd -v# 输出信息unknown option -- vOpenSSH_9.8p1, OpenSSL 3.2.0 23 Nov 2023
3.“/usr/sbin/sshd”:文本文件忙
3.1 原因分析
在停止 sshd 服务后,进行 sshd 文件的覆盖操作:
cp /usr/local/ssh/sbin/sshd /usr/sbin/sshd
此时报错:
cp:是否覆盖\"/usr/sbin/sshd\"? ycp:无法创建普通文件\"/usr/sbin/sshd\":文本文件忙
虽然用 systemctl stop sshd
停止了 sshd 服务,但是 sshd 服务还有进程在运行中,导致其无法覆盖,此时如果我们是远程到服务器进行的升级操作,如果 kill 掉所有 sshd 服务,当前的所有连接都会断开,如果在机房用 KVM
进行操作则没有关系。
3.2 远程解决方法
以下是远程停止所有 sshd 进程并覆盖 sshd 文件再重启 sshd 服务的方法,编写执行脚本 sshdCp.sh
:
#!/bin/bashecho \"(1/4): 停止sshd服务...\"sudo systemctl stop sshdsleep 5echo \"(1/4): 停止sshd服务完毕\"echo \"(2/4): 杀掉全部SSHD进程...\"sudo killall sshdsleep 5echo \"(2/4): 杀掉全部SSHD进程完毕\"echo \"(3/4): 复制sshd文件...\"cp /usr/local/ssh/sbin/sshd /usr/sbin/sshdsleep 2echo \"(3/4): 复制sshd文件完毕\"echo \"(4/4): 启动SSHD服务...\"sudo systemctl start sshdecho \"(4/4): 启动SSHD服务成功\"
给脚本可执行权限:
chmod +x sshdCp.sh
添加定时任务:
crontab -e# 添加以下内容【12号的18点05分执行】也就是让其执行一次05 18 12 * * sh pathTo/sshdCp.sh >> pathTo/sshdCp.log
覆盖成功后删除定时任务即可。