openssh合规编译安装需聚焦安全基线与漏洞修复,包括禁用sshv1/cbc/md5、启用fips和审计日志,并通过configure加固、补丁集成及sshd_config严格配置实现等保、密评要求。

OpenSSH 源码编译安装本身不难,但要满足等保、密评或行业安全合规要求(如关闭弱算法、禁用不安全协议版本、启用审计日志、打上已知漏洞补丁),需在编译前精细配置和补丁整合。关键不是“装上”,而是“装得合规”。
一、确认合规基线与漏洞修复目标
先明确你要满足的规范依据,例如:
– 等保2.0三级要求:禁用 SSHv1、禁用 CBC 模式密码套件、禁用 MD5/RSA-1024、启用 PermitRootLogin no、UsePAM yes;
– CVE 参考:至少覆盖 CVE-2023-51385(double-free)、CVE-2024-6387(regreSSHion)、CVE-2023-48795(Terrapin);
– 密码套件推荐:仅保留 chacha20-poly1305@openssh.com、aes256-gcm@openssh.com、aes128-gcm@openssh.com。
建议做法:
• 访问 OpenSSH 官方发布页,确认目标版本是否已合入对应 CVE 修复(如 OpenSSH 9.8p1 已修复 regreSSHion 和 Terrapin);
• 若必须使用旧版(如 8.9p1),需手动 cherry-pick 补丁,从 GitHub 提交历史中定位修复 commit 并应用。
二、源码准备与补丁集成
以 OpenSSH 9.8p1(2024年7月发布)为例:
- 下载源码:
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz - 解压并进入目录:
tar xzf openssh-9.8p1.tar.gz && cd openssh-9.8p1 - 若需额外补丁(如定制日志字段、FIPS 模式增强),将 .patch 文件放入目录,执行:
patch -p1 - 检查补丁是否成功:
git status或查看config.h中关键宏(如ENABLE_FIPS_MODE)是否生效
三、configure 安全加固编译选项
避免默认配置——OpenSSH 默认仍开启部分老旧特性。推荐 configure 命令如下:
./configure \ --prefix=/usr/local/openssh-9.8p1 \ --sysconfdir=/etc/ssh \ --with-pam \ --with-libedit \ --with-ssl-dir=/usr/lib64/openssl \ --without-openssl-header-check \ --disable-obsolete-binary-drivers \ --without-ssh1 \ --without-zlib-version-check \ --enable-hardening \ --enable-fips \ CFLAGS="-O2 -g -Wall -Wpointer-arith -Wuninitialized -DSSH_DISABLE_SSL3 -DSSH_NO_CBC"
说明:
• --without-ssh1 强制禁用 SSHv1 协议;
• --enable-hardening 启用栈保护、RELRO、PIE 等编译级防护;
• -DSSH_DISABLE_SSL3 -DSSH_NO_CBC 在预处理阶段禁用 SSLv3 握手逻辑和所有 CBC 模式加密;
• 若系统 OpenSSL 版本 ≥ 3.0 且已启用 FIPS provider,--enable-fips 可强制走 FIPS 验证路径(需提前配置 OpenSSL fips module)。
四、安装后强制合规配置(sshd_config)
编译安装只是第一步,真正合规靠运行时配置。替换或严格校验 /etc/ssh/sshd_config,以下为最小合规集:
Protocol 2 KexAlgorithms curve25519-sha256,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256 Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com HostKeyAlgorithms ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521 PubkeyAcceptedAlgorithms ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521 PermitRootLogin no PermitEmptyPasswords no PasswordAuthentication no ChallengeResponseAuthentication no UsePAM yes ClientAliveInterval 300 ClientAliveCountMax 2 LogLevel VERBOSE
验证方式:
• 重启服务:sudo /usr/local/openssh-9.8p1/sbin/sshd -t && sudo systemctl restart sshd(注意替换 systemd service 文件指向新二进制);
• 连接测试:ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa user@host 应失败;
• 扫描验证:ssh-audit.py host(第三方工具)输出应无 “WARN” 或 “FAIL” 类条目。
不复杂但容易忽略:补丁是否真生效、configure 选项是否被 silently ignored、sshd_config 是否被 systemd 或包管理器覆盖。每一步都建议留痕验证,而非仅看 configure 成功或 make 不报错。










