背景概要

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.gzcd 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服务,关闭方法请看上面“修复准备”

完结撒花^_^

centos7升级openssh至openssh8.7.p1、openSSL至openssl3.0.3相关推荐

  1. CentOS7升级openssh至8.0

    参考资料:最全CentOS7升级OpenSSH方案 以下这些包自行网上下载,或者虚拟机装一个最小系统,使用yumdownload下载这些资源 先将这些包上传到服务器,以免卸载openssl之后无法上传 ...

  2. centos7升级openssh

    注意: openssl版本(openssl版本要大于1.0.1,zlib版本要大于1.1.4) 一.安装依赖包 yum -y install gcc make perl # zlib zlib-dev ...

  3. linux openssh升级8.1,Centos7利用rpm升级OpenSSH到openssh-8.1p1版本

    由于近期安全事故频发,打算把机器OpenSSH升级到最新版本,找了一圈,发现分享的rpm包就到7.4版本,最新版已经到8.1.p1,所以博客自编译一个openssh-8.1p1的rpm包进行分享. 检 ...

  4. RedHat5 升级OpenSSH服务

    为什么80%的码农都做不了架构师?>>>    需求:漏洞整改涉及到升级OpenSSH服务,服务器在内网无法使用yum源等.由于是生产环境,不可随便尝试,以下内容是在本地虚拟机模拟多 ...

  5. CentOS7升级openssh8.0及升级后无法root登陆处理

    openssh7.4自带一些已存在的漏洞.所以公司决定升级openssh到8.0 一.升级openssl(开版本需要有时候可以不升级) 1.安装依赖:(这里可以先挂载安装镜像到YUM进行安装也可以) ...

  6. openssh rpm包_100台CentOS7要升级OpenSSH怎么办?

    背景 现在有 100 台 Centos7 需要升级 OpenSSH 到 8.3,怎么办呢?一台台的操作显然不符合我摸鱼的风格,既然每台操作都一样,Ansible Roles 就有用武之地了. 正常升级 ...

  7. linux7.3ssh登陆不上,centos7.3升级openssh到7.7p1后root用户无法登陆的问题

    主机系统centos7.3.1161升级openssh到当前最新版7.7p1以后使用root用户无法登陆,一直提示用户名密码错误(实际上用户名密码是对的).下面对这个坑进行说明. step 1 .升级 ...

  8. 100台CentOS7要升级OpenSSH怎么办?

    100台CentOS7要升级OpenSSH怎么办? https://www.toutiao.com/i6898152133523227144/?tt_from=weixin&utm_campa ...

  9. Centos7.5 升级openssh到9.0p1

    背景: 公司定期的漏洞安全扫描发现系统服务存在问题,需要升级OpenSSH. [root@somsapidev ~]# cat /etc/redhat-release CentOS Linux rel ...

最新文章

  1. 面试命中率 90% 的点 :MySQL 锁
  2. leetcode算法题--打家劫舍II
  3. C语言实现的一个简单的HTTP程序
  4. 控制台浏览器代码实战
  5. elementUI vue table status的状态列颜色变化和操作列状态显示(停用, 启用)
  6. Taro+react开发(89):封装为一个函数渲染
  7. 开启php缩略图,PHP生成缩略图
  8. oracle配置控制文件快照的位置以及名称为,oracle的备份与恢复
  9. andriod socket开发问题小结
  10. app开发团队人员构成怎么分配?国内著名的app开发团队有哪些
  11. Android TextInputLayout 实现动画登录界面
  12. easyUI datagrid 重复发送URL请求
  13. Ubuntu16.04安装teamver14.1.3
  14. Android开发——回调函数实例
  15. 如何优化cocos2d的使用内存
  16. java生日显示生肖星座_根据生日或者日期 获取 生肖和星座的 Java代码
  17. 华为机试题(python版本)
  18. php代码出现notice,PHP提示Notice: Undefined variable的解决办法
  19. 2020-11-04编译器下载安装及使用
  20. spfa判断负环( 负环判定 + spfa )

热门文章

  1. java:引用数据类型
  2. 之前是否包括当天_搬家当天必知的流程与搬运细节
  3. android 动态显示多张图片,美图秀秀上线“魔法照片”功能:静态图片秒变动态大片!...
  4. java 实现wordcount_用JAVA实现WordCount程序
  5. 表白html苹果电脑,苹果也玩彩蛋 用程序员的方式告白果粉
  6. 苹果Mac怎样优化电池续航能力?
  7. QGIS 3.10 栅格样式与栅格分析
  8. 一加7pro 鸿蒙,屏幕亮了!一加7 Pro海外版发布:2K分辨率 90Hz刷新率
  9. android增删功能代码,Android SQLite增删查改实例代码部分
  10. 按钮控制动画的暂停与开始