Linux环境下OpenSSH升级到 OpenSSH_9.8p1(内置保姆级教程并包含openssl升级过程)

迷茫运维路 2024-08-29 12:07:02 阅读 92

文章目录

前言一、下载openssh、openssl二进制包二、升级步骤1.系统开启telnet,防止意外导致shh无法连接2.确认升级前openssh的版本3.升级openssh3.1.备份旧ssh配置文件及目录3.2.备份旧ssh相关的二进制程序文件3.3.安装gcc,并解压9.8p1的安装包3.4.执行openssh编译命令3.5.openssh编译报错示例

4.升级openssl4.1.检查并备份旧openssl相关文件4.2.解压安装包、执行编译安装命令4.3.创建软链接4.4.验证openssl版本

5.openssh续前缘升级操作5.1 执行openssh编译5.2.执行openssh安装命令5.3.复制sshd启动脚本,并调整配置文件5.4.启动sshd,并配置开机自启动操作5.5.验证openssh、openssl版本,并验证服务器登录、scp等操作是否正常

6.注意事项(报错补充)6.1.执行openssh编译命令可能遇到的报错及解决方法6.2.openssh9.8p1安装完成并启动后,如果服务器无法连接问题排查处理

总结


前言

2024年7月1日接到安全部门同事邮件通知,目前生产环境及测试环境服务器Openssh存在远程代码执行漏洞(CVE-2024-6387),漏洞等级高,且攻击者可以成功利用该漏洞获得远程root shell最高权限从而执行任意代码及命令,主要受影响版本为8.5p1<=Openssh<9.8p1,安全版本为openssh>=9.8p1。官方给出的修改建议是升级openssh版本至9.8p1,安全部门同事及项目侧领导邮件确认升级至9.8p1版本并对服务器添加hosts.allow、hosts.deny文件,仅允许通过堡垒机连接服务器。因此本文章主要以升级Openssh漏洞为主,对其操作进行记录,测试环境于生产环境的操作系统版本为centos7.8,x86_64架构,目前已均获得验证,升级openssh、openssl版本后服务器操作、相关业务等在一个多月内均未受到影响。


<code>提示:以下是本篇文章正文内容,下面案例可供参考

为什么升级openssh9.8时需要升级openssl?因为在升级openssh过程中报了一个错误,提示需要openssl版本至1.1.1,因此才有了下方升级openssl的操作。如果没有报该错误,则可不升级openssl,具体看下方演示

一、下载openssh、openssl二进制包

1、下载openssh源码包

[root@python1 ~]# wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz

--2024-08-14 11:02:15-- https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz

Resolving cdn.openbsd.org (cdn.openbsd.org)... 146.75.115.52, 2a04:4e42:15::820

Connecting to cdn.openbsd.org (cdn.openbsd.org)|146.75.115.52|:443... connected.

HTTP request sent, awaiting response... 200 OK

Length: 1910393 (1.8M) [application/octet-stream]

Saving to: ‘openssh-9.8p1.tar.gz’

