OpenSSH漏洞 升级OpenSSH

检查系统、openssl和openssh的版本信息背景说明:
OpenSSH远程代码执行漏洞CVE-2024-6387允许未授权攻击者以root身份执行任意代码,建议升级至OpenSSH 9.8p1以上版本。

OpenSSH爆高危漏洞(CVE-2024-6387)

要修复漏洞需要将OpenSSH 升级到9.8,

Ubuntu 的软件源已更新:

https://ubuntu.com/security/notices/USN-6859-1

Debian 11 12已更新:
https://security-tracker.debian.org/tracker/CVE-2024-6387

CentOS 没有相应的可直接更新的补丁,需要自己进行升级openssh到9.8(注意版本到最新)

CentOS7的修复 参考 进行升级安装Openssh9.8P,升级过程是使用源码编译,需要谨慎细心,不怕过程繁琐,参考知乎上的升级教程,并补充了telnet部分的细节内容,写一篇文章给大家一个参考和思路。

重点参考
CentOS7升级ssh服务(三):安装openssh9.7p1 - 知乎 (zhihu.com)

知乎上这篇文章介绍的很详尽,感谢作者的辛苦付出,为我们提供了很大的帮助
参考 连接 https://blog.csdn.net/careybobo/article/details/140186096

远程升级OpenSSH的先创建新增账号和安装telnet
安装OpenSSH过程中需要删除OpenSSH和修改配置,因此如果是远程安装补丁的,切记要首选安装telnetServer ,通过telnet 方式连接到远程,升级完成后再卸载调telnet。 另外telnet默认不允许root账号进行远程连接的,需要建一个新的账号(如 sshuser)进行远程(telnet连接后,可以通过su root 方式切换成 root ,进行后续的升级操作)

步骤一、添加一个新临时账号sshuser(升级完后可以删除该账户)

以root用户身份登录系统。运行以下命令创建新用户,例如用户名为sshuser

useradd -m -s /bin/bash sshuser

为新用户设置密码

passwd sshuser

将新用户添加到sudo组中,以便拥有超级用户权限

usermod -aG wheel  sshuser

步骤二、安装telnetServer

注意,如果没有管理员权限请切换至有管理员权限的账户执行或者命令前加上sudo

安装 telnetServer

yum clean all

yum make cache

yum install -y telnet-server

启动服务

systemctl start telnet.socket

开机自启动

systemctl enable telnet.socket

telnet 默认端口是23,如果想改成其他端口请查询资料自行尝试

使用客户端telnet连接centOS服务器(windows10下默认没有安装telnet客户端,可以查找windows10安装telnet客户端资料)

telnet 远程centOS服务器的ip地址,如 telnet XXXXX

连接成功后,会提示您输入登录账户(root默认是不允许telnet远程登录),请使用创建的sshuser登录,然后输入密码即可完成telnet的登录

如果步骤5远程连接失败,可能是防火墙阻止了23端口,请检查防火墙状态,开放防火墙后23端口后再试

查看防火墙状态

systemctl status firewalld

开放23端口(升级完成后可以屏蔽23端口)

firewall-cmd --zone=public --add-port=23/tcp --permanent

重新加载防火墙配置

firewall-cmd --complete-reload

查询防火墙23端口状态

firewall-cmd --query-port=23/tcp

返回yes表示,远程访问端口23可以访问了。

重复#5的步骤,使用telnet进行远程连接centerOS服务器,如果成功可以放心的进行远程升级OpenSSH版本了。(实践证明升级过程中SSH仍然可以使用,可能会在你端口SSH连接时或者重启服务时SSH才会失效)

当面操作CentOS或者是远程桌面进行操作CentOS进行升级的朋友可以忽略前面的步骤进行直接进行升级。

CentOS7升级ssh服务到9.8p1
准备工作:
注意,漏洞补丁要求升级到openssh9.8p1

下载并上传openssh9.8p1和openssl-1.1.1w

下载地址1:openssh-9.8p1的地址

注意 下载的是openssh-9.8p1.tar.gz 源代码

https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz

依赖升级的OpenSSL的下载地址2:

OpenSSL有多个版本,centerOS7里默认的安装的OpenSSL的版本是1.02,要安装openssh-9.8p1需要升级到OpenSSL1.1.1 以上,安装OpenSSL1.1.1W

https://github.com/openssl/openssl/releases/tag/OpenSSL_1_1_1w

在这里插入图片描述

查看centos7、ssh以及openssl的版本信息

查看CentOS系统版本信息

cat /etc/redhat-release

查看openssl版本信息

openssl version

查看openssh的版本信息

ssh -V

通过 ssh -V 可以查看OpenSSH 和OpenSSL的版本

2、安装依赖

安装相关的依赖项,如有遗漏再次安装

yum -y install gcc pam-devel zlib-devel openssl-devel net-tools

由于centos资源和网络原因,安装依赖过程中可能会因为资源问题报not found 错误,

也就是换源 详情看上一篇博客 我用的 http://mirrors.ustc.edu.cn/centos/7/os/x86_64/

需要修改 /etc/yum.repos.d/Centos-Base.repo的Centos-Base.repo 资源地址,然后再次执行安装依赖命令

yum -y install gcc pam-devel zlib-devel openssl-devel net-tools

安装openssl-1.1.1w版本

由于openssh9.7p1要求openssl版本大于等于1.1.1,因此需要升级安装openssl。

解压openssl-1.1.1w压缩包

将openssl-1.1.1w解压到/usr/local目录下

tar zxvf openssl-1.1.12.tar.gz -C /usr/local/

查看解压后目标目录情况

ll /usr/local/ | grep openssl

进入openssl-1.1.1w目录下

