运维必藏!OpenSSH高危漏洞修复终极方案:从7.4直升10.0的完整操作实录
本文将介绍从从7.4版本直接跨越至10.0版本,版本跨度较大,升级过程中可能会出现不可预见的问题。因此,强烈建议在执行升级操作之前,务必做好系统相关数据和配置的全面备份工作,以确保在升级失败或出现异常情况时,能够迅速恢复系统至正常状态。由于该版本相对陈旧,在每次进行漏洞扫描时,都会检测出诸多安全漏洞,这无疑给系统的安全运行带来了潜在风险。它是系统管理员管理服务器的首要工具,也是潜在攻击者的主要目标
·
目录
前言

在CentOS 7.9系统中,其默认搭载的OpenSSH版本为7.4。由于该版本相对陈旧,在每次进行漏洞扫描时,都会检测出诸多安全漏洞,这无疑给系统的安全运行带来了潜在风险。根据当前已知的漏洞信息,OpenSSH 9.7版本之前的所有版本均存在不同程度的安全隐患。为了有效消除这些安全风险,保障系统的稳定与安全,我们需要对OpenSSH版本进行升级操作。本文将介绍从从7.4版本直接跨越至10.0版本,版本跨度较大,升级过程中可能会出现不可预见的问题。因此,强烈建议在执行升级操作之前,务必做好系统相关数据和配置的全面备份工作,以确保在升级失败或出现异常情况时,能够迅速恢复系统至正常状态。
1 升级前全面准备
1.1 环境检查
- 确认当前系统版本:cat /etc/redhat-release
[root@node1 ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@node1 ~]#
- 确认当前OpenSSH版本:ssh -V
[root@node1 ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
[root@node1 ~]#
- 确认当前OpenSSL版本:openssl version
[root@node1 ~]# openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017
[root@node1 ~]#
- 检查磁盘空间:df -h (确保/opt至少有1GB可用空间)
1.2 现有SSH/openssl配置备份
- 数据备份是升级过程中最关键的安全网,我们需要备份所有与SSH和SSL相关的配置文件、二进制文件和库文件

- 备份现有SSH配置
mkdir -p /backup/ssh
mkdir -p /backup/ssh/pam.d
mkdir -p /backup/ssh/sbin
mkdir -p /backup/ssh/sysconfig
cp -rp /etc/ssh /backup/ssh/
cp -rp /etc/sysconfig/sshd /backup/ssh/sysconfig/
cp -rp /etc/pam.d/sshd /backup/ssh/pam.d/
cp -rp /usr/sbin/sshd /backup/ssh/sbin
- 备份现有OpenSSL相关文件
mkdir -p /backup/ssl/bin
mkdir -p /backup/ssl/include
mkdir -p /backup/ssl/lib64
cp -rp /usr/bin/openssl /backup/ssl/bin/
cp -rp /usr/include/openssl /backup/ssl/include/
cp -rp /usr/lib64/libssl* /backup/ssl/lib64/
cp -rp /usr/lib64/libcrypto* /backup/ssl/lib64/
1.3 备用访问通道:Telnet安装
重要提示:在升级SSH服务前,必须建立替代的远程访问方式,以防升级失败导致系统无法访问
- Telnet服务配置步骤:
# 安装telnet服务
yum -y install telnet-server xinetd
# 配置telnet服务
cat > /etc/xinetd.d/telnet <<EOF
service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
disable = no
}
EOF
# 启动服务
systemctl start xinetd
systemctl enable xinetd
# 防火墙配置:放开23端口,确保其他主机可以通过telnet连接
firewall-cmd --permanent --add-port=23/tcp
firewall-cmd --reload
# 临时允许root通过telnet登录
mv /etc/securetty /etc/securetty.bak
# 临时关闭SELinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
安全警告:Telnet是不安全的明文协议,仅在升级过程中临时使用,升级完成后必须立即禁用
2 OpenSSL升级详解
2.1 OpenSSL概述
OpenSSL是一个强大的开源加密工具包,提供SSL/TLS协议实现以及各种加密算法。它被广泛应用于安全通信、证书管理等领域,保持OpenSSL更新可以防范已知漏洞,如著名的Heartbleed漏洞。
2.2 升级步骤

