Linux Centos6 OpenSSH版本低导致的安全漏洞 升级OpenSSH和OpenSSl来修复漏洞 由于最近公司项目需要重新部署到服务器,检查出的安全漏洞,其中 一项就是Openssh版本低过低所以导致的远程执行漏洞, 于是我就要进升级版本填补漏洞。

因为没有无外网情况,所以我下载了一个官方镜像做成yum源,镜像地址http://isoredirect.centos.org/centos/6/isos/x86_64/,如何挂载配置yum源请自行百度

首先 1、查看OpenSSH版本,在服务器输入以下命令:

# ssh -V

2、确认系统是否已经确认安装gcc编译器:

# gcc -v

 3.升级Zlib

下载最新版本的Zlib:Zlib 官方网站:http://www.zlib.net/

# wget -c http://www.zlib.net/zlib-1.2.11.tar.gz

# tar -xzvf zlib-1.2.11.tar.gz 

# cd zlib-1.2.11/

# ./configure --prefix=/usr/local/zlib

# make install

 现在zlib 编译安装在 /usr/local/zilib中了 ,如果出现“Compiler error reporting is too harsh for ./configure (perhaps remove -Werror).** ./configure aborting.”报错,安装gcc

4.升级openssl:

openssl下载:http://www.openssl.org/source/

确认是否安装了SSI和查看版本:

# openssl version -a 或者 openssl version

# cd /usr/local/src

# tar -zvxf openssl-1.1.1h.tar.gz 

# cd openssl-1.1.1h

# ./config --prefix=/usr/local/openssl

# make && make install

编译安装是出现:

报错:libgmp.so.3: cannot open shared object file: No such file

处理方法:

找到libgmp.so.*文件:

# find -name libgmp.so.*
/usr/lib64/libgmp.so.10.3.2 
/usr/lib64/libgmp.so.10

进入目录下做软连接:

#cd  /usr/lib64
# ln -s libgmp.so.10.3.2 libgmp.so.3

如果没有报错请跳过上2步骤,进行下一步之前记得备份一下/usr/bin/openssl旧的Openssl文件

# mv /usr/bin/openssl /usr/bin/openssl.bak

将安装好的openssl 的openssl命令软连到/usr/bin/openssl:

# ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl

在/etc/ld.so.conf文件中写入openssl库文件的搜索路径:

# echo "/usr/local/openssl/lib" >> /etc/ld.so.conf

使修改后的/etc/ld.so.conf生效:

# ldconfig -v

查看版本:

# openssl version

至此,Openssl升级完毕

5、关闭selinux 命令:

# vim /etc/sysconfig/selinux

修改 SELINUX=disabled,输入:wq 保存退出

临时关闭selinux:

# setenforce 0
# getenforce

 关闭防火墙:

# service iptables stop
# chkconfig iptables off

 

6、安装telnet并开起来,防止意外导致ssh无法连接 检测telnet-server的rpm包是否安装:

# rpm -qa telnet-server

如没有输出就要安装,安装命令:

# yum install telnet-server

Centos6只需要把xinetd启动:

# service xinetd start

加入开机自启套餐:

# chkconfig --add xinetd

设置好之后显示如下 : xinetd 0:关闭 1:关闭 2:关闭 3:启用 4:关闭 5:启用 6:关闭

# chkconfig --list | grep xinetd

可以再看看23端口开启:

#netstat -plntu

默认情况下,系统是不允许root用户telnet远程登录的。如果要使用root用户直接登录,需设置如下内容:

修改telnet文件disable=no(原有值为yes),允许用户远程登录

# sed -i '12 s/yes/no/g'/etc/xinetd.d/telnet

# echo 'pts/0' >>/etc/securetty

# echo 'pts/1' >>/etc/securetty

# echo 'pts/2' >>/etc/securetty

# echo 'pts/3' >>/etc/securetty

Centos7安装telnet:

    yum -y install telnet

    yum -y install xinetd

启动服务:

