openEuler 20.0系统的 OpenSSH 8.2p1 漏洞完整修复总结(源码编译升级 9.8p1)

来源:本站原创 点击数: 发布时间:2026年08月18日

一、前置说明

原版本 OpenSSH_8.2p1 存在 CVE-2024-6387、CVE-2023-38408、CVE-2023-51767 等全部高危漏洞;升级至 9.8p1 可一次性修复所有 SSH 相关 CVE;无需重启整机,仅重启 sshd 服务。

二、阶段 1:编译环境准备(安装依赖 + 下载源码)

  1. 安装全套编译依赖

dnf install gcc gcc-c++ make zlib-devel openssl-devel pam-devel libfido2-devel -y
  1. 下载并解压 OpenSSH 9.8p1 源码

cd /usr/local/src
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz
tar -zxvf openssh-9.8p1.tar.gz
cd openssh-9.8p1
  1. 清理旧编译缓存

make clean
rm -f Makefile config.status config.log

三、阶段 2:正确 configure(必带 PAM、SELinux,修复 PAM 头报错)

./configure \
--sysconfdir=/etc/ssh \
--with-pam \
--with-selinux \
--with-ssl-dir=/usr \
--with-zlib \
--with-privsep-path=/var/empty

校验输出:PAM support: yesSELinux support: yes 无报错再编译。

四、阶段 3:编译 + 安装

make -j$(nproc)
make install

安装完成后会提示 sshd_config 存在 GSSAPI 参数不兼容,属于正常提示,后续统一处理。

五、阶段 4:替换系统 ssh/sshd 二进制(备份旧版本,留回滚方案)

# 备份原生8.2版本
mv /usr/bin/ssh /usr/bin/ssh.old82
mv /usr/sbin/sshd /usr/sbin/sshd.old82
# 软链接指向新编译9.8p1
ln -s /usr/local/bin/ssh /usr/bin/ssh
ln -s /usr/local/sbin/sshd /usr/sbin/sshd

六、阶段 5:修复 PAM 认证(解决密码登录失效核心问题)

  1. 覆盖欧拉原生兼容 PAM 配置(不要用红帽模板)

cat > /etc/pam.d/sshd <<EOF
#%PAM-1.0
auth       required     pam_sepermit.so
auth       include      password-auth
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
session    required     pam_selinux.so close
session    required     pam_loginuid.so
session    required     pam_selinux.so open env_params
session    optional     pam_keyinit.so force revoke
session    include      password-auth
EOF
  1. 权限分离目录赋权

mkdir -p /var/empty
chmod 700 /var/empty
chown root:root /var/empty
  1. 生成全新主机密钥

ssh-keygen -A

七、阶段 6:统一处理所有 GSSAPI 兼容报错(最容易踩坑)

1)sshd 服务端配置注释 GSSAPI(sshd -t 报错根源)

sed -i 's/^GSSAPI/#GSSAPI/' /etc/ssh/sshd_config

2)系统加密策略文件注释 GSSAPI(ssh 客户端连接报错根源,方案 1 温和修复)

sed -i '/gssapi/I s/^/#/' /etc/crypto-policies/back-ends/openssh*.config

3)客户端 ssh_config 注释大小写 GSSAPI(连接弹窗提示报错)

sed -i '/gssapi/I s/^/#/' /etc/ssh/ssh_config

八、阶段 7:sshd_config 安全加固(消除弱算法、版本泄露漏洞)

1. 删除重复冲突 Kex/Ciphers/MACs 行

2. 写入 9.8 兼容安全加密套件(移除废弃@libssh.org后缀)

Banner none
VersionAddendum none
Protocol 2
LogLevel VERBOSE
PubkeyAuthentication yes
IgnoreRhosts yes
HostbasedAuthentication no
PermitEmptyPasswords no
PermitUserEnvironment no
# 兼容OpenSSH9.8合法算法
KexAlgorithms curve25519-sha256,ecdh-sha2-nistp384,diffie-hellman-group-exchange-sha256
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com
MACs hmac-sha2-512,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha2-256-etm@openssh.com
HostKeyAlgorithms ssh-ed25519,ecdsa-sha2-nistp384,rsa-sha2-512
# 生产环境安全策略(密钥登录后启用)
PermitRootLogin no
PasswordAuthentication no
MaxAuthTries 3
LoginGraceTime 30
MaxSessions 5
AllowTcpForwarding no
AllowAgentForwarding no
PermitTunnel no
# 修正编译后sftp路径
Subsystem sftp /usr/local/libexec/sftp-server -l INFO -f AUTH

配置语法校验(无输出 = 正常)

sshd -t

九、阶段 8:注册服务、重启、验证连通

  1. 注册启动脚本

cp contrib/redhat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd
systemctl daemon-reload
  1. 重启 sshd 服务

systemctl restart sshd
systemctl enable sshd
  1. 验证版本(确认漏洞修复)

ssh -V
sshd -V
# 输出 OpenSSH_9.8p1 即所有SSH高危CVE修复完成
  1. 连通测试(保留当前 root 会话,新开窗口测试

# 本地自测
ssh root@127.0.0.1
# 远程跨机测试
ssh root@服务器IP
# 测试SFTP功能
sftp root@服务器IP

十、生产收尾加固(密钥登录正常后必改)

  1. 确认仅密钥可登录,修改 sshd_config 两条参数

PermitRootLogin no
PasswordAuthentication no
  1. 再次校验配置重启

sshd -t
systemctl restart sshd
  1. 防火墙限制 SSH 来源 IP(仅放行运维网段)

firewall-cmd --permanent --remove-service=ssh
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=运维网段 port port=22 protocol=tcp accept'
firewall-cmd --reload

十一、回滚方案(升级异常无法连接时救命)

rm -f /usr/bin/ssh /usr/sbin/sshd
mv /usr/bin/ssh.old82 /usr/bin/ssh
mv /usr/sbin/sshd.old82 /usr/sbin/sshd
systemctl restart sshd