作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注我,我尽量把自己会的都分享给大家,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
OpenSSH严重的CVE-2024-6387漏洞,并没有影响到CentOS7。本文档只是基于CentOS7升级OpenSSH及OpenSSL,可作为修复其他漏洞OpenSSH漏洞使用以及作为其他系统的参考。
OpenSSH的漏洞挺多的,更新的版本也挺多的,我记得我都修过好几次,但是并不是每个漏洞都需要升级,这个具体可以根据自己的实际情况来判断。本次的重大漏洞介绍可参考https://nvd.nist.gov/vuln/detail/CVE-2024-6387。
临时方案:可以在配置文件 /etc/ssh/sshd_config
中将 LoginGraceTime
设置为 0(永不超时)。这样虽然会使 sshd 暴露于拒绝服务攻击(占满所有 Startups 连接),但可以避免远程代码执行风险。配置完成需要重启sshd服务:systemctl restart sshd.service
虽然CentOS7已经从2024年6月30日开始没有任何官方支持,但是毕竟作为中国市面上使用最广泛的的Linux服务器,所以他将在未来一定时间范围内存在,所以借助于这次的OpenSSH的漏洞出一版修复OpenSSH及OpenSSL的文档。
由于OpenSSH依赖OpenSSL,所以在比较大的版本升级情况下,升级OpenSSH就必须升级OpenSSL。
本文就是先升级OpenSSL,再升级OpenSSH,本文以最小化安装CentOS7.9系统为测试环境。
OpenSSL版本是1.1.1w
OpenSSH版本是9.8p1
1.先检查当前版本
[root@localhost ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
2.检查OpenSSL的依赖
[root@localhost ~]# rpm -ql openssl
/etc/pki/CA
/etc/pki/CA/certs
/etc/pki/CA/private
/etc/pki/tls/certs/Makefile
/etc/pki/tls/misc/c_name
/usr/bin/openssl
/usr/share/doc/openssl-1.0.2k
/usr/share/licenses/openssl-1.0.2k
/usr/share/licenses/openssl-1.0.2k/LICENSE
/usr/share/man/man1/asn1parse.1ssl.gz
#实际只有一个二进制包需要备份,中途显示省略部分
mv /usr/bin/openssl /usr/bin/openssl-bak
3.下载符合要求的OpenSSL
https://www.openssl.org/source/old/1.1.1/index.html
4.安装基础包
yum -y install gcc zlib-devel pam-devel
5.编译安装OpenSSL
tar xvf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
./config --prefix=/usr/local/openssl
make
make install
#阿里云的centos7.9不连接库文件也可以读取到旧版本
echo "/usr/local/openssl/lib/" >> /etc/ld.so.conf
ldconfig
6.检查OpenSSL版本
[root@localhost]# /usr/local/openssl/bin/openssl version
OpenSSL 1.1.1w 11 Sep 2023
#阿里云不需要使用新的库文件,系统会自带库文件,会出现下面的提示。
[root@localhost]# /usr/local/openssl/bin/openssl version
OpenSSL 1.1.1w 11 Sep 2023 (Library: OpenSSL 1.1.1k FIPS 25 Mar 2021)
7.让系统识别到新的OpenSSL
#如果要降低影响,openssl只给openssh使用,则下面这个步骤不用操作。
mv /usr/bin/openssl-bak /usr/bin/openssl
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
到这里OpenSSL已经更新完成,但是OpenSSH对应的包是编译好的二进制文件,所以这个时候查询OpenSSH对应的包还是旧版本的OpenSSL。
[root@localhost]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
8.下载OpenSSH
#从这个页面进入任意一个地址下载即可。
https://www.openssh.com/portable.html
9.检查依赖
#openssh在服务器里面一共是3个包,可以参考刚才的openssl检查依赖的方式
openssh-clients-7.4p1-21.el7.x86_64
openssh-7.4p1-21.el7.x86_64
openssh-server-7.4p1-21.el7.x86_64
10.备份配置
mv /usr/sbin/sshd /usr/sbin/sshd-bak
mv /usr/bin/scp /usr/bin/scp-bak
mv /usr/bin/sftp /usr/bin/sftp-bak
mv /usr/bin/ssh /usr/bin/ssh-bak
mv /usr/bin/ssh-add /usr/bin/ssh-add-bak
mv /usr/bin/ssh-agent /usr/bin/ssh-agent-bak
mv /usr/bin/ssh-keygen /usr/bin/ssh-keygen-bak
mv /usr/bin/ssh-keyscan /usr/bin/ssh-keyscan-bak
cp -rf /etc/ssh /etc/ssh-bak
11.编译安装OpenSSH
./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-ssl-dir=/usr/local/openssl
make
make install
12.编译完成
需要根据提示修复里面存在的问题
1.注释/etc/ssh/sshd_config文件 79、80、96行
2.取消/etc/ssh/sshd_config文件 取消注释 PermitRootLogin yes //如果不取消注释,则不能ssh连接
3.修改/etc/ssh/ssh_host*权限为600
4.配置二进制文件
ln -s /usr/local/openssh/sbin/sshd /usr/sbin/sshd
ln -s /usr/local/openssh/bin/scp /usr/bin/scp
ln -s /usr/local/openssh/bin/sftp /usr/bin/sftp
ln -s /usr/local/openssh/bin/ssh /usr/bin/ssh
ln -s /usr/local/openssh/bin/ssh-add /usr/bin/ssh-add
ln -s /usr/local/openssh/bin/ssh-agent /usr/bin/ssh-agent
ln -s /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen
ln -s /usr/local/openssh/bin/ssh-keyscan /usr/bin/ssh-keyscan
5.注释/etc/ssh/ssh_config文件 GSSAPIAuthentication yes //不注释也可以连接,有提示
12.重启sshd服务
systemctl restart sshd
13.验证ssh服务端及客户端
14.检查软件版本
[root@localhost ~]# ssh -V
OpenSSH_9.8p1, OpenSSL 1.1.1w 11 Sep 2023
总结
1.PermitRootLogin yes 的注释,这个如果不修改则无法SSH连,这个是最容易出问题的地方,因为新的版本必须取消注释。
2.生产环境需要慎重,如果担心引发SSH连接丢失可以启用Xinetd,留下一个后门可通过telnet到服务器里面(可自己研究下什么Xinetd)。
3.可以先在测试环境验证,再到生产环境修改。
4.做重大操作备份是要好习惯。
5.在编译安装的时候,最好通过命令:echo $? 确认上一条命令是执行成功的。