启动xinetd服务systemctl start xinetd.service
xinetd开机自启动systemctl enable xinetd.service
启动telnet服务systemctl start telnet.socket
telnet服务开机自启systemctl enable telnet.socket
默认root无法远程访问,因此需要修改以下配置文件/etc/securetty而且centos7下面安装telnet没有生成/etc/xinetd.d/telnet文件
echo 'pts/0' >>/etc/securetty

echo 'pts/1' >>/etc/securetty

重启服务:

# service xinetd restart

查看下xinetd端口是否启用:

# netstat -plntu

接下来在你计算机上打开telnet客户端: 然后测试打开cmd.exe看看能不能登录,telnet+IP,回车

登录成功,接下来我们就可以安心地升级openSSH

7、下载关联包

先看看本机有没有以下软件,没有需要进行安装,这几个关联包很重要如果没有会导致ssh编译安装报错,找不到包的请到开头给的centos镜像下载挂载:

# yum -y install openssl-devel  zlib-devel   pam-devel

 

8、升级openSSH 备份旧ssh配置文件夹 /etc/ssh :

# cp -rf /etc/ssh /etc/ssh.bak

接下来就是解压安装OpenSSH,configure时注意ssl和zlib的文件目录位置:

# tar -zvxf openssh-8.4p1.tar.gz

#  cd openssh-8.4p1

# ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-tcp-wrappers --with-ssl-dir=/usr/local/openssl --with-zlib=/usr/local/zlib --without-hardening

# make && make install

如果编译安装中出现警告,把提示中的目录进行提权:

 

centos8 openssh离线升级 离线升级openssh方法_配置文件

# cd /etc/ssh   //一定要进入到ssh目录中去,不然修改失败ssh服务没法启动,无法启动使用status查看
# chmod 600 ssh_host_rsa_key
# chmod 600 ssh_host_ecdsa_key
# chmod 600 ssh_host_ed25519_key

上面只能说明OpenSSH的客户端开始使用新版本了,但openssh-server服务端还是在用旧版的,所以我们还需要修改一下ssh的服务文件,让它开始使用新的版本,如果不进行替换,会出现openssh服务反复重启的情况,而且sshd -t 也不会报错信息

禁用原先的SSH服务,并移除服务文件

# systemctl disable sshd

# mv /usr/lib/systemd/system/sshd.service  ./sshd.service.bak

在OpenSSH_8.4p1源码包/contrib/redhat/,把一些服务文件复制到系统中:

# cp /openssh-8.4p1/contrib/redhat/sshd.init /etc/init.d/sshd

# cp /openssh-8.4p1/contrib/redhat/sshd.pam /etc/pam.d/sshd.pam

#  chmod +x /etc/init.d/sshd

修改/etc/init.d/sshd中的SSHD路径(不清楚的find搜索):

# vim /etc/init.d/sshd

SSHD=/usr/local/sbin/sshd

最后需要修改一下/etc/ssh/sshd_config 把#PermitRootLogin yes注释打开,不然root没法登录

#  vim /etc/ssh/sshd_config
   PermitRootLogin yes

加入到系统服务,重启sshd,查看版本成功升级到8.4p了:

# systemctl daemon-reload

# systemctl restart sshd

# systemctl enable sshd

# ssh

 

报错总结:

1、 上面的方法会覆盖原版本的文件,make install覆盖/etc/ssh下配置文件时可能会报错。这时删掉/etc/ssh下的原配置文件,再make install一次就可以了。

2、 如果使用root远程无法登录,修改/etc/ssh/sshd_config将 PermitRootLogin 参数改为yes

3、 没有安装openssl-devel openssh编译安装会出现“configure: error: *** zlib.h missing - please install first or check config.”报错

4、没有安装pam-devel openssh编译安装会出现“ configure: error: PAM headers not found”

5、使用SecureCRT连接报错Key exchange failed

处理方法:修改/etc/ssh/sshd_config配置文件,增加如下一行,使新版本持老版本的秘钥交换算法。

KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1

最后,重启sshd