CentOS7 下 修复 OpenSSH爆高危漏洞(CVE-2024-6387) 实践

打印 上一主题 下一主题

主题 688|帖子 688|积分 2064

检查体系、openssl和openssh的版本信息背景分析:

OpenSSH远程代码执行漏洞CVE-2024-6387允许未授权攻击者以root身份执行任意代码,发起升级至OpenSSH 9.8p1以上版本。
漏洞分析请阅读
 OpenSSH爆高危漏洞(CVE-2024-6387) (baidu.com)
要修复漏洞必要将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)
知乎上这篇文章先容的很详尽,感谢作者的辛苦付出,为我们提供了很大的帮助
下面是我实践的过程
远程升级OpenSSH的先创建新增账号和安装telnet

安装OpenSSH过程中必要删除OpenSSH和修改设置,因此假如是远程安装补丁的,牢记要首选安装telnetServer ,通过telnet 方式连接到远程,升级完成后再卸载调telnet。 另外telnet默认不允许root账号进行远程连接的,必要建一个新的账号(如 sshuser)进行远程(telnet连接后,可以通过su root 方式切换成 root ,进行后续的升级操作)
步调一、添加一个新临时账号sshuser(升级完后可以删除该账户)
#1 以root用户身份登录体系。运行以下下令创建新用户,例如用户名为sshuser
useradd -m -s /bin/bash sshuser
#2 为新用户设置暗码
passwd sshuser
#3 将新用户添加到sudo组中,以便拥有超级用户权限
usermod -aG wheel  sshuser
步调二、安装telnetServer
注意,假如没有管理员权限请切换至有管理员权限的账户执行或者下令前加上sudo
#1 安装 telnetServer
yum clean all
yum make cache
yum install -y telnet-server
#2 启动服务
systemctl start telnet.socket
#3 开机自启动
systemctl enable telnet.socket
#4 telnet 默认端口是23,假如想改成其他端口请查询资料自行尝试(我按照网上的修改两种设置文件的方式 都没有修改成功)
#5 使用客户端telnet连接centOS服务器(windows10下默认没有安装telnet客户端,可以查找windows10安装telnet客户端资料)
telnet 远程centOS服务器的ip地点,如 telnet 123.124.11.12
连接成功后,会提示您输入登录账户(root默认是不允许telnet远程登录),请使用创建的sshuser登录,然后输入暗码即可完成telnet的登录

#6 假如步调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的地点
https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/
https://link.zhihu.com/?target=https%3A//cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/
注意 下载的是openssh-9.8p1.tar.gz 源代码
https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz
 

依赖升级的OpenSSL的下载地点2:
Releases · openssl/openssl (github.com)
https://github.com/openssl/openssl/releases?page=2
OpenSSL有多个版本,centerOS7里默认的安装的OpenSSL的版本是1.02,要安装openssh-9.8p1必要升级到OpenSSL1.1.1 以上,

我安装的是 OpenSSL1.1.1W 

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

  1. # 查看CentOS系统版本信息
  2. cat /etc/redhat-release
  3. # 查看openssl版本信息
  4. openssl version
  5. # 查看openssh的版本信息
  6. ssh -V
复制代码
通过 ssh -V 可以查看OpenSSH 和OpenSSL的版本
 
2、安装依赖

  1. # 安装相关的依赖项,如有遗漏再次安装
  2. yum -y install gcc pam-devel zlib-devel openssl-devel net-tools
复制代码
由于centos资源和网络原因,安装依赖过程中大概会因为资源问题报not found 错误,

 
必要修改 /etc/yum.repos.d/Centos-Base.repo的Centos-Base.repo 资源地点,然后再次执行安装依赖下令yum -y install gcc pam-devel zlib-devel openssl-devel net-tools,成功安装依赖的效果如下

 
 
3、安装openssl-1.1.1w版本

由于openssh9.7p1要求openssl版本大于即是1.1.1,因此必要升级安装openssl。
3.1、解压openssl-1.1.1w压缩包

  1. # 将openssl-1.1.1w解压到/usr/local目录下
  2. Tar zxvf /home/test/openssl-1.1.12.tar.gz –C /usr/local/
  3. # 查看解压后目标目录情况
  4. ll /usr/local/ | grep openssl
  5. # 进入openssl-1.1.1w目录下
  6. cd /usr/local/openssl-1.1.1w/
