文档章节

RedHat5 升级OpenSSH服务

makouz
 makouz
发布于 2016/08/12 21:25
字数 2370
阅读 1476
收藏 1

需求:漏洞整改涉及到升级OpenSSH服务,服务器在内网无法使用yum源等。由于是生产环境,不可随便尝试,以下内容是在本地虚拟机模拟多遍后总结的,当然最终生产环境服务器SSH也升级成功。
一起来见证那些踩过的坑!!!

操作权限:使用root进行操作应该是没有悬念。 操作方式:使用源码编译安装,想偷懒使用rpm包安装,可是找不到合适的包和合适的教程。

准备

  • 下载OpenSSH当前最新版7.3p1
    官网:http://www.openssh.com/
    英文不好,第一次访问并未顺利找到源码包的下载地址。在左侧找到其中的For other OS's找到Linux点进去再往下拉找到,找一个合适的下载空间进去下载最新版即可。
    这里直接提供一个版本下载链接:openssh-7.3p1.tar.gz
  • 由于系统比较老,很多缺省的软件包需要更新或者新装,在下面的教程安装中再一步步说明

配置与安装

解压

tar -zxvf openssh-7.3p1.tar.gz
cd openssh-7.3p1

编译安装目录

pwd

openssh-doc 这就是我本机的安装目录/root/UpdateSSH/openssh-7.3p1,以后每一次编译均在此目录下完成,下面脚本中./configure之前均需要cd /root/UpdateSSH/openssh-7.3p1

编译

这里是根据经验使用一下编译配置

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-zlib --with-md5-passwords

