OpenSSH【安装 03】远程代码执行漏洞CVE-2024-6387修复(cp: 无法创建普通文件“/usr/sbin/sshd“:文本文件忙问题处理)

本文处理以下问题:

  • OpenSSH_9.7p1升级到OpenSSH_9.8p1
  • cp: 无法创建普通文件"/usr/sbin/sshd":文本文件忙

链接:pan.baidu.com/s/1tUBYK4Wz... 提取码:8tfv

(已添加本次升级所需文件 openssh-9.8p1.tar.gz)也可以自行下载。

本文适用CentOS7.7 和 7.8且 OpenSSH 版本已升级到 9.7p1的情况,升级过程的可以参考《OpenSSH漏洞修复》,其他版本未测试。

1.环境说明

如按照《OpenSSH漏洞修复》已升级到 9.7p1版本, 以下依赖和 zlib-1.3.1.tar.gzopenssl-3.2.0.tar.gz均已安装。

bash 复制代码
# 1.【已下载】的26个依赖文件
perl-IPC-Cmd-0.80-4.el7.noarch.rpm
pyparsing-1.5.6-9.el7.noarch.rpm
gdbm-devel-1.10-8.el7.x86_64.rpm
perl-Test-Harness-3.28-3.el7.noarch.rpm
perl-ExtUtils-Manifest-1.61-244.el7.noarch.rpm
perl-version-0.99.07-6.el7.x86_64.rpm
perl-Perl-OSType-1.003-3.el7.noarch.rpm
perl-Module-Load-Conditional-0.54-3.el7.noarch.rpm
libdb-devel-5.3.21-25.el7.x86_64.rpm
perl-Module-Load-0.24-3.el7.noarch.rpm
perl-ExtUtils-MakeMaker-6.68-3.el7.noarch.rpm
perl-local-lib-1.008010-4.el7.noarch.rpm
perl-Data-Dumper-2.145-3.el7.x86_64.rpm
perl-Digest-1.17-245.el7.noarch.rpm
perl-Module-Metadata-1.000018-2.el7.noarch.rpm
perl-Digest-SHA-5.85-4.el7.x86_64.rpm
perl-Locale-Maketext-1.23-3.el7.noarch.rpm
perl-Params-Check-0.38-2.el7.noarch.rpm
perl-ExtUtils-ParseXS-3.18-3.el7.noarch.rpm
systemtap-sdt-devel-4.0-13.el7.x86_64.rpm
perl-devel-5.16.3-299.el7_9.x86_64.rpm
perl-ExtUtils-CBuilder-0.28.2.6-299.el7_9.noarch.rpm
perl-Locale-Maketext-Simple-0.21-299.el7_9.noarch.rpm
perl-ExtUtils-Install-1.58-299.el7_9.noarch.rpm
perl-Module-CoreList-2.76.02-299.el7_9.noarch.rpm
perl-CPAN-1.9800-299.el7_9.noarch.rpm

# 2.安装
rpm -ivh --force *.rpm

2.OpenSSH升级过程

升级前请多打开几个SSH连接,并输入 top使其保持连接状态,然后进行以下操作。

2.1 备份

bash 复制代码
# 备份ssh文件
cp -r /etc/ssh /etc/ssh.old
cp -p /usr/bin/ssh /usr/bin/ssh.bak
cp -p /usr/sbin/sshd /usr/sbin/sshd.bak
cp -p /usr/bin/ssh-keygen /usr/bin/ssh-keygen.bak

2.2 升级

  • 直接下载或官网下载后上传openssh-9.8p1.tar.gz
bash 复制代码
# 1.解压
tar -zxvf openssh-9.8p1.tar.gz
cd openssh-9.8p1

# 2.编译安装【3分钟左右】
./configure --prefix=/usr/local/ssh --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/ssl
make -j 4 && make install
  • 配置及覆盖旧版本
bash 复制代码
# 1.ssh允许root登录 需要密码进行验证
echo 'PermitRootLogin yes' >> /usr/local/ssh/etc/sshd_config
echo 'PubkeyAuthentication yes' >> /usr/local/ssh/etc/sshd_config
echo 'PasswordAuthentication yes' >> /usr/local/ssh/etc/sshd_config

# 2.停止sshd服务
systemctl stop sshd

