Linux离线升级SSH

  绿盟扫漏提示:OpenSSH 用户枚举漏洞(CVE-2018-15473)【原理扫描】【可验证】【未验证】
  OpenSSH(OpenBSD Secure Shell)是OpenBSD计划组所维护的一套用于安全访问远程计算机的连接工具。该工具是SSH协议的开源实现,支持对所有的传输进行加密,可有效阻止窃听、连接劫持以及其他网络级的攻击。
  OpenSSH 7.7及之前版本中存在用户枚举漏洞,该漏洞源于程序会对有效的和无效的用户身份验证请求发出不同的响应。攻击者可通过发送特制的请求利用该漏洞枚举用户名称。

  OpenSSH有关的依赖:
tar类:openssl、openssh、zlib、gcc
rpm类:pam、telnet、telnet-server、tcp_wrappers、zlib、zlib-devel、pam-devel



1. 先安装 telnet 工具,避免升级失败,SSH连接不上时,可使用telnet连接

1.1、查看telnet环境

rpm -qa|grep telnet #查看当前系统是否存在telnet

如果当前系统有telnet,请直接看 2.查看pam环境:
如果当前系统不存在telnet,则需要安装:

1.2、安装顺序:xinetd–》telnet–》telnet-server

rpm -ivh xinetd-2.3.15-14.el7.x86_64.rpm
rpm -ivh telnet-0.17-65.el7_8.x86_64.rpm
rpm -ivh telnet-server-0.17-65.el7_8.x86_64.rpm

1.3、telnet服务之后,默认是不开启服务,修改文件/etc/xinetd.d/telnet来开启服务。
注:如有则修改,第一次修改,此文件若不存在,可自己vim创建。修改 disable = yes 为 disable = no

vim /etc/xinetd.d/telnet
service telnet
{undefined
    flags=REUSE
    socket_type=stream
    wait=no
    user=root
    server=/usr/sbin/in.telnetd
    log_on_failure += USERID
    disable= no
}

保存

1.4、重启xinetd

service xinetd restart
或
systemctl restart xinetd.service

1.5、查看xinetd是否重启成功

ps -ef | grep xinetd

1.6、测试telnet是否安装成功

telnet 127.0.0.1

1.7、本地windows打开Telnet功能方法:

控制面板-程序和功能-打开或关闭Windows功能-Telnet服务端”与“Telnet客户端
telnet 命令测试 主机IP
telnet 127.0.0.1

2.查看pam环境

rpm -qa|grep pam #查看当前系统是否存在pam

如果当前系统有pam,请直接看 3.查看zlib环境:
如果当前系统不存在pam,则需要上传依赖,并且执行安装:

rpm -Uvh pam-1.1.8-23.el7.x86_64.rpm #安装pam
rpm -Uvh pam-devel-1.1.8-23.el7.x86_64.rpm #安装pam-devel

3.查看zlib环境

rpm -qa|grep zlib #查看当前系统是否存在zlib

如果当前系统有zlib,请直接看 4.关闭selinux和防火墙:
如果当前系统不存在zlib,则需要上传依赖,并且执行安装:

tar -xvf zlib-1.2.11.tar.gz

cd zlib-1.2.11

./configure --prefix=/usr/local/zlib-1.2.11
 
make

sudo make install 

export LD_LIBRARY_PATH=/usr/local/zlib-1.2.11/lib:$LD_LIBRARY_PATH

cp libz.a /usr/local/lib

chmod 755 /usr/local/lib/libz.a

cp libz.so.1.2.11 /usr/local/lib

chmod 755 /usr/local/lib/libz.so.1.2.11

cp zlib.3 /usr/local/share/man/man3

chmod 755 /usr/local/share/man/man3/zlib.3

cp zlib.pc /usr/local/lib/pkgconfig

chmod 755 /usr/local/lib/pkgconfig/zlib.pc

cp zlib.h zconf.h /usr/local/include

chmod 755 /usr/local/include/zlib.h /usr/local/include/zconf.h

4.关闭selinux和防火墙:

vim /etc/selinux/config #打开并编辑selinux
SELINUX=disabled #禁用SELINUX

systemctl status iptables #查看防火墙状态
systemctl stop iptables #关闭防火墙

5.检查gcc环境

rpm -qa|grep gcc #查看当前系统是否存在gcc

如果当前系统有gcc,请直接看 6.升级OpenSSL:
如果当前系统不存在gcc,则需要上传依赖,并且执行安装:

rpm -Uvh *.rpm --nodeps --force

6.升级OpenSSL
6.1、解压openssl安装包,并进入

tar zxvf openssl-1.0.2h.tar.gz

cd openssl-1.0.2h

6.2、卸载这些包

for i in $(rpm -qa |grep openssl);do rpm -e $i --nodeps ;done

6.3、编译安装

./config shared

make && make install

6.4、配置,下面的命令要走一遍,不成功也要走一波

echo “/usr/local/ssl/lib” >> /etc/ld.so.conf

ldconfig

cp /usr/local/ssl/lib/libssl.so.1.0.0 /usr/lib64

cp /usr/local/ssl/lib/libcrypto.so.1.0.0 /usr/lib64

ln -s /usr/lib64/libcrypto.so.1.0.0 /usr/lib64/libcrypto.so.10

ln -s /usr/lib64/libcrypto.so.1.0.0 /usr/lib64/libcrypto.so

ln -s /usr/lib64/libssl.so.1.0.0 /usr/lib64/libssl.so.10

ln -s /usr/lib64/libssl.so.1.0.0 /usr/lib64/libssl.so

ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl

ln -s /usr/local/ssl/include/openssl /usr/include/openssl

6.5、查看版本

openssl version -a

7.升级OpenSSH

7.1、解压openssh-7.8p1,进入

tar xvf openssh-7.8p1.tar.gz

cd openssh-7.8p1

7.2、卸载原openssh

rpm -qa | grep openssh

for i in  $(rpm  -qa  |grep  openssh);do  rpm  -e  $i  --nodeps ;done

7.3、配置新版本

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

7.4、删除原ssh配置目录

rm  -rf  /etc/ssh

7.5、安装

make   &&   make  install

7.6、配置

cp  ./contrib/redhat/sshd.init    /etc/init.d/sshd

设置开机启动ssh:

chkconfig --add sshd

chkconfig sshd on

chkconfig --list|grep sshd

查看版本,是否安装完成

ssh  -V

重点还没结束!切勿关闭窗口!!!
重点还没结束!切勿关闭窗口!!!
重点还没结束!切勿关闭窗口!!!
接下来是重中之重,ssh还需要配置,否则新窗口连不上linux主机

配置之一

vi /etc/ssh/sshd_config
#末尾加上
PermitRootLogin yes
X11Forwarding yes
PasswordAuthentication yes
KexAlgorithms diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1

配置之二:

vim /etc/init.d/sshd
#在‘$SSHD $OPTIONS && success || failure’这一行上面加上 
OPTIONS="-f /etc/ssh/sshd_config"

重启sshd

systemctl restart sshd 
service sshd status


注意点:
1,
2,

3,

  1. 用新窗口连接linux主机,连接成功则OK;
  2. 过程中如 出现 以下提示:
make: *** 没有指明目标并且找不到makefile;
#表示 安装前 编译未完成,需重新编译,并查看编译提示信息,
#应该是前面的哪个依赖没有配置完成,无法使用,导致编译失败;