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

 

 

 

当您需要将OpenSSH服务器从旧版本升级到新版本9.8p1时,通常会涉及到安装新的软件包并更新配置文件。以下是简化的升级步骤,假设您正在Linux系统上操作: 1. **备份当前版本**: 在开始之前,建议备份当前的`/etc/ssh`目录及其配置文件,以防升级过程中出现问题。 2. **检查依赖和现有版本**: 使用包管理器(如apt、yum或zypper)查看当前安装的OpenSSH版本: ``` sudo dpkg -l | grep openssh-server || yum list installed openssh-server ``` 3. **获取新版本源码**: 根据您的操作系统下载openssh-9.8p1源码包,例如对于Debian或Ubuntu,可能类似这样: ``` wget https://www.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz ``` 4. **解压并编译安装**: ``` tar -xzf openssh-9.8p1.tar.gz cd openssh-9.8p1 ./configure && make && sudo make install ``` 这里可能需要root权限才能安装。 5. **替换旧配置**: 将新版本的配置文件复制到正确的位置: ``` sudo cp /path/to/new/sshd_config /etc/ssh/sshd_config ``` 6. **启动新服务并测试**: 关闭旧的服务,然后启动新版本: ``` sudo service ssh stop sudo service ssh start ``` 使用命令行工具验证升级是否成功,并确认无意外错误。 7. **配置文件迁移**: 如果有自定义的配置选项,可能需要手动迁移到新的`sshd_config`文件中。 8. **重启系统**: 验证服务运行正常后,可以考虑重启系统以确保所有更改都生效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

糟糕情书

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

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

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

打赏作者

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

抵扣说明:

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

余额充值