centos7升级openssh至openssh8.7.p1、openSSL至openssl3.0.3

背景概要

OpenSSH(OpenBSD Secure Shell)是 Openbsd 计划组的一套用于安全访问远程计算机 的连接工具。该工具是 SSH 协议的开源实现,支持对所有的传输进行加密,可有效阻止窃听、连接劫持以及其他网络级的攻击。
OpenSSH 8.3p1 及之前版本中的 scp 的 scp.c 文件存在操作系统命令注入漏洞。该漏洞 源于外部输入数据构造操作系统可执行命令过程中,网络系统或产品未正确过滤其中的特殊 字符、命令等。攻击者可利用该漏洞执行非法操作系统命令。
绿盟对我司的服务器进行漏洞扫描,扫描漏洞说明centos7系统本身自带的openssh服务版本过低,openssh也会暴露出openssl相关漏洞,所以要升级centos系统openssl及openssh服务修复漏洞。

注意事项

由于升级openssh9.0.p1会影响到当前堡垒机的兼容性,目前需要升级到openssh8.7.p1

下载地址

openssl下载地址
官方下载链接:https://www.openssl.org/source/
openssh下载地址
1、官方下载链接:https://www.openssh.com/openbsd.html
阿里云镜像下载链接:https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/

修复注意事项

1.注意服务器防火墙23端口是否打开
2.升级前,建议通过白名单方式,先打开 TELET 端口,避免升级 OPENSSH 失败 无法连接服务器
3.升级需要做好 openssh 备份

系统版本信息

openssl版本:
当前版本:OpenSSL 1.0.2k-fips
更新版本:OpenSSL3.0.3
openssh版本:
当前版本:OpenSSH_6.6.1p1
更新版本:OpenSSH_8.7p1
当前版本
更新版本

修复准备(telnet使用说明)

查看服务器防火墙问题

# telnet: connect to address ip: No route to host是防火墙的问题
开启防火墙服务
systemctl start firewalld.service
关闭防火墙服务
systemctl stop firewalld.service
# 查看防火墙某个端口是否打开
firewall-cmd --query-port=23/tcp
#查看已开启的防火墙端口
firewall-cmd --zone=public --list-ports
# 开放服务器的23端口
firewall-cmd --permanent --add-port=23/tcp
firewall-cmd --reload
# 关闭防火墙某个端口
firewall-cmd --permanent --remove-port=23/tcp
firewall-cmd --reload

开启telnet端口,避免升级 OPENSSH 失败 无法连接服务器

# 防止ssh中断无法登录的情况
#查看是否安装telnet服务
yum list telnet*
yum list xinetd

#安装Telnet服务并配置
yum -y install telnet telnet-server xinetd

#启动telnet服务
systemctl restart xinetd
systemctl restart telnet.socket

#查看telnet端口是否开启
rpm -ivh nmap-6.40-19.el7.x86_64
nmap 127.0.0.1
#23/tcp   open  telnet

#尝试telnet
telnet ip 23              


#关闭telnet服务(升级更新完毕之后要返回来关闭telnet服务哦^_^)
systemctl stop xinetd
systemctl stop telnet.socket
systemctl stop system-telnet.slice

#卸载telnet服务(服务也可以选择不卸载)
yum remove telnet telnet-server xinetd

openssl安装进行时

1.查看当前openssl版本
注意这个OPENSSLDIR这个路径就是你openssl的安装路径,改成别的安装openssh时会报错;

openssl version   
openssl version -a   #这个更加详细

在这里插入图片描述
2.下载openssl3.0.3版本

cd /home/runtrend    #可以换到你自己需要存放压缩包文件的目录下
wget --no-check-certificate https://www.openssl.org/source/openssl-3.0.3.tar.gz
# 这个错误涉及到 OpenSSL 官方站点使用的 Let's Encrypt CA 证书,1.0.2 版本的 OpenSSL 将在验证网站证书时报错,而当前 CentOS 7.9中默认包含的 OpenSSL 版本是 1.0.2k,所以会出错。使用--no-check-certificate这个参数来跳过这个问题

3.解压并进入openssl目录,进行编译安装

 tar -xvf openssl-3.0.3.tar.gz
 cd openssl-3.0.3
 # 执行编译的时候会有一个缺少IPC/Cmd.pm的错误(解决方法在make下面)