cd /usr/local/openssl-1.1.1w/

3.2、安装openssl前准备

创建安装目录

mkdir /opt/openssl

安装前查看openssl详细版本信息

openssl version

编译安装openssl-1.1.1w

配置编译和安装过程,“–prefix=” 选项配置安装目录

./config --prefix=/opt/openssl
make
make install

备注:以上三步必须没有出现报错(error),才可以继续下一步,全部三步无报错才能视为安装成功
以上三步必须没有出现报错(error),才可以继续下一步,全部三步无报错才能视为安装成功
遇到错误重新检查错误,直到没有报错再进行后续步骤。

更新lib文件

#检查openssl-1.1.1w所需要的函数库
ldd /opt/openssl/bin/openssl
#添加openssl-1.1.1w的库文件路径到ld.so.conf
echo "/opt/openssl/lib" >> /etc/ld.so.conf
#更新系统函数库库 
ldconfig –v 
#绝对路径查看openssl版本
ldd /opt/openssl/bin/openssl

更新bin文件

#查看旧版本的openssl命令路径
which openssl
#重命名为openssl.old
mv /bin/openssl /bin/openssl.old   #重命名openssl文件
#使用软连接的方式更新openssl命令
ln -s /opt/openssl/bin/openssl /bin/openssl
#openssl命令查看版本呢
openssl version

编译安装openssh9.8p1

解压缩包查看INSTALL文件
使用telnet登录centos7(执行卸载后,仍然可以通过ssh连接进行远程操作)

卸载openssh的rpm包

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

解压缩openssh9.8p1包到目标目录

tar zxvf /home/test/openssh9.8p1.tar.gz -C /usr/local

进入openssh9.8p1的源码目录

cd /usr/local/openssh-9.8p1/

安装前查看一下安装文件INSTALL(建议看一下)

more INSTALL

编译安装openssh9.7p1

编译前请先创建需要的目录

mkdir -p /usr/local/openssh
#配置编译和安装过程,"--prefix=" 配置安装目录,"--sysconfdir=" 配置文件路径,"--with-ssl-dir=" openssl的安装路径
./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-pam --with-ssl-dir=/opt/openssl --with-md5-passwords --mandir=/usr/share/man --with-zlib=/usr/local/zlib --without-hardening
#构建程序以及所需的指令和依赖关系
make
#安装编译好的openssh9.8p1
make install
 

备注:以上三步必须没有出现报错(error),才可以继续下一步,全部三步无报错才能视为安装成功
以上三步必须没有出现报错(error),才可以继续下一步,全部三步无报错才能视为安装成功 ;

如有异常错误,请认真核对步骤,重新执行,直到全部成功

复制并修改启动sshd.init脚本

参考知乎的修改sshd.init 方式修改
命令 “cat -n 文件名 |grep 查询关键字” 定位筛选配置文件中 关键字,-n返回定位的行

#从源码目录下复制sshd.init到/etc/init.d/
cp /usr/local/openssh-9.8p1/contrib/redhat/sshd.init /etc/init.d/
#查看并修改SSHD的新路径,将新的openssh安装路径更新
cat /etc/init.d/sshd.init | grep SSHD
sed -i "s/SSHD=\/usr\/sbin\/sshd/SSHD=\/usr\/local\/openssh\/sbin\/sshd/g" /etc/init.d/sshd.init
cat /etc/init.d/sshd.init | grep SSHD
#查看并修改ssh-keygen的新路径,将新的ssh-keygen安装路径更新
cat -n /etc/init.d/sshd.init | grep ssh-keygen
sed -i "s#/usr/bin/ssh-keygen -A#/usr/local/openssh/bin/ssh-keygen -A#g" /etc/init.d/sshd.init
cat -n /etc/init.d/sshd.init | grep ssh-keygen

方式二、开启两个远程窗口,一个用 cat -n /etc/init.d/sshd.init | grep xxxx关键字 定位到行数及查询的内容,配合 vi /etc/init.d/sshd.init 直接修改需要修改的配置

4.4、修改配置文件(sshd_config)

开启允许X11转发

echo 'X11Forwarding yes' >> /etc/ssh/sshd_config 

开启允许密码验证

echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config 
#修改允许root远程,并修改默认端口(特别重要!!!,修改xxxx为实际端口)

sudo echo "Port xxxx" >> /etc/ssh/sshd_config

sudo echo "PermitRootLogin yes" >> /etc/ssh/sshd_config

#用cat -n检查一下配置,如果需要修改安装上面的两条修改命令修改:访问端口和是否运行root登录

启动openssh,并设置开机启动

#复制ssh的相关命令
cp -arp /usr/local/openssh/bin/* /usr/bin/
#启动sshd服务
/etc/init.d/sshd.init start

启动报错

permissions 0640 for ‘/etc/ssh/ssh_host_rsa_key’ are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Unable to load host key “/etc/ssh/ssh_host_rsa_key”: bad permissions
Unable to load host key: /etc/ssh/ssh_host_rsa_key

执行以下命令

chmod 0600 /etc/ssh/ssh_host_rsa_key
chmod 0600 /etc/ssh/ssh_host_ecdsa_key
chmod 0600 /etc/ssh/ssh_host_ed25519_key

查看版本

ssh -V

添加开机启动

chmod +x /etc/rc.d/rc.local
echo "/etc/init.d/sshd.init start" >> /etc/rc.d/rc.local 

4.6、测试openssh连接
使用ssh协议连接centos7,检查openssh9.7p1服务

重启系统后ssh协议登录centos7,检查openssh9.7p1自动启动,是否成功登录

5、卸载telnet服务

确认openssh升级成功,连接无异常后卸载telnet服务

yum -y remove telnet telnet-server
  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值