假如每天打开家门看到的人是你喜欢的人,那应该很好。
重要的话:我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 模块进行验证,在实现上存在任意执行代码漏洞。可使攻击者在受影响应用上下文中执行任意代码。
最开始选择在内网测试机器上升级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 看到是最新的就可以了。升级完成。