./config shared -fPIC --openssldir=/etc/pki/tls --prefix=/etc/pki/tls zlib   #编译安装目录最好都选择openssl查看版本出现的安装路径
make && make install     # 编译安装

错误解决方法,执行完之后重新进入./config编译

报错原因:缺少IPC/Cmd.pm模块
安装perl-CPAN
[root@centos7 ~]# yum install -y perl-CPAN
进入CPAN的shell模式,首次进入需要配置shell,按照提示操作即可(本人perl小白,全部选择默认配置,高手请根据提示自行选择)
[root@centos7 ~]# perl -MCPAN -e shell
在shell中安装缺少的模块
cpan[1]> install IPC/Cmd.pm
安装成功后,重新编译OpenSSL即可

4.备份当前的openssl

mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak //这个有些场景不存在

5.配置使用新版本

ln -s /etc/pki/tls/bin/openssl /usr/bin/openssl
ln -s /etc/pki/tls/include/openssl /usr/include/openssl

6.配置libssl.so.3以及libcrypto.so.3

ln -sf /etc/pki/tls/lib64/libssl.so.3 /usr/lib64/libssl.so.3
ln -sf /etc/pki/tls/lib64/libcrypto.so.3 /usr/lib64/libcrypto.so.3

7.配置生效

echo “/etc/pki/tls/lib” >> /etc/ld.so.conf
ldconfig -v

到这里openssl已经更新好了,查看openssl版本,可以看到已经是最新版本了。
在这里插入图片描述
使用ssh -V查看版本,发现还是1.0.2所以需要根据新升级的openssl重新编译openssh
在这里插入图片描述

openssh安装进行时

1.下载openssh-8.7.1压缩包

cd /home/runtrend/       # 进入到用户目录下     
wget https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-8.7p1.tar.gz   #下载openssh-8.7版本
# 没有wget的话就yum install -y wget

2.安装基础依赖包

yum install distro-sync rpm-build zlib-devel openssl-devel gcc perl-devel pam-devel xmkmf libXt-devel gtk2-devel make -y

3.开始编译安装新版本的openssh

编译安装说明
# --prefix=PREFIX        #安装到哪个路径,默认[/usr/local]
# --sysconfdir=DIR        #配置路径,默认[PREFIX/etc] 
# --mandir=DIR           #帮助文档路径
# -with-md5-passwords    #开启使用MD5的密码
# --with-zlib=PATH        #指定zlib的安装路径
# --with-ssl-dir=PATH     #指定openssl的安装路径

tar -zxvf openssh-8.7p1.tar.gz
cd openssh-8.7p1
./configure --prefix=/usr/local/openssh8.7 --sysconfdir=/etc/ssh8.7/ --with-md5-passwords --mandir=/usr/share/man --with-zlib --with-pam --with-ssl-dir=/etc/pki/tls/
make && make install

4.备份旧版本的openssh,这里推荐两个备份都进行(备份系统原ssh相关命令)

备份一:
cp /usr/bin/ssh /usr/bin/ssh_bak
cp /usr/sbin/sshd /usr/sbin/sshd_bak
cp /etc/ssh/sshd_config /etc/ssh/sshd_config_bak

备份二:
mkdir /usr/bin/sshbak7.4/
mkdir /usr/sbin/sshbak7.4/
mkdir /usr/libexec/opensshbak7.4/
mv /usr/libexec/openssh/sftp-server  /usr/libexec/opensshbak7.4/
mv /usr/bin/ssh-copy-id /usr/bin/sshbak7.4/
mv /usr/bin/ssh-add /usr/bin/sshbak7.4/
mv /usr/bin/ssh-agent /usr/bin/sshbak7.4/
mv /usr/bin/ssh-keygen /usr/bin/sshbak7.4/
mv /usr/bin/ssh-keyscan /usr/bin/sshbak7.4/
mv /usr/bin/scp /usr/bin/sshbak7.4/
mv /usr/bin/sftp /usr/bin/sshbak7.4/
mv /usr/bin/ssh /usr/bin/sshbak7.4/
mv /usr/sbin/sshd /usr/sbin/sshbak7.4/

5.查看编译安装是否成功

/usr/local/openssh8.7/bin/ssh -V    或者 ssh -V 
# 如果使用的是第一种备份,ssh -V不会报错
# ssh -V:OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013
# /usr/local/openssh8.7/bin/ssh -V:OpenSSH_8.7p1, OpenSSL 1.0.2k-fips  26 Jan 2017
# 如果使用的是第二种备份,ssh -V是错误的
# /usr/local/openssh8.7/bin/ssh -V:OpenSSH_8.7p1, OpenSSL 1.0.2k-fips  26 Jan 2017

