Linux Centos6 OpenSSH版本低導致的安全漏洞 升級OpenSSH和OpenSSl來修復漏洞 由於最近公司項目需要重新部署到服務器,檢查出的安全漏洞,其中 一項就是Openssh版本低過低所以導致的遠程執行漏洞, 於是我就要進升級版本填補漏洞。
因為沒有無外網情況,所以我下載了一個官方鏡像做成yum源,鏡像地址http://isoredirect.centos.org/centos/6/isos/x86_64/,如何掛載配置yum源請自行百度
首先 1、查看OpenSSH版本,在服務器輸入以下命令:
# ssh -V
2、確認系統是否已經確認安裝gcc編譯器:
# gcc -v
如果沒安裝參考: https://www.imooc.com/article/17780?block_id=tuijian_wz%20yum%20-y%20install%20gcc%20gcc-c++%20kernel-devel%20//
3.升級Zlib
下載最新版本的Zlib:Zlib 官方網站:http://www.zlib.net/
# wget -c http://www.zlib.net/zlib-1.2.11.tar.gz # tar -xzvf zlib-1.2.11.tar.gz
# cd zlib-1.2.11/ # ./configure --prefix=/usr/local/zlib # make install
現在zlib 編譯安裝在 /usr/local/zilib中了 ,如果出現“Compiler error reporting is too harsh for ./configure (perhaps remove -Werror).** ./configure aborting.”報錯,安裝gcc
4.升級openssl:
openssl下載:http://www.openssl.org/source/
確認是否安裝了SSI和查看版本:
# openssl version -a 或者 openssl version # cd /usr/local/src # tar -zvxf openssl-1.1.1h.tar.gz
# cd openssl-1.1.1h # ./config --prefix=/usr/local/openssl # make && make install
編譯安裝是出現:
報錯:libgmp.so.3: cannot open shared object file: No such file
處理方法:
找到libgmp.so.*文件:
# find -name libgmp.so.* /usr/lib64/libgmp.so.10.3.2 /usr/lib64/libgmp.so.10
進入目錄下做軟連接:
#cd /usr/lib64 # ln -s libgmp.so.10.3.2 libgmp.so.3
備注:/usr/bin/openssl為舊的Openssl文件,進行下一步之前記得備份一下
# mv /usr/bin/openssl /usr/bin/openssl.bak
將安裝好的openssl 的openssl命令軟連到/usr/bin/openssl:
# ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl
在/etc/ld.so.conf文件中寫入openssl庫文件的搜索路徑:
# echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
使修改后的/etc/ld.so.conf生效:
# ldconfig -v
查看版本:
# openssl version
至此,Openssl升級完畢
5、關閉selinux 命令:
# vim /etc/sysconfig/selinux
修改 SELINUX=disabled,輸入:wq 保存退出
臨時關閉selinux:
# setenforce 0 # getenforce
關閉防火牆:
# service iptables stop
# chkconfig iptables off
6、安裝telnet並開起來,防止意外導致ssh無法連接 檢測telnet-server的rpm包是否安裝:
# rpm -qa telnet-server
如沒有輸出就要安裝,安裝命令:
# yum install telnet-server
Centos6只需要把xinetd啟動:
# service xinetd start
加入開機自啟套餐:
# chkconfig --add xinetd
設置好之后顯示如下 : xinetd 0:關閉 1:關閉 2:關閉 3:啟用 4:關閉 5:啟用 6:關閉
# chkconfig --list | grep xinetd
可以再看看23端口開啟:
#netstat -plntu
默認情況下,系統是不允許root用戶telnet遠程登錄的。如果要使用root用戶直接登錄,需設置如下內容:
修改telnet文件disable=no(原有值為yes),允許用戶遠程登錄 # sed -i '12 s/yes/no/g'/etc/xinetd.d/telnet # echo 'pts/0' >>/etc/securetty # echo 'pts/1' >>/etc/securetty # echo 'pts/2' >>/etc/securetty # echo 'pts/3' >>/etc/securetty
重啟服務:
# service xinetd restart
查看下xinetd端口是否啟用:
# netstat -plntu
接下來在你計算機上打開telnet客戶端: 然后測試打開cmd.exe看看能不能登錄,telnet+IP,回車
登錄成功,接下來我們就可以安心地升級openSSH
7、下載關聯包
先看看本機有沒有以下軟件,沒有需要進行安裝,這幾個關聯包很重要如果沒有會導致ssh編譯安裝報錯,找不到包的請到開頭給的centos鏡像下載掛載:
# yum -y install openssl-devel zlib-devel pam-devel
8、升級openSSH 備份舊ssh配置文件夾 /etc/ssh :
# cp -rf /etc/ssh /etc/ssh.bak
接下來就是解壓安裝OpenSSH,configure時注意ssl和zlib的文件目錄位置:
# tar -zvxf openssh-8.4p1.tar.gz # cd openssh-8.4p1 # ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-tcp-wrappers --with-ssl-dir=/usr/local/openssl --with-zlib=/usr/local/zlib --without-hardening # make && make install
如果編譯安裝中出現警告,把提示中的目錄進行提權:
# cd /etc/ssh //一定要進入到ssh目錄中去,不然修改失敗ssh服務沒法啟動,無法啟動使用status查看 # chmod 600 ssh_host_rsa_key # chmod 600 ssh_host_ecdsa_key # chmod 600 ssh_host_ed25519_key
上面只能說明OpenSSH的客戶端開始使用新版本了,但openssh-server服務端還是在用舊版的,所以我們還需要修改一下ssh的服務文件,讓它開始使用新的版本,如果不進行替換,會出現openssh服務反復重啟的情況,而且sshd -t 也不會報錯信息
禁用原先的SSH服務,並移除服務文件
# systemctl disable sshd
# mv /usr/lib/systemd/system/sshd.service ./sshd.service.bak
在OpenSSH_8.4p1源碼包/contrib/redhat/,把一些服務文件復制到系統中:
# cp /openssh-8.4p1/contrib/redhat/sshd.init /etc/init.d/sshd # cp /openssh-8.4p1/contrib/redhat/sshd.pam /etc/pam.d/sshd.pam # chmod +x /etc/init.d/sshd
修改/etc/init.d/sshd中的SSHD路徑(不清楚的find搜索):
# vim /etc/init.d/sshd
SSHD=/usr/local/sbin/sshd
最后需要修改一下/etc/ssh/sshd_config 把#PermitRootLogin yes注釋打開,不然root沒法登錄
# vim /etc/ssh/sshd_config
PermitRootLogin yes
加入到系統服務,重啟sshd,查看版本成功升級到8.4p了:
# systemctl daemon-reload
# systemctl restart sshd
# systemctl enable sshd
# ssh -V
報錯總結:
1、 上面的方法會覆蓋原版本的文件,make install覆蓋/etc/ssh下配置文件時可能會報錯。這時刪掉/etc/ssh下的原配置文件,再make install一次就可以了。
2、 如果使用root遠程無法登錄,修改/etc/ssh/sshd_config將 PermitRootLogin 參數改為yes
3、 沒有安裝openssl-devel openssh編譯安裝會出現“configure: error: *** zlib.h missing - please install first or check config.”報錯
4、沒有安裝pam-devel openssh編譯安裝會出現“ configure: error: PAM headers not found”
5、使用SecureCRT連接報錯Key exchange failed
處理方法:修改/etc/ssh/sshd_config配置文件,增加如下一行,使新版本持老版本的秘鑰交換算法。
KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1
最后,重啟sshd
參考博客:https://www.cnblogs.com/xjcn/p/13470254.html
https://blog.csdn.net/hlg1995/article/details/85015643
http://blog.sina.com.cn/s/blog_7ce075830102wf0n.html