复制代码
3.2、安装openssl前预备

  1. # 创建安装目录
  2. mkdir /opt/openssl
  3. # 安装前查看openssl详细版本信息
  4. openssl version
复制代码
3.3、编译安装openssl-1.1.1w

  1. # 配置编译和安装过程,"--prefix=" 选项配置安装目录
  2. ./config --prefix=/opt/openssl
  3. # 构建程序以及所需的指令和依赖关系
  4. make
  5. # 安装编译好的openssl-1.1.1w
  6. make install
  7. # 备注:以上三步必须没有出现报错(error),才可以继续下一步,全部三步无报错才能视为安装成功
复制代码
 以上三步必须没有出现报错(error),才可以继续下一步,全部三步无报错才能视为安装成功;
遇到错误重新检查错误,直到没有报错再进行后续步调。
3.4、更新lib文件

  1. # 检查openssl-1.1.1w所需要的函数库
  2. ldd /opt/openssl/bin/openssl
  3. # 添加openssl-1.1.1w的库文件路径到ld.so.conf
  4. echo "/opt/openssl/lib" >> /etc/ld.so.conf
  5. # 更新系统函数库库
  6. ldconfig –v
  7. # 绝对路径查看openssl版本
  8. ldd /opt/openssl/bin/openssl
复制代码
3.5、更新bin文件

  1. # 查看旧版本的openssl命令路径
  2. which openssl
  3. # 重命名为openssl.old
  4. mv /bin/openssl /bin/openssl.old   #重命名openssl文件
  5. # 使用软连接的方式更新openssl命令
  6. ln -s /opt/openssl/bin/openssl /bin/openssl
  7. # openssl命令查看版本呢
  8. openssl version
复制代码
 
4、编译安装openssh9.8p1

4.1、解压缩包查看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


4.2、编译安装openssh9.7p1

编译前请先创建必要的目录
mkdir -p /usr/local/openssh
  1. # 配置编译和安装过程,"--prefix=" 配置安装目录,"--sysconfdir=" 配置文件路径,"--with-ssl-dir=" openssl的安装路径
  2. ./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
  3. # 构建程序以及所需的指令和依赖关系
  4. make
  5. # 安装编译好的openssh9.8p1
  6. make install
  7. # 备注:以上三步必须没有出现报错(error),才可以继续下一步,全部三步无报错才能视为安装成功
复制代码
以上三步必须没有出现报错(error),才可以继续下一步,全部三步无报错才能视为安装成功 ;

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

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

参考知乎的修改sshd.init 方式修改
下令 “cat -n  文件名 |grep 查询关键字” 定位筛选设置文件中 关键字,-n返回定位的行
  1. # 从源码目录下复制sshd.init到/etc/init.d/
  2. cp /usr/local/openssh-9.8p1/contrib/redhat/sshd.init /etc/init.d/
  3. ## 查看并修改SSHD的新路径,将新的openssh安装路径更新
  4. cat /etc/init.d/sshd.init | grep SSHD
  5. sed -i "s/SSHD=\/usr\/sbin\/sshd/SSHD=\/usr\/local\/openssh\/sbin\/sshd/g" /etc/init.d/sshd.init
  6. cat /etc/init.d/sshd.init | grep SSHD
  7. ## 查看并修改ssh-keygen的新路径,将新的ssh-keygen安装路径更新
  8. cat -n /etc/init.d/sshd.init | grep ssh-keygen
  9. sed -i "s#/usr/bin/ssh-keygen -A#/usr/local/openssh/bin/ssh-keygen -A#g" /etc/init.d/sshd.init
  10. 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)

  1. # 开启允许X11转发
  2. echo 'X11Forwarding yes' >> /etc/ssh/sshd_config
  3. # 开启允许密码验证
  4. echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config
复制代码
#修改允许root远程,并修改默认端口(特别紧张!!!,修改xxxx为现实端口)

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

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

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


4.5、启动openssh,并设置开机启动

  1. # 复制ssh的相关命令
  2. cp -arp /usr/local/openssh/bin/* /usr/bin/
  3. # 启动sshd服务
  4. /etc/init.d/sshd.init
  5. # 查看版本
  6. ssh –V
  7. # 添加开机启动
  8. Chmod +x /etc/rc.d/rc.local
  9. 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服务

  1. # 确认openssh升级成功,连接无异常后卸载telnet服务
  2. yum -y remove telnet telnet-server
复制代码
6、删除为telnet新建的账户
userdel -r sshuser 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

科技颠覆者

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表