目录

前言

1 升级前全面准备

1.1 环境检查

1.2 现有SSH/openssl配置备份

1.3 备用访问通道:Telnet安装

2 OpenSSL升级详解

2.1 OpenSSL概述

2.2 升级步骤

下载并解压源代码

安装编译依赖

配置并编译

验证安装

2.3 可能遇到的问题及解决方案

2.4 回退方案

3 OpenSSH升级全面指南

3.1 OpenSSH的重要性

3.2 升级详细操步骤

下载并解压OpenSSH

停止并卸载旧版

安装依赖

编译安装过程

复制启动脚本并添加系统服务

恢复配置文件

权限修复

启动服务并验证

3.3 回退方案

4 升级后清理

4.1 关闭Telnet服务

4.2 清理安装文件

4.3 验证系统完整性

5 总结

5.1 升级流程总结

5.2 关键注意事项

5.3 文档建议


前言

在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升级到最新版本,同时最大限度地降低系统中断风险。记住,在生产环境执行前,务必在测试环境充分验证整个流程。
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