乐趣区

升级OpenSSH7.9

背景
企业信息安全管理日趋完善,部分软件项目须经过系统定级、备案,通过第三方等级保护测评,出具《信息安全等级保护测评报告》,才能符合验收条件。
就是一般所说的“入网安评”。
测评一定会发现漏洞和隐患,需要软件厂商或者企业运维团队针对已发现的问题清单逐一整改和加固。
一般来说,第三方安全厂商通过漏洞扫描和入侵探测,出具详细的问题清单,每条清单也会有相应的整改措施或者加固建议,然后,我们就照着清单,逐条解决。
都是些套路,本没啥惊喜——昨天却因为 OpenSSH 搞得一头汗。
清单上有一项:

危险等级:中危
漏洞名称:OpenSSH 用户枚举漏洞 (CVE-2018-15919)
详细描述:OpenSSH 7.8 及之前版本,auth-gss2.c 文件存在安全漏洞。远程攻击者可利用该漏洞检测其指定的用户是否存在。
解决办法:
厂商升级:新版本 OpenSSH-7.9 已经修复这个安全问题,请到厂商的主页下载。链接:http://www.openssh.com/ http://www.openssh.com/portable.html

目标服务器是 CentOS7.4,起初我以为万能的 RPM 包再加上 yum install –downloadonly –downloaddir=<directory> <package> 和 yum localinstall <package> 就能轻松搞定……但是……
最新的 RPM 是 7.4p1,不符合要求
[root@localhost ~]# cat /etc/centos-release
CentOS Linux release 7.4.1708 (Core)
[root@localhost ~]# yum info openssh
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.cqu.edu.cn
* updates: mirrors.aliyun.com
Available Packages
Name : openssh
Arch : x86_64
Version : 7.4p1
目标机器与互联网隔离,如果 RPM 包不可用,只能用源码编译,如果编译遇到文件缺失等问题,会比较繁琐。
多方寻找 7.9p1+CentOS7 的 RPM 资源,未果,只能编译了。
尝试源码编译
# 卸载 7.4
yum uninstall openssh
# 安装编译所需的 headers 和 libraries
yum install zlib-devel
yum install openssl-devel
yum install pam-devel
# 下载源码包
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-7.9p1.tar.gz
# 解压
tar zxvf openssh-7.9p1.tar.gz
# 切目录
cd openssh-7.9p1
# 配置
./configure –prefix=/usr –sysconfdir=/etc/ssh –with-pam
# 编译
make
# 安装
make install
# 拷贝 ssh-copy-id
install -v -m755 contrib/ssh-copy-id /usr/bin
# 拷贝帮助文件
install -v -m644 contrib/ssh-copy-id.1 /usr/share/man/man1
# 创建文档目录
install -v -m755 -d /usr/share/doc/openssh-7.9p1
# 拷贝文档
install -v -m644 INSTALL LICENCE OVERVIEW README* /usr/share/doc/openssh-7.9p1
# 允许 root 登录(7.9 改变了 PermitRootLogin 的默认值)
echo “PermitRootLogin yes” >> /etc/ssh/sshd_config
# 使用 PAM
echo “UserPAM yes” >> /etc/ssh/sshd_config
# 注册服务
cp -p contrib/redhat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd
# 加入 sshd 到 chkconfig 管理
chkconfig –add sshd
# 设置开机启动
chkconfig sshd on
# 检查启动项
chkconfig –list sshd
# 验证版本信息
ssh -V
# 重启 ssh 服务
service sshd restart
如果一切顺利,客户机能够通过 ssh 登录服务器。
可能遇到的错误和解决方法
在安装过程中我遇到过多个不同的错误,在总结这篇短文时,才发现那些都是弯路。

ssh 连接时出错:error Could not get shadow information for <user>

服务启动成功,用户密码也都对,就是无法建立连接,可能是 UsePAM 和 SELinux 的问题。
客户端登录时,即便输入了正确的密码,仍然提示:
[user@localhost~]# ssh user@192.168.171.128
user@192.168.171.128’s password:
Permission denied, please try again.
查看服务端日志 (/var/log/messages),发现:
error: Could not get shadow information for <user>
Failed password for <user> from <ip> port <port> ssh2
这可能是因为 UsePAM 没有启用,检查 /etc/ssh/sshd_config:
# 检查 UsePAM,确认是否启用了 PAM
# UseAPM no
UsePAM yes
修改配置后,重启 sshd 服务后,服务恢复。如果编译时缺了 –with-pam 参数,UsePAM yes 会让服务报错。
如果不想修改 PAM 选项,也可以关闭 Selinux:
# 临时关闭
setenforce 0

# 永久关闭
vi /etc/selinux/config
# 然后将 SELINUX=enforcing 修改为 SELINUX=disabled
UsePAM yes 时,无论启用或禁用 selinux,都不会引发 Could not get shadow information 错误。

sshd 启动报错:Bad SSH2 cipher spec ‘…’

可能是升级了 openssl 但 sshd_config 配置未更新,或者配置有错,造成不一致。
可以查询当前被支持的加密方法:
[user@localhost ~]# ssh -Q cipher
3des-cbc
aes128-cbc
aes192-cbc
aes256-cbc
rijndael-cbc@lysator.liu.se
aes128-ctr
aes192-ctr
aes256-ctr
aes128-gcm@openssh.com
aes256-gcm@openssh.com
chacha20-poly1305@openssh.com
也可以用 paste -s -d, 直接将查询结果串接并写入配置文件:
echo ‘Ciphers’ `ssh -Q cipher | paste -d, -s` >> /etc/ssh/sshd_config

sshd 启动报错:Bad SSH2 mac spec ‘…’

查询被支持的消息摘要算法:
[user@localhost ~]# ssh -Q mac
hmac-sha1
hmac-sha1-96
hmac-sha2-256
hmac-sha2-512
hmac-md5
hmac-md5-96
umac-64@openssh.com
umac-128@openssh.com
hmac-sha1-etm@openssh.com
hmac-sha1-96-etm@openssh.com
hmac-sha2-256-etm@openssh.com
hmac-sha2-512-etm@openssh.com
hmac-md5-etm@openssh.com
hmac-md5-96-etm@openssh.com
umac-64-etm@openssh.com
umac-128-etm@openssh.com
也可以用 paste -s -d, 直接将查询结果串接并写入配置文件:
echo ‘MACs’ `ssh -Q mac | paste -d, -s` >> /etc/ssh/sshd_config

sshd 启动报错:Bad SSH2 KexAlgorithms ‘…’

查询支持的算法:
[user@localhost ~]# ssh -Q kex
diffie-hellman-group1-sha1
diffie-hellman-group14-sha1
diffie-hellman-group14-sha256
diffie-hellman-group16-sha512
diffie-hellman-group18-sha512
diffie-hellman-group-exchange-sha1
diffie-hellman-group-exchange-sha256
ecdh-sha2-nistp256
ecdh-sha2-nistp384
ecdh-sha2-nistp521
curve25519-sha256
curve25519-sha256@libssh.org
也可以用 paste -s -d, 直接将查询结果串接并写入配置文件:
echo ‘KexAlgorithms’ `ssh -Q kex | paste -d, -s` >> /etc/ssh/sshd_config
技巧

遇到错误,服务端日志必须是首选检查点。
可借助 sshd - d 启用 debug 模式来排查问题。
可以用 ssh -vvv 以便更快找到问题。

参考
https://help.aliyun.com/knowl…

退出移动版