Openssh升级漏洞修复

0.前言
公司采用三方漏洞扫描时发现大量openssh漏洞,最终修复漏洞方案为将openssh升级到官方最新版本。


image.png

1. 环境

操作系统: Centos7.2
网络状况: 可以访问外网
Openssh版本: OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013

2. 安装telnet

2.1 安装目的及意义

    为了防止在openssh更新过程中出现问题,导致无法远程远程登陆服务器,因此需要安装telnet服务进行预防。无论openssh是否更新成功,都还可以通过telnet远程连接服务器。

2.2. 安装步骤

(1) 查看当前是否安装了telnet

rpm -qa | grep telnet
rpm -qa | grep xinetd

(2) 安装

yum -y install xinetd
yum -y install telnet
yum -y install telnet-server

(3) 配置telnet

centos6修改配置文件:

修改配置文件/etc/xinetd.d/telnet 将里面的”disable= yes”改成” disable=no” ,修改后结果


openssh.png

centos7修改配置文件

在/etc/securetty文件末尾增加一些pts终端,直接加在末尾就可以了

vim /etc/securetty
pts/0
pts/1
pts/2
pts/3

(4) 开机自启telnet(重要)

centos6

chkconfig --add xinetd
chkconfig --add telnet
chkconfig xinetd on 
chkconfig telnet on

centos7

systemctl enable xinetd
systemctl enable telnet.socket
systemctl start xinetd
systemctl start telnet.socket

(5)火墙开启23端口或者直接关闭火墙

防火墙开启23号端口,当然也可以直接关闭防火墙 ,这里选择关闭防火墙

开启23号端口
iptables -I INPUT -p tcp --dport 23 -jACCEPT 
iptables -I INPUT -p udp --dport 23 -jACCEPT 

保存 
service iptables save

重启防火墙 
service iptables restart 

关闭防火墙!
#centos6
service iptables stop

centos7
systemctl stop firewalld.service

查看防火墙状态
centos6
service iptables status
centos7
firewall-cmd --state

(6)测试telnet

telnet ip
或直接用远程连接工具选择telnet协议以及23号端口连接

3. 备份现有openssh

3.1 备份的目的及意义

在升级过程中出现问题后可以最快将系统恢复到更新之前的正常状态,将对生产的影响降低到最小。

3.2 备份的步骤

(1)查看当前openssh的版本

ssh -V

(2)备份前准备

设置开机自启动

centos6
chkconfig --add sshd
chkconfig sshd on
centos7
systemctl enable sshd
查看SElinux是否为强制状态,如果是则修改为非强制状态
获取SElinux状态:
getenforce
如果结果为enforcing,则进行修改
setenforce 0

或修改配置文件,永久生效。

配置文件位置:/etc/sysconfig/selinux 以及 /etc/selinux/config

内容修改为
SELINUX=permissive

(3)备份

先创建备份目录

mkdir /back_up

将还原脚本restore.sh上传到/back_up中

cd /back_up
vim restore.sh
#!/bin/bash
tar -xzpvf /back_up/backup.tgz -C /;
restorecon -Rv /;
reboot;

执行打包备份命令

tar -czpvf /back_up/backup.tgz /etc /usr 2>>/back_up/tar.errors.log 
#可能会有点久

(4)安装依赖包

yum install  -y gcc gcc-c++ glibc make autoconf openssl openssl-devel pcre-devel  pam-devel
yum install  -y pam* zlib*
  1. 安装Openssl
    4.1 软件下载地址
    https://www.openssl.org/source/

4.2 换成telnet登录服务器
其换成telnet登录服务器,更新过程ssh连接会断,导致无法连接

4.3 安装Openssl步骤
(1)替换会被备份的文件

mv /usr/bin/openssl /usr/bin/openssl_bak
mv /usr/include/openssl /usr/include/openssl_bak

(2)解压软件包并且进入目录进行编译

mkdir -p /server/tools
cd /server/tools
tar xf openssl-1.1.1i.tar.gz
cd openssl-1.1.1i
mkdir /usr/local/openssl
./config --prefix=/usr/local/openssl
make
make install

(3)创建软连接

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

(4)验证文件

cd /usr/local/openssl
ldd /usr/local/openssl/bin/openssl

(5)修改配置文件

vim /etc/ld.so.conf
在最后追加一行:
/usr/local/openssl/lib 
然后执行:
ldconfig /etc/ld.so.conf
查看是否成功:
openssl version
  1. 安装ssh
    5.1 下载地址
    https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/

5.2 安装步骤
(1)解压压缩包

tar xf openssh-8.4p1.tar.gz

(2)修改目录权限

chown -R root.root openssh-8.4p1

(3)备份会替换的文件

mv /etc/ssh /etc/ssh_back

(4)执行编译安装

cd openssh-8.4p1/
./configure --prefix=/usr/ --sysconfdir=/etc/ssh  --with-openssl-includes=/usr/local/openssl/include --with-ssl-dir=/usr/local/openssl   --with-zlib   --with-md5-passwords   --with-pam  && make && make install
#执行完成后,查看是否编译安装成功
 echo $?
 #如果输出0表示没有问题

(5)修改配置文件

vim /etc/ssh/sshd_config
在配置文件中添加:PermitRootLogin yes(限定root用户通过ssh的登录方式,允许) 和 UseDNS no(ip反解,关闭),自己看情况是否需要这样做

(6)文件替换

cp -a /server/tools/openssh-8.4p1/contrib/redhat/sshd.init /etc/init.d/sshd
cp -a /server/tools/openssh-8.4p1/contrib/redhat/sshd.pam /etc/pam.d/sshd.pam
chmod +x /etc/init.d/sshd

(7)添加开机自启动

#centos6
chkconfig --add sshd
chkconfig sshd on 

#centos7
systemctl enable sshd
#centos7还得多做一步,把原先的systemd管理的sshd文件删除或者移走或者删除,不移走的话影响我们重启sshd服务
mv  /usr/lib/systemd/system/sshd.service  /back_up/

(8)重启ssh

#centos6
service sshd restart
#centos7
systemctl daemon-reload
systemctl restart sshd.service
  1. 失败回滚
    如果失败了,那么就将系统还原。

脚本添加运行权限,然后运行

chmod +x /back_up/restore.sh
nohup /back_up/restore.sh &

注意:在运行这个脚本的时候备份文件必须要是/back_up/backup.tgz,如果备份的时候叫其他名称,请自行修改脚本。还有脚本不能运行为前台且跟终端相关进程,因为经测试发现在还原的时候ip会被冲掉。所以远程连接会断掉

最后需要注意的是执行脚本会重启机器

  1. 卸载telnet
    telnet只可以作为临时远程连接方案,因此在opnessh升级之后,为了保证系统的安全,需要删除telnet服务

查看版本

rpm -qa | grep telnet

删除安装包

rpm -e telnet-0.17-66.el7.x86_64
rpm -e telnet-server-0.17-66.el7.x86_64

你可能感兴趣的:(Openssh升级漏洞修复)