背景:最近漏扫发现欧拉20.03版本自带的ssh存在安全漏洞,查看后发现20.03系统默认部署的ssh版本为9.5p1,漏洞修复说明中提到OpenSSH 9.6及之前版本均存在该安全漏洞,因此选择目前最新的版本9.7p1进行升级,如图:
说明:
1、操作环境:OpenEuler20.03,OpenSSH_9.5p1, OpenSSL 1.1.1;(仅供参考,其他系统版本请自行测试)
2、升级方案参考:Linux OpenSSH最新版9.7p1升级操作详细教程_openssh 9.7-CSDN博客
3、漏洞所在均为生产服务器,与外网不互通,因此通过上传rpm包方式进行升级;
4、经过测试,欧拉系统缺少部分环境包,本次升级所用到的rpm包均是从源镜像中提取 ;
如果你也存在无法通过网络获取,这里介绍一个小操作:解压缩源镜像文件,然后进入解压之后的镜像文件夹中进入Packages目录,在这里可以找到相关的rpm包;
查看本地是否安装某功能 rpm -qa |grep ***
注:这里将本次升级所用到的包都放在一起,有需要的自取-附件ssh.zip
操作:
1、备份ssh配置
cp -rf /etc/ssh /etc/ssh.bak
cp -rf /usr/bin/openssl /usr/bin/openssl.bak
cp -rf /etc/pam.d /etc/pam.d.bak
cp -rf /usr/lib/systemd/system /system.bak
2、安装telnet
rpm -ivh telnet-0.17-76.oe1.x86_64.rpm #安装telnet
systemctl enable telnet.socket #设置telnet开机自启
systemctl start telnet.socket #启动telnet
测试telnet是否可用
1、添加防火墙策略
2、换一台服务器进行telnet
这里需要注意,安装telnet后先测试telnet是否可用,不然后续openssh安装就得跑机房咯!!
3、升级环境准备
3.1、如果可以通过yum安装,执行如下命令:
yum install -y vim gcc gcc-c++ glibc make autoconf openssl openssl-devel pcre-devel pam-devel zlib-devel tcp_wrappers-devel tcp_wrappers libedit-devel perl-IPC-Cmd wget tar lrzsz nano
3.2、如不能通过自动安装,则需要排查缺少哪些包,再依次找到对应rpm包进行安装
升级所需环境:gcc gcc-c++ glibc make autoconf openssl openssl-devel pcre-devel pam-devel zlib-devel tcp_wrappers-devel tcp_wrappers libedit-devel perl-IPC-Cmd wget tar lrzsz nano
示例:rpm -qa |grep gcc
经排查缺少
1、libedit-3.1-27.oe1.x86_64.rpm
2、lrzsz-0.12.20-46.oe1.x86_64.rpm
3、pam-devel-1.4.0-8.oe1.x86_64.rpm
4、tcp_wrappers-7.6-96.oe1.x86_64.rpm
找到对应的rpm包上传至服务器后进行安装
rpm -ivh ***.rpm
4、升级Openssh
4.1、获取源码包
4.1.1可以使用wget下载
wget https://www.zlib.net/zlib-1.3.1.tar.gz
wget https://www.openssl.org/source/openssl-3.2.1.tar.gz
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.7p1.tar.gz
4.1.2无法连接外网,则手动下载后上传至服务器
4.2、解压缩源码包
tar -zxvf zlib-1.3.1.tar.gz
tar -zxvf openssl-3.2.1.tar.gz
tar -zxvf openssh-9.7p1.tar.gz
4.3、安装zlib
#进入zlib-1.3.1目录
cd /usr/local/src/zlib-1.3.1
#配置
./configure --prefix=/usr/local/src/zlib
#编译及安装
make -j 4 && make test && make install
4.4、安装openssl
#1.进入openssl-3.2.1目录
cd /usr/local/src/openssl-3.2.1
#2.配置
./config --prefix=/usr/local/src/openssl
#3.编译及安装
make -j 4 && make install
4.5、配置
#配置
mv /usr/bin/openssl /usr/bin/oldopenssl
ln -s /usr/local/src/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/src/openssl/lib64/libssl.so.3 /usr/lib64/libssl.so.3
ln -s /usr/local/src/openssl/lib64/libcrypto.so.3 /usr/lib64/libcrypto.so.3
#更新动态库
echo "/usr/local/src/openssl/lib64" >> /etc/ld.so.conf
ldconfig
#查看更新后的版本
openssl version -v
4.6、卸载系统自带openssh9.5p1
操作之前先测试telnet是否可用再执行,否则就要在机房执行后续操作咯!!
#卸载openssh9.5p1
yum remove -y openssh
#清理残余文件
rm -rf /etc/ssh/*
4.7、安装openssh9.7p1
#1.进入openssh-9.7p1目录
cd /usr/local/src/openssh-9.7p1
#2.配置
./configure --prefix=/usr/local/src/ssh --sysconfdir=/etc/ssh --with-pam --with-ssl-dir=/usr/local/src/openssl --with-zlib=/usr/local/src/zlib
#3.编译及安装
make -j 4 && make install
#4.查看目录版本
/usr/local/src/ssh/bin/ssh -V
#5.复制新ssh文件
cp -rf /usr/local/src/openssh-9.7p1/contrib/redhat/sshd.init /etc/init.d/sshd
cp -rf /usr/local/src/openssh-9.7p1/contrib/redhat/sshd.pam /etc/pam.d/sshd
cp -rf /usr/local/src/ssh/sbin/sshd /usr/sbin/sshd
cp -rf /usr/local/src/ssh/bin/ssh /usr/bin/ssh
cp -rf /usr/local/src/ssh/bin/ssh-keygen /usr/bin/ssh-keygen
#6.允许root登录
echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config
4.8、重启ssh
#重启sshd服务
systemctl restart sshd
#如果ssh无法重启,试试这个命令,然后再执行重启
systemctl daemon-reload
#查看服务运行状态
/etc/init.d/sshd status
#添加开机启动
chkconfig --add sshd
#查看升级后ssh版本
ssh -V
5、测试登录
#测试是否可以远程登录,如发现执行
ssh root@***ip***后产生如下报错:
/etc/crypto-policies/back-ends/openssh.config: line 3: Bad configuration option: gssapikexalgorithms
/etc/crypto-policies/back-ends/openssh.config: terminating, 1 bad configuration options
#可以多换几台服务器进行连接测试。
排查思路:检查4.3-4.8之间的操作是否成功
#验证方式:
执行命令 echo $?
如返回0,则说明上一步操作成功
6、升级完成
如有安全相关要求,可关闭telnet,更换远程端口等。
版权归原作者 想做大程序猿的李Sir 所有, 如有侵权,请联系我们删除。