-
下载并解压源代码
# 上传安装包到opt目录并解压
cd /opt
tar -xzvf openssl-1.1.1g.tar.gz
-
安装编译依赖
# 使用yum安装依赖包
yum -y install gcc make perl
-
配置并编译
# 进入openssl-1.1.1g执行编译与安装
cd openssl-1.1.1g
./config --prefix=/usr --openssldir=/usr/shared
make && make install
-
验证安装
openssl version
2.3 可能遇到的问题及解决方案
问题1:版本未更新
- 原因:旧版本文件未被覆盖或路径不正确
- 解决:手动指定路径或检查config参数
问题2:依赖缺失
- 症状:编译过程中报错
- 解决:根据错误信息安装相应开发包
2.4 回退方案
- 如果升级后出现问题,可按以下步骤回退
# 卸载新版本
cd /opt/openssl-1.1.1g
make uninstall
# 恢复备份
cp -rp /backup/ssl/openssl /usr/bin/
cp -rp /backup/ssl/openssl /usr/include/
cp -rp /backup/ssl/libssl* /usr/lib64/
cp -rp /backup/ssl/libcrypto* /usr/lib64/
# 更新动态链接
ldconfig
3 OpenSSH升级全面指南
3.1 OpenSSH的重要性
OpenSSH是SSH协议的开源实现,提供加密的远程登录、文件传输等功能。它是系统管理员管理服务器的首要工具,也是潜在攻击者的主要目标,保持OpenSSH更新可以防范多种安全威胁。
3.2 升级详细操步骤
-
下载并解压OpenSSH
# 上传安装包到opt目录并解压
cd /opt
tar -zxvf openssh-10.0p1.tar.gz
-
停止并卸载旧版
# 停止sshd并卸载旧版本
systemctl stop sshd
yum -y remove openssh openssh-server openssh-clients
-
安装依赖
# 使用yum安装依赖包
yum -y install pam pam-devel zlib zlib-devel
-
编译安装过程
# 进入openssh-10.0p1目录并执行编译与安装
cd openssh-10.0p1
./configure --with-zlib --with-ssl-dir=/usr --with-pam \
--bindir=/usr/bin --sbindir=/usr/sbin \
--sysconfdir=/etc/ssh
make && make install
配置选项解释:
- --with-ssl-dir:指定OpenSSL安装路径
- --with-pam:启用PAM认证支持
- --sysconfdir:指定配置文件目录
-
复制启动脚本并添加系统服务
# 复制启动脚本
cp contrib/redhat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd
# 添加系统服务
chkconfig --add sshd
chkconfig sshd on
-
恢复配置文件
#恢复配置文件:这里我直接使用之前备份的配置文件sshd_config
cp /etc/ssh/sshd_config /etc/ssh/sshd_config_$(date +"%Y%m%d")
cp /backup/ssh/ssh/sshd_config /etc/ssh/sshd_config
cp -rp /backup/ssh/pam.d/sshd /etc/pam.d/
-
权限修复
chmod 600 /etc/ssh/ssh_host_*_key
chmod 644 /etc/ssh/ssh_host_*_key.pub
-
启动服务并验证
# 启动
systemctl start sshd
systemctl status sshd
# 验证版本
ssh -V
3.3 回退方案
# 卸载新版本
cd /opt/openssh-10.0p1
make uninstall
# 恢复旧版本
yum -y install openssh openssh-server openssh-clients
# 恢复备份
cp -rp /backup/ssh/ssh /etc/
cp -rp /backup/ssh/sysconfig/sshd /etc/sysconfig/
cp -rp /backup/ssh/pam.d/sshd /etc/pam.d/
cp -rp /backup/ssh/sbin/sshd /usr/sbin/
# 启动服务
systemctl start sshd
systemctl status sshd
4 升级后清理
4.1 关闭Telnet服务
# 停止telent
systemctl stop xinetd
systemctl disable xinetd
# 卸载telnet
yum remove telnet-server xinetd
# 防火墙关闭23端口
firewall-cmd --permanent --remove-port=23/tcp
firewall-cmd --reload
# 恢复securetty
mv /etc/securetty.bak /etc/securetty
4.2 清理安装文件
rm -rf /opt/openssl-1.1.1g*
rm -rf /opt/openssh-9.0p1*
4.3 验证系统完整性
# 检查服务状态
systemctl status sshd
# 测试SSH连接
ssh root@localhost
# 检查日志是否有错误
journalctl -u sshd -n 50
5 总结
5.1 升级流程总结

5.2 关键注意事项
- 会话保持:始终维护至少两个活动会话(如SSH+Telnet)
- 分阶段验证:每个关键步骤后立即验证功能
- 回退准备:确保备份完整且可恢复
- 安全权衡:平衡升级需求与系统稳定性
5.3 文档建议
完善的文档应包括:
- 升级前后的版本信息
- 所有配置变更记录
- 遇到的错误及解决方案
- 验证测试结果
通过遵循本文的详细指南,您可以安全地将OpenSSH和OpenSSL升级到最新版本,同时最大限度地降低系统中断风险。记住,在生产环境执行前,务必在测试环境充分验证整个流程。
更多推荐
所有评论(0)