跳到主要内容
CentOS 7.x 系统 OpenSSH 与 OpenSSL 安全升级操作指南 | 极客日志
Shell / Bash
CentOS 7.x 系统 OpenSSH 与 OpenSSL 安全升级操作指南 综述由AI生成 CentOS 7.x 环境下通过编译源码方式将 OpenSSH 和 OpenSSL 升级至最新安全版本的操作流程。内容涵盖漏洞背景分析、系统备份、依赖安装、源码下载编译配置、服务替换验证及回滚方案。特别强调了使用 Telnet 作为临时应急通道以确保 SSH 升级失败后仍可恢复系统,并包含清理临时账号与端口的收尾步骤。
开源信徒 发布于 2025/11/26 更新于 2026/5/11 14 浏览CentOS 7.x 升级 OpenSSH 与 OpenSSL 安全版本
背景
OpenSSH(OpenBSD Secure Shell)是用于安全远程访问的连接工具。它是 SSH 协议的开源实现,通过加密所有传输数据,有效防止窃听、连接劫持及其他网络攻击。
相关安全漏洞
以下是需要通过升级 OpenSSH 和 OpenSSL 修复的已知安全漏洞:
CVE-2023-28531:影响 OpenSSH 9.3p2 及更早版本,源于 ssh-agent 的 PKCS11 功能存在安全缺陷,攻击者可利用此漏洞执行远程代码。
CVE-2023-38408:同上,涉及 ssh-agent 的 PKCS11 功能,存在远程代码执行风险。
CVE-2023-48795:影响 OpenSSH 10.0 及更早版本,DisableForwarding 指令未正确禁用 X11 和代理转发,可能导致未授权访问。
CVE-2023-51385:同上,涉及转发功能的配置缺陷。
CVE-2025-26465 和 CVE-2025-32728:影响 OpenSSH 10.0 及更早版本,具体细节待披露,但建议尽早升级以确保安全。
修复方法
本文旨在修复上述漏洞,将 CentOS 7.x 系统的 OpenSSH 升级至最新稳定版,并将 OpenSSL 升级至 3.5.4。这些版本包含针对上述漏洞的修复补丁,可显著提升系统安全性。
一、前置准备
1. 确认系统版本
cat /etc/redhat-release
openssl version
2. 以 root 身份操作
sudo -i
3. 备份关键数据
BACKUP_TIME=$(date +%Y%m%d%H%M%S)
mkdir -p /root/backup_$BACKUP_TIME
cp -r /usr/bin/openssl /root/backup_$BACKUP_TIME /
cp -r /usr/include/openssl /root/backup_$BACKUP_TIME /
cp -rp /etc/ssh /root/backup_$BACKUP_TIME /
cp -rp /usr/local/openssh /root/backup_$BACKUP_TIME /
cp -rp /usr/local/openssl /root/backup_$BACKUP_TIME /
cp /usr/sbin/sshd /root/backup_ /sshd.old
/usr/bin/ssh /root/backup_ /ssh.old
$BACKUP_TIME
cp
$BACKUP_TIME
4. 更换阿里云 yum 源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
yum clean all
yum makecache
安装 Telnet(应急通道)
注意 :以下操作确认 Telnet 能登录后再继续!确保在 SSH 升级失败时仍可恢复系统。
yum install -y epel-release
yum install -y telnet telnet-server xinetd
配置 xinetd 中的 telnet 服务 cat > /etc/xinetd.d/telnet <<'EOF'
service telnet {
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
}
EOF
启动服务 systemctl enable xinetd
systemctl restart xinetd
开放防火墙 if systemctl is-active --quiet firewalld; then
firewall-cmd --permanent --add-port=23/tcp
firewall-cmd --reload
fi
创建临时用户 useradd -m -s /bin/bash opi
echo 'opi:!QAZ@WSX' | chpasswd
配置 sudo
echo "opi ALL=(ALL:ALL) ALL" > /etc/sudoers.d/opi-perms
chmod 0440 /etc/sudoers.d/opi-perms
升级 OpenSSL
安装编译依赖 yum install -y gcc gcc-c++ make perl perl-devel perl-IPC-Cmd perl-Data-Dumper perl-Time-Piece perl-CPAN zlib-devel perl-Test-Simple
下载源码包 cd /tmp
sudo wget https://github.com/openssl/openssl/releases/download/openssl-3.5.4/openssl-3.5.4.tar.gz
tar -zxvf openssl-3.5.4.tar.gz
cd openssl-3.5.4
编译配置 ./Configure --prefix=/usr/local/openssl shared zlib
编译
安装 make test && make install
创建系统链接
mv /usr/bin/openssl /usr/bin/openssl.bak_$(date +%Y%m%d) 2>/dev/null || true
ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -sf /usr/local/openssl/include/openssl /usr/include/openssl
echo "/usr/local/openssl/lib64" > /etc/ld.so.conf.d/openssl.conf
ldconfig
验证 OpenSSL 版本
升级 OpenSSH
停止 SSH 服务 注意 :此步骤请在保证 Telnet 可登录情况下执行(重要)
systemctl stop sshd
pkill sshd
卸载旧版 OpenSSH rpm -qa | grep openssh
yum remove -y openssh openssh-server openssh-clients
rpm -e --nodeps $(rpm -qa | grep openssh) 2>/dev/null || true
安装编译依赖 yum install -y pcre-devel pam-devel zlib-devel
下载 OpenSSH cd /tmp
mkdir ssh_install && cd ssh_install
sudo wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-10.2p1.tar.gz
tar -zxf openssh-10.2p1.tar.gz
cd openssh-10.2p1
清理旧版目录 rm -rf /usr/local/openssh/
配置编译
./configure \
--prefix=/usr/local/openssh \
--with-ssl-dir=/usr/local/openssl \
--with-zlib \
--with-pam \
--sysconfdir=/etc/ssh
# 出现以下内容表示正常
PAM is enabled. You may need to install a PAM control file for sshd, otherwise password authentication may fail.
Example PAM control files can be found in the contrib/ subdirectory
编译安装 make -j$(nproc )
make install
配置新 SSH 服务
复制二进制文件 cp /usr/local/openssh/sbin/sshd /usr/sbin/sshd
cp /usr/local/openssh/bin/ssh /usr/bin/ssh
cp /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen
还原配置文件 cp /root/backup_*/ssh/sshd_config /etc/ssh/sshd_config
启动 SSH 服务 systemctl daemon-reload
systemctl start sshd
systemctl enable sshd
验证版本
验证升级结果 echo "=== OpenSSL 版本 ==="
openssl version
echo "=== OpenSSH 版本 ==="
ssh -V
echo "=== 服务状态 ==="
systemctl is-active sshd
echo "=== 监听端口 ==="
ss -ltn | grep ':22'
清理与收尾
清理软件包 rm -rf /tmp/openssl-3.5.4 /tmp/ssh_install
卸载 Telnet 服务
systemctl stop xinetd
systemctl disable xinetd
yum remove -y telnet-server xinetd telnet
rm -f /etc/xinetd.d/telnet
关闭防火墙 23 端口 if systemctl is-active --quiet firewalld; then
firewall-cmd --permanent --remove-port=23/tcp
firewall-cmd --reload
echo "防火墙已关闭 23 端口"
else
echo "firewalld 未运行,跳过防火墙配置"
fi
清理临时账号
userdel -r opi
rm -f /etc/sudoers.d/opi-perms
检查 echo "=== 检查是否还有 telnet 相关进程 ==="
ps aux | grep -E "(telnet|xinetd)" | grep -v grep || echo "无残留进程"
echo "=== 检查软件包是否卸载 ==="
rpm -q telnet-server xinetd telnet || echo "已全部卸载"
echo "=== 检查用户是否删除 ==="
id opi && echo "用户仍存在!" || echo "用户已删除"
echo "=== 检查 23 端口是否关闭 ==="
ss -ltn | grep ':23' || echo "23 端口已关闭"
echo "=== 检查防火墙规则 ==="
firewall-cmd --list-ports | grep 23 || echo "防火墙无 23 端口规则"
回滚
mv /usr/bin/openssl.bak_* /usr/bin/openssl
ldconfig
cp /root/backup_*/sshd.old /usr/sbin/sshd
cp /root/backup_*/ssh.old /usr/bin/ssh
cp -r /root/backup_*/etc/ssh /etc/ssh
systemctl start sshd
常见问题
缺失 Perl 模块 Can't locate Test/More.pm in @INC (@INC contains: /tmp/openssl-3.5.4/util/perl ...)
这个问题是由于系统缺失 Perl 模块 Test::More(属于 Test-Simple 套件),该模块是 OpenSSL 测试套件必需的依赖项。
yum install -y perl-Test-Simple
apt-get install -y libtest-simple-perl
OpenSSL 头文件版本不匹配 在编译 Openssh 时出现 configure: error: OpenSSL version test program failed.
OpenSSL 头文件(opensslv.h)中的版本号与实际的库文件版本(libssl.so)不一致,导致配置脚本检测失败。
./configure \
--prefix=/usr/local/openssh \
--with-ssl-dir=/usr/local/openssl \
--with-zlib \
--with-pam \
--sysconfdir=/etc/ssh
grep OPENSSL_VERSION_TEXT /usr/local/openssl/include/openssl/opensslv.h
openssl version
mv /usr/local/openssl/ /tmp/openssl.bak
cd openssl-3.5.4/
./Configure --prefix=/usr/local/openssl shared zlib
make -j$(nproc )
make install
./configure \
--prefix=/usr/local/openssh \
--with-ssl-dir=/usr/local/openssl \
--with-zlib \
--with-pam \
--sysconfdir=/etc/ssh
make -j$(nproc )
make install
相关免费在线工具 Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
Markdown转HTML 将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
HTML转Markdown 将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
JSON 压缩 通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
JSON美化和格式化 将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online