# 3.将编译安装的新配置文件拷贝到原路径下
cp /usr/local/ssh/bin/ssh /usr/bin/ssh
cp /usr/local/ssh/sbin/sshd /usr/sbin/sshd
cp /usr/local/ssh/bin/ssh-keygen /usr/bin/ssh-keygen
cp /usr/local/ssh/etc/sshd_config /etc/ssh/sshd_config
cp /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 -V
OpenSSH_9.8p1, OpenSSL 3.2.0 23 Nov 2023
  • ssh -V查询的是客户端的版本,漏洞实际上是 Server 端的,所以需要验证 sshd 版本 【如果 sshd 文件没有覆盖成功 以下输出会依然是 OpenSSH_9.7p1, OpenSSL 3.2.0 23 Nov 2023
bash 复制代码
# 查看sshd版本【sshd并没有查询版本的参数 错误参数也可以输出sshd的版本信息】
sshd -v
# 输出信息
unknown option -- v
OpenSSH_9.8p1, OpenSSL 3.2.0 23 Nov 2023

3."/usr/sbin/sshd":文本文件忙

3.1 原因分析

在停止 sshd 服务后,进行 sshd 文件的覆盖操作:

bash 复制代码
cp /usr/local/ssh/sbin/sshd /usr/sbin/sshd

此时报错:

bash 复制代码
cp:是否覆盖"/usr/sbin/sshd"? y
cp:无法创建普通文件"/usr/sbin/sshd":文本文件忙

虽然用 systemctl stop sshd停止了 sshd 服务,但是 sshd 服务还有进程在运行中,导致其无法覆盖,此时如果我们是远程到服务器进行的升级操作,如果 kill 掉所有 sshd 服务,当前的所有连接都会断开,如果在机房用 KVM进行操作则没有关系。

3.2 远程解决方法

以下是远程停止所有 sshd 进程并覆盖 sshd 文件再重启 sshd 服务的方法,编写执行脚本 sshdCp.sh

bash 复制代码
#!/bin/bash
echo "(1/4): 停止sshd服务..."
sudo systemctl stop sshd
sleep 5
echo "(1/4): 停止sshd服务完毕"

echo "(2/4): 杀掉全部SSHD进程..."
sudo killall sshd
sleep 5
echo "(2/4): 杀掉全部SSHD进程完毕"

echo "(3/4): 复制sshd文件..."
cp /usr/local/ssh/sbin/sshd /usr/sbin/sshd
sleep 2
echo "(3/4): 复制sshd文件完毕"

echo "(4/4): 启动SSHD服务..."
sudo systemctl start sshd
echo "(4/4): 启动SSHD服务成功"

给脚本可执行权限:

bash 复制代码
chmod +x sshdCp.sh

添加定时任务:

bash 复制代码
crontab -e
# 添加以下内容【12号的18点05分执行】也就是让其执行一次
05 18 12 * * sh pathTo/sshdCp.sh >> pathTo/sshdCp.log

覆盖成功后删除定时任务即可。

4.小小的总结

本文介绍了在CentOS 7.7/7.8系统中将OpenSSH从9.7p1升级到9.8p1以修复CVE-2024-6387漏洞的过程。主要内容包括:

  • 1)环境准备,确认依赖包已安装;
  • 2)详细的升级步骤,包含备份、编译安装、配置文件更新等操作;
  • 3)针对"文本文件忙"错误的解决方案,通过编写脚本停止sshd进程完成文件替换。

文中提供了完整的操作命令和脚本示例,并特别强调了在远程升级时保持连接的重要性。升级后需验证sshd版本确保漏洞修复成功。

相关推荐
寻月隐君6 分钟前
Rust 实战:从零构建一个多线程 Web 服务器
后端·rust·github
Livingbody1 小时前
FastMCP In Action之 Server详解
后端
GetcharZp2 小时前
C++ Boost 从入门到精通:让你的代码飞起来
c++·后端
北'辰2 小时前
DeepSeek智能考试系统智能体
前端·后端·架构·开源·github·deepseek
hrrrrb2 小时前
【Spring Boot 快速入门】八、登录认证(二)统一拦截
hive·spring boot·后端
用户89535603282204 小时前
Gin 框架核心架构解析
后端·go
我是哪吒4 小时前
分布式微服务系统架构第164集:架构懂了就来了解数据库存储扩展千亿读写
后端·面试·github
UrbanJazzerati4 小时前
PowerShell 自动化实战:自动化为 Git Staged 内容添加 Issue 注释标记
后端·面试·shell
橙序员小站4 小时前
通过trae开发你的第一个Chrome扩展插件
前端·javascript·后端