6.替换ssh命令与常用工具

cd /home/runtrend/openssh-8.7p1/     ##编译包解压的目录
# 如果是备份一的话,需要复制这些文件需要被覆盖掉,备份二的话不需要
cp -p sftp-server  /usr/libexec/openssh/
cp contrib/ssh-copy-id /usr/bin/ssh-copy-id
cp -p /usr/local/openssh8.7/bin/* /usr/bin/
cp -p /usr/local/openssh8.7/sbin/* /usr/sbin/


#在这里使用which ssh查看一下服务
which ssh
# /usr/bin/ssh  #是这个路径的话下面不用进行了
# /usr/local/bin/ssh   #是这个路径的话,需要在执行下面操作
# 是其他路径的话,更改cp后面的地址为which查到的地址就好
cp contrib/ssh-copy-id /usr/local/bin/
cp -p /usr/local/openssh8.7/bin/* /usr/local/bin/
cp -p /usr/local/openssh8.7/sbin/* /usr/local/bin/

7.在这里在输入ssh -V查看版本,查看是否更新到最新版本了,没有更新最新版本就是第6步出现问题了

8.SSH重启之前可以先测试配置文件是否有问题,防止重启SSH失败,远程连接断了,如果是本地终端连接可以直接重启

/usr/local/openssh8.7/sbin/sshd -t -f /etc/ssh/sshd_config 

9.配置文件错误解决
在这里插入图片描述

当遇到文件权限错误的时候,说明秘钥文件权限太开放,修改秘钥的权限
chmod 600 /etc/ssh/ssh_host_rsa_key
chmod 600 /etc/ssh/ssh_host_ecdsa_key
chmod 600 /etc/ssh/ssh_host_ed25519_key

在这里插入图片描述

# 然后还有一个说要修改配置文件的问题,将这个提示注销掉就可以了(不修改也是可以的,不会有报错)
vi /etc/ssh/sshd_config
# 注释掉这三行
# GSSAPIAuthentication yes
# GSSAPICleanupCredentials no
# UsePrivilegeSeparation sandbox		# Default for new installations.

在这里插入图片描述

当遇到错误的SSH2密码规范时,需要使用ssh -Q cipher 或者ssh -Q mac来修改
# /etc/ssh/sshd_config line 155: Bad SSH2 cipher spec 'aes128-ctr,aes192-ctr'
#/etc/ssh/sshd_config line 156: Bad SSH2 mac spec 'hmac-sha1,hmac-ripemd160'.
#这里的内容表示是最后面添加的MACs的内容有错误,可能是ssh版本不一致或者是什么导致的,我们要修改的就是这段内容
#如果sshd -T提示的错误是 Bad SSH2 mac spec,就使用ssh -Q mac查看然后修改Macs的内容
#如果错误是Bad SSH2 cipher spe,就使用ssh -Q cipher,然后修改配置文件中的cipher的内容
#将查出来的内容新增到后面就好了,下面的是我的服务器的密码规范
Ciphers 3des-cbc,aes128-cbc,aes192-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com
MACs hmac-sha1,hmac-sha1-96,hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-md5-96,umac-64@openssh.com,umac-128@openssh.com,hmac-sha1-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-md5-etm@openssh.com,hmac-md5-96-etm@openssh.com,umac-64-etm@openssh.com,umac-128-etm@openssh.com

10.重启sshd服务

cp /home/runtrend/openssh-8.7p1/contrib/redhat/sshd.init /etc/init.d/sshd    #复制ssh的启动程序
systemctl daemon-reload              #重启守护进程服务
systemctl enable sshd.service        #将sshd设置为开机自启动状态
mv /usr/lib/systemd/system/sshd.service /usr/sbin/sshbak6.6   #移动已经存在的旧版本sshd服务
systemctl daemon-reload              #重新执行重启守护进程服务
systemctl restart sshd.service       #重启sshd服务
systemctl status sshd.service        #查看sshd服务状态

重启sshd服务在输入ssh -V就可以看到openssh已经更新到最新版本了,到这里就结束啦。
在这里插入图片描述

到这里要关闭掉telnet服务,关闭方法请看上面“修复准备”

完结撒花^_^

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值