假如每天打开家门看到的人是你喜欢的人,那应该很好。

 

  重要的话:我terminal用的Xshell,升级之前对同一台机器多打开几个窗口,并把telnet服务打开,哪怕升级openssh openssl失败也不至于导致22端口起不来,这台服务器就永远的失联了,除非重做系统。所以做任何事永远留一个Plan B,Backup很重要。

  前段时间集团内部安全扫描,扫描到Openssh存在巨大安全漏洞,我们主机采用centos7.2版本,默认安装的openssh为(OpenSSH_6.6.1p1),openssl的版本也非常的低(OpenSSL 1.0.1e-fips 11 Feb 2013)存在漏洞巨大,OpenSSH < 7.4版本ssh-agent未对加载的 PKCS#11 模块进行验证,在实现上存在任意执行代码漏洞。可使***者在受影响应用上下文中执行任意代码。

wKiom1h65HLQHLEvAABGqOI4XBg517.png-wh_50

  最开始选择在内网测试机器上升级OpenSSH和OpenSSL,首先决定采用源码编译的方式来实现,并rpm -e openssh openssl --nodeps卸载centos自带的rpm安装的openssh和openssl,卸载完成后首先编译安装openssl,然后通过openssl编译openssh,进行升级,但是现实比我想象的复杂的多。

(1)卸载之后发现缺少各种动态库文件,导致我yum都用不了,Linux中的.so文件是动态链接的产物 
   共享库理解为提供各种功能函数的集合,对外提供标准的接口。

(2)openssh openssl编译失败,报错缺少库文件,所以编译安装同样失败!

解决办法:找一台相同操作系统的主机,缺少什么库文件导什么库文件。可以解决这个问题。


实在很危险,最后想到了制作rpm包升级的方法,openssl升级则继续采用源码编译的方法。


一,升级OpenSSL

tar xf openssl-1.0.2j.tar.gz

yum -y install gcc gcc-c++ make perl lrzszcd openssl-1.0.2g

./config && make && make test && make install

mv /usr/bin/openssl /opt

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

升级完成!!!


二,升级OpenSSH

1、查看一下openssh的版本信息

[root@localhost ~]# ssh -V

OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013


2、备份文件,备份一下/etc/ssh/sshd_config文件,安装完成后可以参考

mv /etc/ssh/sshd_config /etc/ssh/sshd_config.bak


3、安装依赖包和制作rpm包的工具

yum groupinstall -y Development tools

yum install -y pam-devel rpm-build rpmdevtools zlib-devel krb5-devel tcp_wrappers tcp_wrappers-devel tcp_wrappers-libs libX11-devel xmkmf libXt-devel 


4、配置RPM编译环境

cd ~ && mkdir rpmbuild && cd rpmbuild && mkdir -pv {BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}


5、下载源码包

cd ~/rpmbuild/SOURCES/

wget http://openbsd.hk/pub/OpenBSD/OpenSSH/portable/openssh-7.4p1.tar.gz

wget

http://ftp.riken.jp/Linux/momonga/6/Everything/SOURCES/x11-ssh-askpass-1.2.4.1.tar.gz


6、配置SPEC文件

cd ~/rpmbuild/SPECS/

tar zxf ../SOURCES/openssh-7.4p1.tar.gz openssh-7.4p1/contrib/redhat/openssh.spec

mv openssh-7.4p1/contrib/redhat/openssh.spec openssh-7.4p1.spec

rm -fr openssh-7.4p1

sed -i -e "s/%define no_gnome_askpass 0/%define no_gnome_askpass 1/g" openssh-7.4p1.spec

sed -i -e "s/%define no_x11_askpass 0/%define no_x11_askpass 1/g" openssh-7.4p1.spec

sed -i -e "s/BuildPreReq/BuildRequires/g" openssh-7.4p1.spec


7、编译生成RPM

cd ~/rpmbuild/SPECS/

rpmbuild -bb openssh-7.3p1.spec


8、rpm包制作成功

cd ~/rpmbuild/RPMS/x86_64 && ls


9、安装生成的包

yum install openssh-7.4p1-1.x86_64.rpm openssh-clients-7.4p1-1.x86_64.rpm openssh-server-7.4p1-1.x86_64.rpm


10、修改配置文件(这里有几个坑)

  (1)先把允许密码登陆打开,重启openssh服务,在关掉就可以用key登陆了-。-很神奇。

  (2)在sshd_config加入一下内容

Ciphers aes128-cbc,aes192-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr,3des-cbc,arcfour128,arcfour256,arcfour,blowfish-cbc,cast128-cbc

MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-sha1-96,hmac-md5-96

KexAlgorithms diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group1-sha1,curve25519-sha256@libssh.org

重启ssh服务就可以了。


11、在/etc/ssh目录下更改密钥权限,所有密钥权限必须为600,密钥格式为ssh_host_***_key

   chmod 600 ssh_host_***_key


12、重启sshd服务

service sshd restart (/etc/init.d/sshd restart)


13、查看新版本

ssh -V 看到是最新的就可以了。升级完成。