linux源码升级openssh-9.8p1

一、升级背景

#OpenSSH 出现高危远程代码执行漏洞,影响超过 1400 万台暴露在公网上的服务器。该漏洞是 2006 年的漏洞回归,即在 2006 年被修复但在 2020 年更改内容的时候再次引入,攻击者借助该漏洞可以获得整个系统的控制权。#

受影响的 OpenSSH 版本:

  • 低于 4.4p1 版 (不含此版本):受影响
  • 高于 4.4p1 但低于 8.5p1 (不含此版本):不受影响
  • 8.5p1 及后续版本到 9.8p1 (不含此版本):受影响

该漏洞的潜在影响:

攻击者利用此漏洞实际上可以以最高权限执行任意代码,因此一旦得手就可以获得整个系统和服务器的控制权,无论是安装恶意软件还是窃取数据都是轻轻松松完成。

同时 Qualys 还提到攻击者还可以借助此漏洞获得的权限绕过防火墙、入侵监测系统和日志记录机制等关键安全机制,即可以通过这些方式避免被发现并隐藏其活动。

二、环境介绍

环境介绍

系统版本

centos 7.9

升级openssh版本

openssh-9.8p1

openssh-9.8p1依赖

openssl-1.1.1以上

yum源

阿里云yum源

三、编译安装openssl-1.1.1

openssh9.4及以上版本必须要openssl-1.1.1,低于此版本openssh无法完成编译。

1、编译安装openssl软件

①上传openssl-1.1.1,源码包

源码下载:https://www.openssl.org/source/openssl-1.1.1t.tar.gz

自行上传

②安装源码依赖包

yum -y install gcc gcc-c++ zlib zlib-devel openssl openssl-devel pam-devel perl perl-Test-Simple

③解压源码包

tar -zxvf openssl-1.1.1t.tar.gz

④编译

cd openssl-1.1.1t/

./config --prefix=/usr/local/openssl shared -fPIC

⑤构建软件生成项目依赖关系

make depend

验证程序稳定、正确性

make tests

⑥安装

make && make install

2、配置安装的openssl环境

①查看函数库,检查缺少的函数库

ldd /usr/local/openssl/bin/openssl

添加缺少的函数库

echo "/usr/local/openssl/lib" >> /etc/ld.so.conf

或者配置环境变量

export OPENSSL_ROOT_DIR=/usr/local/openssl

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$OPENSSL_ROOT_DIR/lib

②更新函数库

ldconfig -v

再次检查函数库是否缺少

ldd /usr/local/openssl/bin/openssl

③检查源码安装的版本

] # /root/openssl-1.1.1t/apps/openssl version (此为源码安装包的openssl程序)

OpenSSL 1.1.1t 7 Feb 2023

或者使用编译安装后的openssl路径

/usr/local/openssl/bin/openssl version (安装的openssl路径程序)

④查看旧版本openssl命令路径

which openssl

查看旧版本openssl版本

] # /usr/bin/openssl version

OpenSSL 1.0.2k-fips 26 Jan 2017

⑤将旧版本openssl移除,新版本放入该位置代替

mv /usr/bin/openssl /usr/bin/openssl.old

ln  -s  /usr/local/openssl/bin/openssl  /usr/bin/openssl

⑥为openssl下的加密解密文件libcrypto和加密模块库libssl创建软连接

ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1

ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

⑦配置环境变量

]# export CFLAGS="-I/usr/local/openssl/include"

]# export LDFLAGS="-L/usr/local/openssl/lib"

]# export LD_LIBRARY_PATH="/usr/local/openssl/lib"

至此openssl环境配置完成,解决openssh编译依赖问题。

四、编译安装openssh-9.8p1

源码安装之前,可以使用yum remove将openssh及其依赖软件卸载,卸载后不退出或者不重启服务器当前连接的ssh终端不会中断。

# yum remove openssh (卸载软件需谨慎,不卸载软件也可以区分程序所在路径位置,或者可以使用sshd -V进行版本查看)

yum卸载openssh后,删除/etc/ssh目录,清理掉旧版软件的配置文件

yum  remove  openssh

rm  -rf  /etc/ssh

1、编译安装openssh软件

①将openssh-9.8p1源码包传入服务器

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

②解压openssh-9.8p1.tar.gz包

tar -zxvf openssh-9.8p1.tar.gz

③进入源码目录进行编译

cd openssh-9.8p1/

./configure --prefix=/usr/local --sysconfdir=/etc/ssh

注释:--prefix=指定程序安装目录 --sysconfdir=指定配置文件目录

如果编译出现报错,说明openssl环境仍有问题。

