一、升级背景:

漏洞扫描显示linux服务器openssh有高危漏洞,需要进行修复。openssh是远程登录到linux服务器 的重要工具,要修复此漏洞需升级到最高版本(2021年5月中旬最新版本为8.6p1)。

二、升级说明:

1、所有升级文件均从官网下载。
2、linux服务器系统为Centos7可适用此方案。
3、Centos7系统需要有yum源,方便解决依赖关系问题。如无法实现,则需上传同系统版本安装映像文件,作为本地yum源。
4、安装过程受网络影响极大,一旦出现不可抗因素致网络断开,可能会导致升级中断,无法远程连接,出现此情况需现场人员配合解决。
5、升级过程出现问题需现场人员根据回退方案进行恢复操作。

三、升级过程:

(0)安装并启用telnet

1、安装telnet

yum install telnet-server telnet xinet

2、修改配置文件

vi /etc/xinetd.d/telnet

disable= no       //将yes改为no

让root可以登录
mv /etc/securetty /etc/securetty.bak
重启服务
service xinetd restart

3、启动相应服务,然后使用telnet登录到服务器

systemctl start telnet.socket
systemctl start xinetd
chkconfig --list

(一)配置yum源

1、上传与生产环境相同的centos7版本的iso和openssh8.6p1的安装包到服务器。

2、挂载iso

创建iso存放目录和挂载目录,并上传iso镜像文件到iso存放目录/mnt/iso下

mkdir /mnt/iso 
mkdir /mnt/cdrom
mv CentOS-7.6-x86_64-DVD-1810.iso /mnt/iso/

挂载iso镜像到挂载目录/mnt/cdrom下
mount -o loop /mnt/iso/CentOS-7.6-x86_64-DVD-1810.iso /mnt/cdrom
使用df -h命令查询挂载是否成功
df -h

3、备份原本地源

进入repos配置目录
cd /etc/yum.repos.d/
创建备份文件夹
mkdir repobak
移动配置文件到repobak文件夹中
mv *.repo repobak/

4、新建光盘源配置文件

vi CentOS-Media.repo
输入下列内容

[c7-media]
name=CentOS-$releasever - Media
baseurl=file:///mnt/cdrom/

gpgcheck=0
enabled=1

5、测试安装源

yum clean all
yum makecache

(二)升级openssh版本到8.6p1

1、下载或上传安装包openssh-8.6p1.tar.gz到/root目录下

进入安装包所在文件夹
cd /root/linshi

2、关闭Selinux

setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

3、安装依赖关系

yum install -y gcc pam-devel rpm-build wget zlib-devel openssl-devel net-tools
tar -xvf openssh-8.6p1.tar.gz
cd openssh-8.6p1

4、卸载旧版openssh

rpm -qa |grep openssh
ps:下一步骤为删除原有ssh,但不会影响现在进行的ssh会话,所以整个操作过程不要断开ssh会话,否则无法再次连接,只能由现场人员进行回退后重新操作(推荐使用telnet进行升级)。
for i in $(rpm -qa |grep openssh);do rpm -e $i --nodeps;done

5、设置、编译、安装

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-tcp-wrappers  --with-ssl-dir=/usr/local/ssl/lib --without-hardening
mv /etc/ssh /etc/ssh.old
cp contrib/redhat/sshd.pam /etc/pam.d/sshd

#编译
make
#安装
make install

6、设置自启动

复制启动脚本到/etc/init.d

cp contrib/redhat/sshd.init /etc/init.d/sshd
chkconfig --add sshd
chkconfig sshd on
chkconfig --list|grep sshd
sed -i "32a PermitRootLogin yes" /etc/ssh/sshd_config

#重启ssh服务
service sshd restart

7、检查升级情况

ssh -V
输出版本号为“OpenSSH_8.6p1”,说明更新成功

(三)关闭telnet

关闭服务

systemctl stop telnet.socket
systemctl stop xinetd

root可以登录
mv /etc/securetty.bak /etc/securetty

卸载telnet
yum remove telnet-server xinetd

ps:此时ssh是可以连接状态,不要断开连接防止修改出错无法连接服务器。测试新端口是否打开
telnet 127.0.0.1 22
#出现如下显示表示端口正常打开

Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
SSH-2.0-OpenSSH_8.6

使用远程工具新开窗口,连接新端口测试修改是否成功,如有问题马上使用之前的连接进行检查修改。

(四)回退方案

1、挂载iso文件作为yum源

mount -o loop /mnt/iso/CentOS-7.6-x86_64-DVD-1810.iso /mnt/cdrom

2、安装openssh

yum install openssh*

3、启动ssh

service sshd start

4、重新连接ssh,然后从(二)4开始做。