38% [=========================================> 729,088 49.9KB/s eta 22s

2、下载openssl源码包

[root@python1 ~]# wget https://github.com/openssl/openssl/archive/refs/tags/OpenSSL_1_1_1s.tar.gz

二、升级步骤

需要升级的服务器尽可能通外网,因为涉及到zlib-devel、pam、gcc等包的安装,如果是纯内外环境,则需要提前下载好包并上传到内网环境在做操作。

1.系统开启telnet,防止意外导致shh无法连接

在需要升级的服务器上安装

[root@python1 ~]# yum install -y telnet-server

[root@python1 ~]# yum install -y xinetd

[root@python1 ~]# systemctl start telnet.socket && systemctl start xinetd.service

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

[root@python1 ~]# echo 'pts/0' >> /etc/securetty

[root@python1 ~]# echo 'pts/1' >> /etc/securetty

[root@python2 ~]# telnet 需要升级ssh的服务器ip

如下图所示

在这里插入图片描述

在这里插入图片描述

2.确认升级前openssh的版本

<code>[root@python1 ~]# ssh -V

OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017

在这里插入图片描述

3.升级openssh

3.1.备份旧ssh配置文件及目录

<code>[root@python1 ~]# mv /etc/ssh/ /home/ssh-bak

3.2.备份旧ssh相关的二进制程序文件

[root@python1 ~]# mv /usr/bin/ssh /usr/bin/ssh.bak

[root@python1 ~]# mv /usr/sbin/sshd /usr/sbin/sshd.bak

[root@python1 ~]# mv /etc/pam.d/sshd /etc/pam.d/sshd.old

3.3.安装gcc,并解压9.8p1的安装包

#如果服务器已安装过gcc,则忽略此步骤

[root@python1 ~]# yum -y install gcc

解压9.8p1 tar包

[root@python1 ~]# tar xf openssh-9.8p1.tar.gz -C /data/updateSsh/

3.4.执行openssh编译命令

[root@python1 openssh-9.8p1]# cd /data/updateSsh/openssh-9.8p1 && ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-md5-passwords

编译过程示例

报错示例

3.5.openssh编译报错示例

<code>如上3.4中报错示例图所示,编译安装openssh—9.8p1版本需要openssl版本到达1.1.1l,但此时我们的openssl版本是1.0.2k,如下图所示,因此需要先升级openssl

在这里插入图片描述

4.升级openssl

<code>如果遇到上述3.4和3.5的报错,则先执行该步骤,升级openssl

4.1.检查并备份旧openssl相关文件

[root@python1 ~]# whereis openssl

openssl: /usr/bin/openssl /usr/lib64/openssl /usr/include/openssl /usr/local/openssl /usr/share/man/man1/openssl.1ssl.gz

[root@python1 openssh-9.8p1]# mv /usr/bin/openssl /usr/bin/openssl.old

[root@python1 openssh-9.8p1]# mv /usr/lib64/openssl /usr/lib64/openssl.old

[root@python1 openssh-9.8p1]# mv /usr/include/openssl /usr/include/openssl.old

[root@python1 openssh-9.8p1]# mv /usr/local/openssl /usr/local/openssl.old

4.2.解压安装包、执行编译安装命令

[root@python1 updateSsh]#

[root@python1 openssl-1.1.1s]# ./config --prefix=/usr --shared && make && make install

openssl编译过程

在这里插入图片描述

4.3.创建软链接

<code>注意,如果有这两个文件就执行,如果没有报如下failed,忽略即可不影响

[root@python1 openssl-1.1.1s]# ln -s /usr/lib64/libcrypto.so.1.0.0 /usr/lib64/libcrypto.so.10

ln: failed to create symbolic link ‘ /usr/lib64/libcrypto.so.10’: No such file or directory

[root@python1 openssl-1.1.1s]# ln -s /usr/lib64/libssl.so.1.0.0 /usr/lib64/libssl.so.10

ln: failed to create symbolic link ‘ /usr/lib64/libssl.so.10’: No such file or directory

4.4.验证openssl版本

在这里插入图片描述

<code>至此,openssl升级完毕,接着升级openssh

5.openssh续前缘升级操作

5.1 执行openssh编译

因为在第三步升级openssh过程报错openssl版本低问题,因此在步骤四进行了升级openssl操作,升级完成后,接着重新升级openssh

[root@python1 openssh-9.8p1]# ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-md5-passwords

升级完成截图如下所示

注意事项:

如果再次执行上述编译安装命令,报如下错误,则需要先执行以下安装命令

configure: error: PAM headers not found

[root@python1 openssh-9.8p1]# yum -y install pam-devel.x86_64

在这里插入图片描述

<code> 安装完pam-devel依赖后,继续执行上述编译安装命令

[root@python1 openssh-9.8p1]# ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-md5-passwords

当出现以下截图所示,则说明openssh编译完成,接着执行make和make install命令

openssh编译完成示例图

5.2.执行openssh安装命令

<code>此步骤必须在5.1步骤中编译完成的基础上执行

[root@python1 openssh-9.8p1]# make && make install

执行完成后如下图所示

openssh安装完成示例图

5.3.复制sshd启动脚本,并调整配置文件

<code>[root@python1 openssh-9.8p1]# cp contrib/redhat/sshd.pam /etc/pam.d/sshd.pam

[root@python1 openssh-9.8p1]# cp contrib/redhat/sshd.init /etc/init.d/sshd

[root@python1 openssh-9.8p1]# echo 'X11Forwarding yes' >> /etc/ssh/sshd_config #

[root@python1 openssh-9.8p1]# echo "PermitRootLogin yes" >> /etc/ssh/sshd_config #允许root用户登录

[root@python1 openssh-9.8p1]# vim /etc/ssh/sshd_config

PasswordAuthentication yes #打开密码认证的注释

5.4.启动sshd,并配置开机自启动操作

[root@python1 openssh-9.8p1]# systemctl enable sshd

[root@python1 openssh-9.8p1]# systemctl restart sshd

5.5.验证openssh、openssl版本,并验证服务器登录、scp等操作是否正常

[root@python1 openssh-9.8p1]# ssh -V

OpenSSH_9.8p1, OpenSSL 1.1.1s 1 Nov 2022

在这里插入图片描述

<code>验证scp命令是否可用

在这里插入图片描述

<code>验证服务器能是否正常登录

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

<code>至此,服务器openssh升级至9.8版本全部完成

6.注意事项(报错补充)

6.1.执行openssh编译命令可能遇到的报错及解决方法

在这里插入图片描述

<code>如果遇到以上图中的报错,则使用该解决方法。执行完该步骤后,再次执行openssh编译命令即可

[root@python1 openssh-9.8p1]# yum install -y zlib-devel

在这里插入图片描述

<code>如果遇到以上图中的报错,则使用该解决方法。执行完该步骤后,再次执行openssh编译命令即可

[root@python1 openssh-9.8p1]# yum -y install openssl-devel

在这里插入图片描述

<code>如果遇到以上图中的报错,则使用该解决方法。执行完该步骤后,再次执行openssh编译命令即可

[root@python1 openssh-9.8p1]# yum -y install pam-devel.x86_64

6.2.openssh9.8p1安装完成并启动后,如果服务器无法连接问题排查处理

[root@python1 openssh-9.8p1]# systemctl stop firewalld.service

[root@python1 openssh-9.8p1]# systemctl disable firewalld.service

[root@python1 openssh-9.8p1]# vim /etc/selinux/config

设置为 SELINUX=disabled


总结

至此,openssh9.8p1版本升级完成,并且在测试环境升级完成后观察了一天并没有不可控因素产生,目前已升级到了生产环境,一切平稳允许,漏洞也已得到了解决。因此整理出本章博客内容,希望对大家有用



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。