记一次OpenSSL和OpenSSH升级(CentOS7)
前言
公司的一次安全扫描提醒某台服务器的OpenSSH版本过低,想着自己的服务器也很久没升级了,打算一起升级掉。
升级公司服务器的过程很顺利,一样的流程到升级自己服务器时候居然失败了…虽然最终还是升级好了,但是还是打算梳理一下步骤和问题(还能写个shell啥的)
开启Telnet
防止升级挂了用不了ssh,对自己操作和人品自信的朋友可以跳过这一步
(Telnet端口修改过的话改一下防火墙那句)
1 | firewall-cmd --add-port=23/tcp --permanent |
安装所需库
1 | yum install gcc zlib-devel pam-devel libselinux-devel -y |
升级OpenSSL
下载OpenSSL源码
1 | cd /usr/loal |
备份旧版本OpenSSL
先用which openssl
查找一下旧版本的openssl的路径,然后备份旧版本的OpenSSL
这个这是我服务器的情况 按实际情况备份
1 | mv /usr/bin/openssl /usr/bin/openssl_backup |
编译OpenSSL
1 | # pwd: /usr/local |
如果说编译openssl时候添加了--prefix=/usr/local/openssl
的话,最后两步就很关键,要将编译完后的路径加入到动态库的配置文件中,不然可能会有如下两种情况:
提示找不到
libssl.so.1.1
和libcrypto.so.1.1
,这种情况往往是之前没有自己编译过,用的自带的openssl;或者openssl版本很低(1.1之前的)的时候出现使用
openssl version
查看版本时,会出现OpenSSL 1.1.1k 25 Mar 2021(Library: OpenSSL 1.1.1b)
(忘记截图了..)这种情况,提示的lib版本还是旧openssl的版本,后续编译openssh时也会有提示openssl的header和library不一致的问题。我就是这种情况,研究了会儿发现库用的还是/usr/lib64/
路径下的库,其中libssl.so.1.1
和libcrypto.so.1.1
都是旧版本的(忘了之前openssl咋装的了…)
执行openssl version
后,如果提示OpenSSL 1.1.1k 25 Mar 2021
说明安装成功
升级OpenSSH
下载OpenSSH源码
1 | cd /usr/local |
备份及删除旧ssh
1 | cp -r /etc/ssh/ /tmp/ |
这一步做完之后sshd服务就挂了,如果这时候断电断网死机闪退,又没有开telnet的话…嗯…
编译OpenSSH
1 | cd openssh-8.6p1 |
配置sshd
把旧sshd配置复制过来,设置好服务和开机自启后重启sshd服务
1 | cat /tmp/ssh/sshd_config |grep -v '#' |grep -v '^$' > /etc/ssh/sshd_config |
输入ssh -V
查看版本,提示OpenSSH_8.6p1, OpenSSL 1.1.1k 25 Mar 2021
,升级成功
关闭Telnet
安全考虑,关闭Telnet
1 | systemctl disable xinetd |