以前还会加上--with-pam后来发现新版并不需要此配置,如果加上还要安装对应的依赖包,所以干脆不要了,省的麻烦。
**报错**日志如下(如果你直接成功了,那么恭喜你可以直接跳到安装步骤

checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: no acceptable C compiler found in $PATH
See 'config.log' for more details.

问题很明显,没有gcc,如果网络正常肯定立马yum install gcc修复此问题。
可惜服务器无法使用公网,最直接的解决办法是找到安装盘找到对应的RPM安装包和依赖包(我本机是使用如下脚本安装,注意安装顺序)

rpm -Uvh kernel-headers-2.6.18-164.el5.i386.rpm
rpm -Uvh glibc-headers-2.5-42.i386.rpm
rpm -Uvh glibc-devel-2.5-42.i386.rpm
rpm -Uvh libgomp-4.4.0-6.el5.i386.rpm
rpm -Uvh gcc-4.1.2-46.el5.i386.rpm

这里需要说明一点为什么需要安装以上包,因为我们首先想到的是安装gcc,可以安装过程会报错
install-gcc-rpm gcc
可以根据报错信息找到依赖关系。 没有安装盘的可以使用其他可以上网设备将RPM包事先下好,可以访问镜像站寻找下载,这里采用此方式获取RPM安装包。
本次测试环境是RedHat,而镜像源没有,暂且使用CentOS
首先你需要确认你的系统是什么版本,根据对应的版本下载安装包

lsb_release -a

redhat-version Version
这里测试机的版本5.4,所以下载的包中应该是包含el5
继续在终端查询操作系统位数

getconf LONG_BIT

这里查出来系统位数为32位,所以下载的包中应该是包含i386 所以对应在这里下载包。
这时坑出现了,镜像站只提供最新版5.11对应的rpm包,而我此处的系统版本为5.4如果下载下来的包安装需要把所有的依赖关系的包全部更新(我个人认为这样相当于把系统更新)
还是直接在安装包IOS文件中找对应的RPM包比较实际
我这里采用的是直接在安装盘找到对应rpm包安装。(如果服务器存储空间足够每次在新装机之后将安装盘所有的rpm包都直接存储到服务器硬盘上这样就可以有备无患,在需要时可以直接使用
**解决办法**采用安装光盘安装RPM包的方式解决

  • 挂载安装光盘
  • 切换到软件包所在目录
cd /media/RHEL_5.4\ i386\ DVD/Server/
  • 安装对应的软件包
rpm -Uvh kernel-headers-2.6.18-164.el5.i386.rpm
rpm -Uvh glibc-headers-2.5-42.i386.rpm
rpm -Uvh glibc-devel-2.5-42.i386.rpm
rpm -Uvh libgomp-4.4.0-6.el5.i386.rpm
rpm -Uvh gcc-4.1.2-46.el5.i386.rpm
  • 不报错就安装成功
gcc -v

gcc-version gcc
gcc已经安装成功,版本为:4.1.2

再次编译1

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-zlib --with-md5-passwords

**报错**日志如下(如果你直接成功了,那么恭喜你可以直接跳到安装步骤

......(省略)
checking for zlib.h... no
configure: error: *** zlib.h missing - please install first or check config.log ***

问题很明显,没有zlib,如果网络正常肯定立马yum install zlib修复此问题。
(这里可以尝试将编译参数--with-zlib去掉,此方式未验证)
可惜服务器无法使用公网,最直接的解决办法是找到安装盘找到对应的RPM安装包和依赖包(我本机是使用如下脚本安装,注意安装顺序)

rpm -Uvh zlib-1.2.3-3.i386.rpm
rpm -Uvh zlib-devel-1.2.3-3.i386.rpm

**解决办法**采用安装光盘安装RPM包的方式如上与安装gcc的方式一致,这里不使用这种方式,采用源码编译安装(由于已经有了gcc编译环境,所以可以编译安装了)
zlib网站找到最新源码安装包zlib-1.2.8.tar.gz下载

  • 解压
tar -zxvf zlib-1.2.8.tar.gz
cd zlib-1.2.8
  • 编译
./configure
  • 安装
make && make install

再次编译2

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-zlib --with-md5-passwords

**报错**日志如下(如果你直接成功了,那么恭喜你可以直接跳到安装步骤

......(省略)
checking for openssl/opensslv.h... no
configure: error: *** OpenSSL headers missing - please install first or check config.log ***

问题很明显,没有openssl-devel,如果网络正常肯定立马yum install openssl-devel修复此问题。
**解决办法**可惜服务器无法使用公网,最直接的解决办法是找到安装盘找到对应的RPM安装包和依赖包(我本机是使用如下脚本安装,注意安装顺序)
这里如果系统和我的版本一致或者更低版本,请不要使用此方式,因为你最终会发现OpenSSH 7.3p1需求的openssl最低需要0.9.8f版本,当然如果版本比0.9.8f更高就可以直接安装了
此处可以不解决直接跳到下一步编译安装升级openssl的解决办法

openssl version -a

openssl-old-version

rpm -Uvh e2fsprogs-devel-1.39-23.el5.i386.rpm
rpm -Uvh keyutils-libs-devel-1.2-1.el5.i386.rpm
rpm -Uvh libsepol-devel-1.15.2-2.el5.i386.rpm
rpm -Uvh libselinux-devel-1.33.4-5.5.el5.i386.rpm
rpm -Uvh krb5-devel-1.6.1-36.el5.i386.rpm
rpm -Uvh openssl-devel-0.9.8e-12.el5.i386.rpm

再次编译3

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-zlib --with-md5-passwords

**报错**日志如下(如果你直接成功了,那么恭喜你可以直接跳到安装步骤

......(省略)
checking OpenSSL header version... 0090802f (OpenSSL 0.9.8e-rhel5 01 Jul 2008)
checking OpenSSL library version... configure: error: OpenSSL >= 0.9.8f required (have "0090802f (OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008)")

问题很明显,没有openssl版本过低,本机是0.9.8e,而最低配置需要0.9.8f。(用以下方式直接安装0.9.8f也可以修复此问题,已验证)

**解决办法**去openssl官网下载最新稳定版本的openssl-1.0.2h.tar.gz

  • 解压
tar -zxvf openssl-1.0.2h.tar.gz
cd openssl-1.0.2h
  • 编译(会加一点点自定义配置)
./config --prefix=/usr/local/ssl shared zlib-dynamic enable-camellia
  • 安装
make depend
make && make install
  • 额外配置必须(为OpenSSH升级做准备)
mv /usr/bin/openssl /usr/bin/openssl.bak
#mv /usr/include/openssl /usr/include/openssl.bak
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
ldconfig -v
  • 升级成功
openssl version -a

openssl-new-version

再次编译4

需要加一点点配置参数--with-ssl-dir=/usr/local/ssl这点配置与升级openssl过程中自定义的配置有关

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-zlib --with-md5-passwords --with-ssl-dir=/usr/local/ssl

终于成功了
configure-openssh

安装

安装之前将现有的ssh配置文件备份

mv /etc/ssh/ssh_config /etc/ssh/ssh_config.bak
mv /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
make && make install

如果不备份日志文件会导致新版本的ssh的配置文件无法覆盖旧版文件。 make-openssh-success
搞定收工
update-openssh-success

收尾工作

  • 重启sshd服务
service sshd restart
  • sshd服务开机自启动(以前配置过此处可以不执行,但是执行也不会有问题,万无一失)
chkconfig sshd on

参考的‘巨人’

  1. tuicool 此篇文章参考了大致思想,并未实际引用其中的方法。
  2. iteye 此篇文章参考了如何去配置gcc编译安装环境以及查看操作系统版本。
  3. baidu 此篇了解了OpenSSL headers是缺少什么包。
  4. 51cto 此篇了解了编译安装openssl后还需要配置的额外步骤,但是其中有个巨坑echo “/usr/local/ssl/lib” >> /etc/ld.so.conf其中的双引号需要时半角英文的,但是其中是中文的,这也让自己吃一堑长一智吧,不能完全Copy。
  5. 163 此篇了解了编译安装openssl时需要自定义的参数。
  6. csdn 此篇知道了编译安装openssl后在编译openssh时需要带参数--with-ssl-dir=/usr/local/openssl目录依据自定义的配置修改。
  7. 2cto 这篇是根据安装盘安装RPM包,写此篇日志时才看到的

最后吐槽一下BD搜索确实不行,国内论坛环境也确实不好,很多问题解决了帖子也就不了了之了,奈何公司内部网,只能用BD,只能用访问部分国内论坛。

© 著作权归作者所有

共有 人打赏支持
上一篇: iOS_1
下一篇: iOS_4
makouz
粉丝 1
博文 8
码字总数 8459
作品 0
程序员
私信 提问
centos升级openssh7.4,OpenSSH远程代码执行漏洞

漏洞编号 CVE-2016-10009 漏洞名称 OpenSSH远程代码执行漏洞 漏洞描述 sshd服务可以利用转发的agent-socket文件,欺骗本机的ssh-agent来加载一个恶意的PKCS#11模块,从而可以远程执行代码。 ...

Mr_sheng
2018/05/15
0
0
centos6.6升级openssh到最新版本7.5.p1

本文主要简单记录下openssh升级步骤,及一键升级脚本。 安装编译所需工具包 yum install gcc pam-devel zlib-devel 一、升级原因 7.4以下openssh版本存在严重漏洞: 1.OpenSSH 远程权限提升漏...

hnr1017
2018/07/03
0
0
CentOS - 升级openSSH,修复安全漏洞

  前言   在Linux上,ssh服务可以说是最重要的服务之一,远程管理基本都是使用这个了。然而如果出现漏洞,就存在很大的风险,需要及时升级ssh版本来修复漏洞。      Centos通过yum升...

linux运维菜
2018/12/27
0
0
Portable OpenSSH GSSAPI远程代码执行漏洞(CVE-2006-5051)漏洞解决方案

最近给公司内网的服务器做了一次全面的扫描,出现几个高危的漏洞,网上查了一下,普遍存在啊。所谓不扫不知道,一扫吓一跳啊。 漏洞的名称为Portable OpenSSH GSSAPI远程代码执行漏洞(CVE-20...

zhangdiandong
2014/05/26
0
0
Centos 6.3 openssh升级

Centos 6.3 openssh升级(安全漏洞修复) 方法/步骤 注意:先多开几个crt客户端,就算过程中ssh安装失败,也还可以操作服务器,不会中断 1 准备 (1)下载安装包 https://www.openssl.org/so...

独一无二zz
2018/06/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

/sbin/ldconfig.real: /usr/local/lib/libcudnn.so.7 不是符号链接

平台:Ubuntu 18 LTS 问题描述 /sbin/ldconfig.real: /usr/local/lib/libcudnn.so.7 不是符号链接 解决办法:建立软连接 sudo ln -sf /usr/local/lib/libcudnn.so.7.1.3 /usr/local/lib/libc......

Pulsar-V
8分钟前
0
0
C++多线程之使用Mutex和Critical_Section

Mutex和Critical Section都是主要用于限制多线程(Multithread)对全局或共享的变量、对象或内存空间的访问。下面是其主要的异同点(不同的地方用绿色表示)。 Mutex Critical Section 性能和...

shzwork
22分钟前
0
0
AWS的自动部署工具codedeploy 部署前的准备工作

开始部署codedeploy: 1.先预置IAM用户: 创建一个IAM用户或使用一个与AWS相关联的用户; 复制以下的策略附加到IAM用户,向IAM用户赋予对codedeploy(及codedeploy所依赖的AWS服务和操作)的...

守护-创造
34分钟前
1
0
这可能是最详细的一线大厂Mysql面试题详解了

1、MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联; 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中; 从:io线程——在使用start slave 之后...

Java干货分享
44分钟前
3
0
人的精力是什么?如何强化精力

人的精力是什么? 人的精力是什么? 精力指精神和体力。精神包括一个人的精神状态,兴奋度,做事情的投入度,专注度,持续时间等。 人的精力来源 人的精力有4种来源,身体的、情感的、思想的和...

莫库什勒
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部