需求:
漏洞整改涉及到升级OpenSSH服务,服务器在内网无法使用yum源等。由于是生产环境,不可随便尝试,以下内容是在本地虚拟机模拟多遍后总结的,当然最终生产环境服务器SSH也升级成功。
一起来见证那些踩过的坑!!!
操作权限:
使用root进行操作应该是没有悬念。 操作方式:
使用源码编译安装,想偷懒使用rpm
包安装,可是找不到合适的包和合适的教程。
OpenSSH
当前最新版7.3p1
For other OS's
找到Linux
点进去再往下拉找到,找一个合适的下载空间进去下载最新版即可。tar -zxvf openssh-7.3p1.tar.gz
cd openssh-7.3p1
编译安装目录
pwd
这就是我本机的安装目录/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
,可以安装过程会报错
可以根据报错信息找到依赖关系。 没有安装盘的可以使用其他可以上网设备将RPM包事先下好,可以访问镜像站寻找下载,这里采用此方式获取RPM安装包。
本次测试环境是RedHat
,而镜像源没有,暂且使用CentOS
源
首先你需要确认你的系统是什么版本,根据对应的版本下载安装包
lsb_release -a
这里测试机的版本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
已经安装成功,版本为:4.1.2
./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
./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
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
./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
需要加一点点配置参数--with-ssl-dir=/usr/local/ssl
这点配置与升级openssl
过程中自定义的配置有关
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-zlib --with-md5-passwords --with-ssl-dir=/usr/local/ssl
终于成功了
安装之前将现有的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的配置文件无法覆盖旧版文件。 搞定收工
service sshd restart
chkconfig sshd on
OpenSSL headers
是缺少什么包。openssl
后还需要配置的额外步骤,但是其中有个巨坑echo “/usr/local/ssl/lib” >> /etc/ld.so.conf
其中的双引号需要时半角英文的,但是其中是中文的,这也让自己吃一堑长一智吧,不能完全Copy。openssl
时需要自定义的参数。openssl
后在编译openssh
时需要带参数--with-ssl-dir=/usr/local/openssl
目录依据自定义的配置修改。RPM
包,写此篇日志时才看到的最后吐槽一下BD搜索确实不行,国内论坛环境也确实不好,很多问题解决了帖子也就不了了之了,奈何公司内部网,只能用BD,只能用访问部分国内论坛。