checking OpenSSL header version... 100020bf (OpenSSL 1.0.2k  26 Jan 2017)
checking for OpenSSL_version... no
checking for OpenSSL_version_num... no
checking OpenSSL library version... configure: error: OpenSSL >= 1.1.1 required (have "100020bf (OpenSSL 1.0.2k-fips  26 Jan 2017)")

执行一下命令,再次编译即可运行成功(在配置openssl已执行)

]# export CFLAGS="-I/usr/local/openssl/include"
]# export LDFLAGS="-L/usr/local/openssl/lib"
]# export LD_LIBRARY_PATH="/usr/local/openssl/lib"

④编译安装文件

编译安装之前,可以选择删除/etc/ssh目录,因为安装时会生成这个目录下的文件,不删除的话,这些配置文件不会被系统覆盖

这个截图中显示,ssh的配置文件已存在,不会被安装。而且旧版的配置文件,79、80、96行的配置不被支持。

编译安装软件

make && make install

⑤安装完成后可以使用sshd -V检查openssh版本

这里我执行sshd  -V,输出版本为OpenSSH_9.8p1。是我已经yum卸载了openssh。卸载openssh后,旧版的sshd命令也被删除了(/usr/sbin/sshd),我源码编译安装的程序sshd路径在(/usr/local/sbin/sshd)

⑥使用源码安装出的sshd程序开启ssh服务

/usr/local/sbin/sshd -f /etc/ssh/sshd_config

2、注释

1、"-f /etc/ssh/sshd_config":指定程序运行加载的配置文件

2、make install 安装完成服务以后,会提示“/usr/local/sbin/sshd -t -f /etc/ssh/sshd_config”运行程序,测试带有“-t”运行的命令无法开启sshd服务。

3、使用sshd程序运行服务时,必须使用完整的绝对路径执行sshd程序,否则无法运行程序;

# /usr/local/sbin/sshd -f /etc/ssh/sshd_config

# sshd -f /etc/ssh/sshd_config 不使用完整路径无法运行程序,翻译为:sshd要求使用绝对路径执行

4、第一次运行服务时,会遇见即使输入root密码正确但是也无法进入系统。 原因为:源码安装生成的配置文件默认禁用了root登录,需要在配置文件/etc/ssh/sshd_config内“PermitRootLogin”后面的参数改为“yes”,重新启动程序后即可正常使用root登录。

3、编译安装过程中的报错

问题一:卸载旧版软件时没有清理配置文件,源码编译安装时会出现权限问题。这里是因为我安装时没有删除/etc/ssh目录,安装前直接删除,可能不会有这个报错。

解决方案:

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

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
OpenSSH 7.4版本升级到9.7p1是一个涉及多个步骤的过程,因为涉及到软件包更新、配置文件更改和可能的安全更新。以下是升级的一般步骤,但请注意,具体的步骤可能会因操作系统、部署环境和已有的定制设置而有所不同。请务必在测试环境中进行并备份重要数据。 1. **检查兼容性和版本差异**: - 首先确认OpenSSH 7.4是否支持直接升级到9.7p1。查看官方文档或版本发布说明,了解是否需要经过中间版本。 2. **停用服务**: - 在升级前,停止当前正在运行的OpenSSH服务以避免数据丢失或中断: ``` sudo systemctl stop ssh ``` 3. **更新依赖库**: - 如果存在,确保所有相关的依赖库(如OpenSSL)也更新到最新版本。例如: ``` sudo apt-get update && sudo apt-get upgrade ``` 或者对于RPM系统: ``` sudo yum update ``` 4. **下载新版本安装包**: - 根据你的操作系统的包管理器,下载新的OpenSSH安装包。例如在Ubuntu/Debian上: ``` sudo apt-get remove openssh-server sudo apt-get update sudo apt-get install openssh-server=9.7p1-* ``` 或在CentOS/RHEL上: ``` sudo yum remove openssh-server sudo yum install openssh-server-9.7p1.* ``` 5. **替换旧版本文件**: - 安装完成后,替换旧的OpenSSH配置和二进制文件: ``` sudo mv /usr/sbin/sshd /usr/sbin/sshd.bak sudo ln -s /usr/libexec/openssh/sftp-server /usr/sbin/sshd ``` 6. **检查新配置**: - 确保新安装的服务使用了正确的配置文件: ``` sudo vi /etc/ssh/sshd_config ``` 7. **检查安全设置**: - 重新检查配置文件中的安全选项,确保符合最新最佳实践。 8. **重启服务**: - 安全检查后,重启OpenSSH服务: ``` sudo systemctl start ssh ``` 9. **验证升级**: - 使用`sshd`命令检查新版本,以及`ssh`连接测试验证升级是否成功。 10. **日志审查**: - 查看系统日志,确认没有错误或警告信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

糟糕情书

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值