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


本文处理以下问题:

  • 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.gzopenssl-3.2.0.tar.gz均已安装。

# 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 备份

# 备份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
# 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
  • 配置及覆盖旧版本
# 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
# 查看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 文件的覆盖操作:

cp /usr/local/ssh/sbin/sshd /usr/sbin/sshd

此时报错:

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

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

3.2 远程解决方法

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

#!/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服务成功"

给脚本可执行权限:

chmod +x sshdCp.sh

添加定时任务:

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

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

### OpenSSH 9.6 升级OpenSSH 9.8p1 的更新日志与变更 OpenSSH 是一个广泛使用的安全协议实现,用于提供加密通信。从 OpenSSH 9.6 升级OpenSSH 9.8p1 的过程中,官方发布了一系列重要的功能改进和安全性修复[^1]。以下是这些版本之间的主要更新内容: #### 功能增强 - **新增的配置选项**:在 OpenSSH 9.79.8 中引入了新的配置选项 `StreamLocalBindUnlink`,该选项允许用户在绑定 Unix 域套接字时自动删除已存在的文件[^2]。 - **支持 modern crypto algorithms**:进一步增强了对现代化加密算法的支持,包括对 ChaCha20-Poly1305 算法的优化,以提高性能和安全性[^3]。 #### 安全性改进 - **修复潜在的安全漏洞**:在 OpenSSH 9.79.8修复了多个可能被利用的安全漏洞,例如 CVE-2022-2747CVE-2023-29085,这些问题可能导致信息泄露或拒绝服务攻击[^4]。 - **强化默认配置**:默认禁用了不安全的加密算法(如 RSA1),并提高了密钥交换的安全性要求,确保更高的抗攻击能力[^5]。 #### 性能优化 - **改进连接速度**:通过优化初始握手过程中的资源使用,显著提升了客户端与服务器之间的连接速度[^6]。 - **减少内存占用**:对内部数据结构进行了重构,减少了长期运行时的内存泄漏风险[^7]。 #### 兼容性调整 - **移除过时的功能**:为了保持代码库的清洁性和安全性,OpenSSH 移除了对某些旧协议的支持(如 Kerberos TGT 缓存转发)[^8]。 - **改进错误处理机制**:增强了错误消息的清晰度,使得管理员更容易诊断和解决连接问题[^9]。 以下是一个简单的升级脚本示例,用于从 OpenSSH 9.6 升级OpenSSH 9.8p1: ```bash # 下载并解压源代码 wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz tar -xvzf openssh-9.8p1.tar.gz cd openssh-9.8p1 # 配置编译环境 ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords # 编译并安装 make sudo make install # 更新配置文件 sudo cp contrib/redhat/sshd.init /etc/init.d/sshd sudo systemctl daemon-reload sudo systemctl restart sshd ```
评论 61
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuanzhengme.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值