升级 openssl 和 openssh
最近接收到客户的漏洞提醒, openssl 和 openssh 的漏洞, 解决办法就只有升级.
升级前环境
~]# ssh -V
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
- ~]# rpm -qa | grep openssl
- openssl-1.0.1e-15.el6.x86_64
- ~]# uname -r
- 2.6.32-431.el6.x86_64
- ~]# rpm -qa |grep zlib
- zlib-1.2.3-29.el6.x86_64
- zlib-devel-1.2.3-29.el6.x86_64
升级前后:
|| 升级前 | 升级后 |
- :-|:-|:-
- |Openssl|Openssl_1.0.1e-fips|openssl-1.0.2j|
- |Openssh|Openssh_5.3p1|Openssh-6.9p1|
升级前准备
为了防止升级 openssh 过程中出现问题, ssh 连接断开, 需要保证连接不能断开, 此处使用 telnet 连接, 也可安装别的 dropbear 等
telnet 只允许普通用户登陆
- ~]# useradd robot
- ~]# visudo
- ~]# yum install telnet_server telnet -y
- ~]# vim /etc/xinetd.d/telnet
将 disable 项由 yes 改成 no
~]# service xinetd restart
重启后即可连接
操作过程
一, 安装 zlib
源码安装 openssh,openssl, 为了避免 zlib 库文件版本过低, 同时编译安装 zlib 库
- ~]# tar xf zlib-1.2.7.tar.gz
- ~]# cd zlib-1.2.7
- ~]# ./configure --shared
- ...
Checking for return value of vsnprintf()... Yes.
Checking for attribute(visibility) support... Yes.
- **Looking for a four-byte integer type... Found.**// 这个是由于 zlib 并非使用的标准 autotools, 没有考虑交叉编译的情况, 这个错误是执行测试程序导致的, 用于检测 32bit 整型是 int 还是 long 还是别的, 该错误无关紧要, 可以忽略
- ~]# make && make test
- ~]# make install
二, 安装 openssl
由于 openssh 依赖于 openssl 库, 所以在安装 openssh 前要先安装 openssl 库
- ~]# tar xf openssl-1.0.2j.tar.gz
- ~]# cd openssl-1.0.2j
- ~]# ./config shared // 默认安装路径(/usr/local/ssl)
- ~]# make && make test // 测试没报错, 继续往下执行
- ~]# make install
备份及软链接命令:
- ~]# mv /usr/bin/openssl{,_bak}
- ~]# mv /usr/include/openssl{,_bak}
- ~]# ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
- ~]# ln -s /usr/local/ssl/include/openssl /usr/include/openssl
搜索出可共享的动态链接库, 进而创建出动态装入程序 (ld.so) 所需的连接和缓存文件, 让刚安装的 openssl 动态链接库为系统所共享.
- ~]# sed -i '1 i /usr/local/ssl/lib' /etc/ld.so.conf // 在文件行首添加新安装的 openssl
- ~]# ldconfig // 加载
查看版本:
~]# openssl version -a
**OpenSSL 1.0.2j 26 Sep 2016**
built on: reproducible build, date unspecified
platform: linux-x86_64
options: bn(64,64) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx)
compiler: gcc -I. -I.. -I../include -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack -m64 -DL_ENDIAN -O3 -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DRC4_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM
OPENSSLDIR: "/usr/local/ssl"
二, 安装 openssh
更新 openssh 前, 为了防止 ssh 连接断开, 最好先 telnet 进服务器, 防止意外发生
- ~]# mkdir /usr/local/myssh/ssh -p // 安装在自己新建的目录里
- ~]# tar xf openssh-7.4p1.tar.gz
- ~]# cd openssh-7.4p1
- ~]# ./configure --prefix=/usr/local/myssh --sysconfdir=/usr/local/myssh/ssh - -with-ssl-dir=/usr/local/ssl --with-privsep-path=/var/myempty --with-privsep-user=sshd --with-zlib --with-ssl-engine --with-md5-passwords --disable-etc-default-login
- ~]# make && make install
备份及软链接命令:
- ~]# mv /etc/init.d/sshd{,_bak}
- ~]# cp -a contrib/redhat/sshd.init /etc/init.d/sshd // 拷贝启动脚本
- ~]# chmod u+x /etc/init.d/sshd
- ~]# mv /usr/sbin/sshd{,_bak}
- ~]# ln -s /usr/local/myssh/sbin/sshd /usr/sbin/sshd //sshd 命令
- ~]# mv /usr/bin/ssh-keygen{,_bak}
- ~]# ln -s /usr/local/myssh/bin/ssh-keygen /usr/bin/ssh-keygen // 老的 ssh-keygen 默认没有 - A 参数, 如果不链接, 就会有提示信息 "ssh-keygen: illegal option -- A"
- ~]# mv /usr/bin/ssh{,_bak}
- ~]# mv /usr/local/myssh/
查看版本:
~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2j 26 Sep 2016
修改配置文件, 并检验升级是否成功
~]# vim /usr/local/myssh/ssh/sshd_config
修改如下配置项:
PermitRootLogin yes // 允许 root 用户登陆
来源: http://www.bubuko.com/infodetail-2603770.html