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:编译环境准备(安装依赖 + 下载源码)
安装全套编译依赖
dnf install gcc gcc-c++ make zlib-devel openssl-devel pam-devel libfido2-devel -y
下载并解压 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
清理旧编译缓存
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: yes、SELinux 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 认证(解决密码登录失效核心问题)
覆盖欧拉原生兼容 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
权限分离目录赋权
mkdir -p /var/empty chmod 700 /var/empty chown root:root /var/empty
生成全新主机密钥
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:注册服务、重启、验证连通
注册启动脚本
cp contrib/redhat/sshd.init /etc/init.d/sshd chmod +x /etc/init.d/sshd systemctl daemon-reload
重启 sshd 服务
systemctl restart sshd systemctl enable sshd
验证版本(确认漏洞修复)
ssh -V sshd -V # 输出 OpenSSH_9.8p1 即所有SSH高危CVE修复完成
连通测试(保留当前 root 会话,新开窗口测试)
# 本地自测 ssh root@127.0.0.1 # 远程跨机测试 ssh root@服务器IP # 测试SFTP功能 sftp root@服务器IP
十、生产收尾加固(密钥登录正常后必改)
确认仅密钥可登录,修改 sshd_config 两条参数
PermitRootLogin no PasswordAuthentication no
再次校验配置重启
sshd -t systemctl restart sshd
防火墙限制 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
