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 小时前
初探 Flask
后端·python·flask·html
星栈独行6 小时前
我在 Rust 全栈项目里用 JWT 做无状态认证
开发语言·后端·rust·前端框架·开源·github·web
Java爱好狂.6 小时前
Java程序员体系化学习路线(2026最新版)
java·后端·java面试·java架构师·java程序员·java八股文·java学习路线
陈随易7 小时前
Redis 8.8发布,一定要更新
前端·后端·程序员
装不满的克莱因瓶7 小时前
SpringBoot 如何将 lib 目录中jar包打包进最终的jar包里面
spring boot·后端·maven·jar·mvn
ltl8 小时前
Transformer 原论文实验结果:为什么 28.4 BLEU 足以改写路线图
后端
excel8 小时前
为什么我推荐使用 Termius:现代 SSH 工具的完整体验
前端·后端
卷毛的技术笔记9 小时前
Java后端硬核实战:用Spring AI Alibaba+Redis给LLM装上“超强记忆中枢”
java·人工智能·redis·后端·spring·ai·系统架构
IT_陈寒10 小时前
Java的Optional差点让我掉坑里,这几个坑你别踩
前端·人工智能·后端
子兮曰10 小时前
Harness 驾驭工程深度教程:从 AGENTS.md 到全链路 AI 编码基础设施
前端·后端·ai编程