近期,接到安全加固任务,要对目标主机漏洞--OpenSSH用户枚举漏洞(CVE-2018-15919)进行修复。经查找相关资料,该漏洞影响OpenSSH 7.8及之前版本,于是决定将openssh升级到最新版本。
OpenSSH官网显示,最新版本为7.9。
为保证OpenSSH升级不影响系统稳定运行,故先在本地搭建测试环境如下:
操作系统:centOS 7.3
OpenSSH:6.6.1p1
OpenSSL:1.0.1e
有消息称, OpenSSH7.9不支持OpenSSH1.1.x以上,本人有点调皮,不信这个邪,决定仍将Openssl升级至1.1.1。
话不多说,接下来为各位简述升级过程。
一. 先升级OpenSSL至最新版本1.1.1b
1、安装OpenSSL升级所需的包:gccgcc-c++ zlib zlib-devel
使用yum直接安装:yum install gcc gcc-c++ zlibzlib-devel -y
竟然报错:
万能的度娘提示:yum的意义在于能很自动化的安装软件,这样的安装自然也有限制,也就是同时只能安装yum方式安装一个软件,所以yum也只能有一个进程。额……这个情况可能会是自动更新的时候安装软件导致冲突,可以取消自动更新或者重新启动,或者使用kill -9 36603(36603 为上图中yum报错信息里面的进程号)解决。
2、下载OpenSSL最新安装包:openssl-1.1.1b.tar.gz。目前最新版本的OpenSSL下载地址为:http://www.openssl.org/source/openssl-1.1.1b.tar.gz(也可直接使用wget下载,前提是服务器可直接访问到互联网)。
3、将下载的文件上传至服务器并解压:tar -zxvf openssl-1.1.1b.tar.gz
此处也可以使用-C命令将文件解压到制定目录(如解压到/usr/local/目录下):tar zxvfopenssl-1.1.1b.tar.gz -C /usr/local/
4、进入解压后的文件openssl-1.1.1b:cd openssl-1.1.1b/
5、开始安装:设定Openssl 安装,( --prefix )参数为欲安装的目录,也就是安装后的档案会出现在该目录下。
执行命令: ./config--prefix=/usr/local/openssl
出现以下信息表示ok,可继续下一步:
6、开始编译:make&&makeinstall
7、将新编译的openssllibrary 加入系统动态库链接中
echo /usr/local/openssl/lib >> /etc/ld.so.conf
ldconfig -v
8、备份和移除旧的openssl
mv /usr/bin/openssl /tmp/openssl_old
rm -rf /usr/include/openssl
9、对新openssl建立软连接
ln -s /usr/local/openssl/bin/openssl/ /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl/ /usr/include/openssl
ldd /usr/local/openssl/bin/openssl
10、查看版本:opensslversion -a
二. 升级OpenSSH至最新版本
1、在升级OpenSSH之前,需要为服务器开启telnet功能,防止服务器升级OpenSSH过程中断开连接。具体方法如下所示:
在安装Telnet前先检查系统是否安装了telnet-server和xinetd
rpm -qa telnet-server
rpm -qa xinetd
发现服务器并没有安装telnet-server和xinetd,安装之前先查找Telnet的安装包
yum list | grep telnet-server
yum list | grep xinetd
执行安装,安装过程没有截图,正常情况执行以下命令后会安装成功,如不确定是否安装成功可以执行上面的命令再确认一下
yum -y install telnet-server.x86_64
yum -y install telnet.x86_64
yum -y install xinetd.x86_64
通常情况下,能显示上述图片中信息即表示安装成功。
systemctl enable xinetd.service
systemctl enable telnet.socket
systemctl start telnet.socket
systemctl start xinetd
查看状态: systemctl status firewalld
关闭: systemctl stop firewalld
开机禁用 :systemctl disable firewalld
注:telnet默认不允许使用root登录。
顺便提下:systemd是Linux下的一款系统和服务管理器,兼容SysV和LSB的启动脚本,systemd 相关的绝大多数任务都是通过 systemctl 命令管理的,融合之前service和chkconfig的功能于一体。同时,在centos7.3默认使用的是firewall作为防火墙,并非iptables。
2、安装OpenSSH依赖包:yum install pam pam-devel -y
3、备份sshd文件:mv /etc/ssh /etc/ssh_bak
4、卸载旧的openssh
rpm -qa openssh
rpm -e openssh-6.6.1p1-31.el7.x86_64 --nodeps
5、上传最新版本OpenSSH,解压,编译安装
解压:tar -zxfopenssh-7.9p1.tar.gz
cd openssh-7.9p1/
编译:./configure--prefix=/usr --sysconfdir=/etc/ssh --with-ssl-dir=/usr/local/openssl--without-zlib-version-check --with-md5-passwords --with-pam
安装:make && make install
安装完成后,系统可能默认不允许使用root登录,为方便使用,修改配置文件/etc/ssh/sshd_config:将#PermitRootLogin prohibit-password 复制并修改为PermitRootLoginyes。
重启服务:systemctl restart sshd.service
设置开机自启: systemctlenable sshd.service
Reboot重启系统,使用ssh -V查看ssh版本信息。
升级成功。
友情提示:如非必要,操作完成后请及时关闭telnet服务。