低版本的OpenSSH存在漏洞,升级到 OpenSSH_8.0p1

甲方扔过来一份主机扫描安全评估报告,我看了下报告有几个中危漏洞什么“OpenSSH'sftp-server'安全绕过漏洞”,“OpenSSH 用户枚举漏洞-CVE-2018-15919” 等。这些漏洞的修复方法都是升级OpenSSH到高版本,以下我记录下升级的过程。

然后大概说一下升级的步骤,首先确认下服务器现在使用的OpenSSH版本,看是否需要升级,如果使用的版本不存在这些漏洞那就不必升级了。我原来的版本OpenSSH_7.4p1存在一些漏洞,目前最新的版本是OpenSSH_8.2p1,我看目前升级到最新版本的不是很多,大部分都升级到了OpenSSH_8.0p1,为了保险起见就升级到这个版本吧。如果你是用SSH方式连接的服务器,这样你升级OpenSSH 可能会存在问题,建议使用telnet方式连接服务器来升级。

 

下边是升级的具体步骤:

首先查看未升级前的版本,顺便看下我服务器目前的操作系统版本是CentOS7.4

# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017
# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 

因为使用SSH方式连接服务器升级OpenSSH可能会有问题下边我们安装telnet

1.先检查CentOS7.4是否已经安装以下几包:telnet-server、telnet、xinetd。命令如下:

#rpm -qa |grep telnet-server
#rpm -qa |grep telnet
#rpm -qa |grep xinetd

若没有安装则 yum install 包名   安装上面的三个包
附一个离线安装telnet的博客https://www.hangge.com/blog/cache/detail_2935.html

2.将telnet服务设置为开机启动

#systemctl enable telnet.socket

3.因为telnet服务也是由xinetd守护的,所以启动telnet服务就必须重新启动xinetd 

#systemctl start telnet.socket
#systemctl start xinetd

4.查看目前telnet服务的默认23端口是否在监听状态,如下图可见23端口处在监听状态表明telnet服务正常

这里我遇到了一个奇怪的问题也没找到原因,我完成第三步启动telnet服务和xinetd后,立即查看23端口的监听状态。这个时候23端口并没有在监听,大概过了一两分钟之后查看23端口才处在了监听状态。这点我一直没搞懂

5.此时我们就可以尝试使用telnet协议登录服务器试试了,如下图:
低版本的OpenSSH存在漏洞,升级到 OpenSSH_8.0p1_第1张图片

然而登录不成功:如下图:
低版本的OpenSSH存在漏洞,升级到 OpenSSH_8.0p1_第2张图片

6.解决登录不了的问题
我在网上看到了这篇文章:
https://blog.csdn.net/s_o_l_o_r/article/details/81541190

按照这篇文章的指引键入命令 tail /var/log/secure 查看日志如下:

按照这篇文章的说法倒数第三行pam_securetty提示 access denied(拒绝访问):tty pts/3 is not secure(终端 pts/3 不安全)。

文章非常好,讲了很多原理的东西,看到最后解决方法是编辑 /etc/securetty 在里边加上pts/3。这里我要说一句,我试了多次不是每次登陆都是pts/3 ,也有可能是pts/0、pts/1、pts/2 所以我就在/etc/securetty 里边加了多个,如下图:

低版本的OpenSSH存在漏洞,升级到 OpenSSH_8.0p1_第3张图片

加上之后果然登陆成功了,要感谢写这篇文章的这为兄弟

 

接下来我们使用telnet协议连接服务器的来升级OpenSSH

1.安装OpenSSH前先安装必要组件(等编译OpenSSH时报错再安装也可以)

#yum install -y gcc openssl-devel pam-devel rpm-build

2.下载并解压OpenSSH(我这里新建一个目录将安装包下载到此目录)

#mkdir tools
#cd tools
#wget https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.0p1.tar.gz
#tar -zxvf openssh-8.0p1.tar.gz

3.进入解压后的目录执行./configure ,其作用是检测系统配置,生成makefile文件

#cd openssh-8.0p1/ 
#./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-md5-passwords --with-tcp-wrappers

由于系统版本的差异和系统之前装过的依赖包的不同,这个过程可能会有报错。如果有报错先解决报错,不然无法进行下一步

4.编译安装

#make && make install

此过程中可能出现以下报错:

Permissions 0640 for '/etc/ssh/ssh_host_ecdsa_key' are too open

报错解决:
修改相关提示文件的权限为600(作用为其增加读写权限),如有其他文件同样报上面的错,就为其增加同样的权限 如下:

#chmod 600 /etc/ssh/ssh_host_ecdsa_key

不报任何错表明编译安装完成

5.确认版本,此时的版本已经是OpenSSH_8.0p1,证明安装成功

# ssh -V
OpenSSH_8.0p1, OpenSSL 1.0.2k-fips  26 Jan 2017

6.修改ssh配置文件

#vim /etc/ssh/sshd_config 

将以下两个配置改为yes,如果注释掉的解开注释 如下:

PasswordAuthentication yes
PermitRootLogin yes       允许root用户ssh登录需要配置

7.设置开机启动,执行以下命令

#cd openssh-8.0p1/
#cp -a contrib/redhat/sshd.init /etc/init.d/sshd
#cp -a contrib/redhat/sshd.pam /etc/pam.d/sshd.pam
#chmod +x /etc/init.d/sshd
#chkconfig --add sshd
#systemctl enable sshd
#mv /usr/lib/systemd/system/sshd.service /tmp
#chkconfig sshd on

8.重启ssh服务,连接测试

#service sshd restart

此时可以在使用ssh命令连接以下其他机器看是否正常 如下:

#ssh root@目标机器IP 
/etc/ssh/ssh_config line 59: Unsupported option "gssapiauthentication"

我们发现报错了,我再网上找的解决办法是编辑/etc/ssh/ssh_config  
注释掉 “GSSAPIAuthentication yes”  这一行
然后发现可以使用ssh正常连接其他机器了并且Xshell使用SSH协议也可以连接到升级过OpenSSH版本的这台服务器
 

此时大功告成,在此写下一点排查问题的建议,如果ssh登录出现问题可以从以下两个方面查找原因:
1.netstat -nult命令查看22端口是否在监听,没有的话查找具体原因解决
2.用telnet方式登录用journalctl -xe 命令查看登录日志分析问题解决

 

你可能感兴趣的:(个人经验)