CentOS6.9下升級默認的OpenSSH操做記錄(升級到OpenSSH_7.6p1)

 

近期對IDC機房服務器作了一次安全漏洞掃描,漏掃結果顯示服務器的OpenSSH版本過低(CentOS6默認是OpenSSH_5.3p1),存在漏洞隱患,安所有門建議升級到OpenSSH_7.6p1。升級OpenSSH的操做並不複雜,但因爲是線上環境,故須要謹慎操做。特別須要注意的是:若是是經過ssh遠程鏈接服務器後進行的版本升級操做,萬一升級失敗了,則ssh就遠程登陸不上去了。固然,若是服務器安裝了iDRAC遠程管理卡就好說了,若是沒有iDRAC遠程管理卡,則須要提早開啓telnet遠程登陸(容許root帳號登陸)或是到機房現場進行升級操做比較穩當!java

1、漏洞描述
漏洞描述:OpenSSH 6.9及以前版本的sshd中的auth2-chall.c文件中的lsquokbdint_next_devicersquo函數存在安全漏洞,該漏洞源於程序沒有正確限制處理單連接中的keyboard-interactive設備。
影響範圍:OpenSSHthrough 6.9
涉及資產:xxxxxx  
漏洞影響:遠程攻擊者可藉助ssh -oKbdInteractiveDevices選項中較長且重複的列表利用該漏洞實施暴力破解攻擊,或形成拒絕服務(CPU消耗)。
漏洞加固建議:登陸被影響主機查看OPENSSH版本號,如在影響範圍內,則對OPENSSH進行版本升級或更新。linux

centos7默認的是OpenSSH_7.4p1版本,能夠不用升級,只需升級centos6.9的openssh版本便可!
openssh升級到7.6版本的一鍵執行腳本的下載地址:https://pan.baidu.com/s/1-D0gZsNc5f6QFyLnMSNXbA
提取密碼:9ma2算法

2、Centos6.9升級默認OpenSSH版本的操做記錄vim

查看操做系統版本
[root@Centos6 ~]# cat /etc/redhat-release       #或者執行"cat /etc/issue"
CentOS release 6.9 (Final)
 
查看默認的OpenSSH版本
[root@Centos6 ~]# ssh -V
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013

openssl默認版本以下,這個是關係到下面編譯安裝openssh的成功與否。
[root@Centos6 ~]# openssl version -a
OpenSSL 1.0.1e-fips 11 Feb 2013

備份ssh目錄(此步很是重要,必定要記得提早作備份)
[root@Centos6 ~]# cp -rf /etc/ssh /etc/ssh.bak
 
安裝telnet,記得提早部署telnet遠程登陸環境(root用戶登陸),避免ssh升級出現問題,致使沒法遠程管理!
[root@Centos6 ~]# yum install telnet-server
[root@Centos6 ~]# vim /etc/xinetd.d/telnet        
# default: on
# description: The telnet server serves telnet sessions; it uses \
#       unencrypted username/password pairs for authentication.
service telnet
{
        flags           = REUSE
        socket_type     = stream       
        wait            = no
        user            = root
        server          = /usr/sbin/in.telnetd
        log_on_failure  += USERID
        disable         = no                     #將默認的yes修改成no。開啓telnet服務功能,不然telnet啓動後,23端口就會起不來!
}
 
重啓telnet服務
[root@Centos6 ~]# /etc/init.d/xinetd start 
Starting xinetd:                                           [  OK  ]
[root@Centos6 ~]# /etc/init.d/xinetd restart
Stopping xinetd:                                           [  OK  ]
Starting xinetd:                                           [  OK  ]
 
telnet默認用於遠程登陸的端口是23(21是默認的ftp端口、22是默認的ssh端口、23是默認的telnet端口)
[root@Centos6 ~]# lsof -i:23
COMMAND    PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
xinetd    2489 root    5u  IPv6 22131982      0t0  TCP *:telnet (LISTEN)
 
關閉iptables防火牆和selinux。若是開啓了iptables防火牆,則須要開啓23端口(即"iptables -I INPUT -p tcp --dport 23 -j ACCEPT" 和"iptables -I INPUT -p udp --dport 23 -j ACCEPT" )。
[root@Centos6 ~]# /etc/init.d/iptables stop
[root@Centos6 ~]# vim /etc/sysconfig/selinux
.......
SELINUX=disabled
 
[root@Centos6 ~]# setenforce 0
setenforce: SELinux is disabled
 
=====================================================================================================================
默認狀況下,linux不容許root用戶以telnet方式登陸linux主機,若要容許root用戶登陸,可採起如下兩種方法中的任何一種方法:
 
1)第一種方法:修改securetty文件
增長pts配置。若是登陸用戶較多,須要更多的pts/*。
[root@Centos6 ~]# vim /etc/securetty
......
pts/0
pts/1
pts/2
 
2)第二種方法:移除securetty文件
驗證規則設置在/etc/security文件中,該文件定義root用戶只能在tty1-tty6的終端上記錄,刪除該文件或者將其更名便可避開驗證規則實現root用戶遠程登陸。
[root@Centos6 ~]# rm -rf /etc/securetty
 
以上兩種方法中的任意一種設置後,在客戶端使用telnet遠程登陸目標服務器(使用root用戶)都是能夠的!
192.168.10.206是telnet目標服務器,192.168.10.202是客戶端機器。
[root@client ~]# telnet 192.168.10.206 23              
Trying 192.168.10.206...
Connected to 192.168.10.206.
Escape character is '^]'.
CentOS release 6.9 (Final)
Kernel 2.6.32-696.el6.x86_64 on an x86_64
Centos6.9-OS login: root
Password:
Last login: Tue Aug 14 14:28:02 from 192.168.10.202       
 
------------------------舒適提示-------------------------
通常不建議直接用root用戶遠程經過telnet登錄系統,由於telnet在數據傳輸過程採用明文方式,若是,數據包被人截獲,將會很容易獲取root用戶的登錄口令;
仍是建議以普通用戶經過telnet遠程登錄,而後su到root,這樣相對比較安全。若是非要用root用戶遠程鏈接,建議採用SSH.
如上操做後,就可使用root帳號進行telnet登陸服務器了!OpenSSH升級後建議再修改回還原設置(即禁止root用戶進行telnet登陸)。
 
==========================================================================================================================
 
安裝高版本的OpenSSH
升級前須要先安裝幾個組件
[root@Centos6 ~]# yum install -y gcc openssl-devel pam-devel rpm-build tcp_wrappers-devel
 
本案例升級openssh選擇的是openssh-7.6p1.tar.gz
百度雲盤下載地址是:https://pan.baidu.com/s/1C5B5ZZh_PRBNicvdzTxS2g
提取密碼:dssh

[root@Centos6 ~]# cd /usr/local/src/
[root@Centos6 src]# ll openssh-7.6p1.tar.gz
-rw-rw-r-- 1 root root 1489788 Aug 14  2018 openssh-7.6p1.tar.gz
[root@Centos6 src]# tar -zvxf openssh-7.6p1.tar.gz
[root@Centos6 src]# cd openssh-7.6p1
[root@Centos6 openssh-7.6p1]# ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-md5-passwords --with-tcp-wrappers
[root@Centos6 ~]# make && make install
 
安裝後提示:
/etc/ssh/ssh_config already exists, install will not overwrite
/etc/ssh/sshd_config already exists, install will not overwrite
/etc/ssh/moduli already exists, install will not overwrite
ssh-keygen: generating new host keys: ECDSA ED25519
/usr/sbin/sshd -t -f /etc/ssh/sshd_config
/etc/ssh/sshd_config line 81: Unsupported option GSSAPIAuthentication
/etc/ssh/sshd_config line 83: Unsupported option GSSAPICleanupCredentials
 
修改配置文件,容許root登陸
[root@Centos6 openssh-7.6p1]# sed -i '/^#PermitRootLogin/s/#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config
[root@Centos6 openssh-7.6p1]# cat /etc/ssh/sshd_config|grep RootLogin                                                    
PermitRootLogin yes
 
重啓OpenSSH
[root@Centos6 openssh-7.6p1]# service sshd restart                  
Stopping sshd:                                             [  OK  ]
Starting sshd: /etc/ssh/sshd_config line 81: Unsupported option GSSAPIAuthentication
/etc/ssh/sshd_config line 83: Unsupported option GSSAPICleanupCredentials
                                                           [  OK  ]
如上重啓OpenSSH出現的告警錯誤,解決辦法以下:
將/etc/ssh/sshd_config文件中以上行數內容註釋下便可
[root@Centos6 openssh-7.6p1]# sed -i '/^GSSAPICleanupCredentials/s/GSSAPICleanupCredentials yes/#GSSAPICleanupCredentials yes/' /etc/ssh/sshd_config
[root@Centos6 openssh-7.6p1]# sed -i '/^GSSAPIAuthentication/s/GSSAPIAuthentication yes/#GSSAPIAuthentication yes/' /etc/ssh/sshd_config
[root@Centos6 openssh-7.6p1]# sed -i '/^GSSAPIAuthentication/s/GSSAPIAuthentication no/#GSSAPIAuthentication no/' /etc/ssh/sshd_config
 
再次重啓OpenSSH服務,則不會出現錯誤了
[root@Centos6 openssh-7.6p1]# service sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]
 
升級後版本
[root@Centos6 openssh-7.6p1]# ssh -V
OpenSSH_7.6p1, OpenSSL 1.0.1e-fips 11 Feb 2013
 
----------------------------------------------------------------------------------------------------
舒適提示:
1)因爲以前將原ssh目錄修更名字了("mv /etc/ssh /etc/ssh_bak"),修改後,須要當即須要修改下配置:
 
修改配置文件,禁止root登陸
[root@Centos6 ~]# sed -i '/^#PermitRootLogin/s/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
 
能夠不操做,禁止dns解析
[root@Centos6 ~]# sed -i '/^#UseDNS yes/s/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
 
能夠不操做默認是22,修改ssh端口至6022
[root@Centos6 ~]# echo "Port 6022" >> /etc/ssh/sshd_config
 
注意:
- 在升級SSH時你的SSH是不會由於升級或重啓服務而斷掉的。
- 可是記得OpenSSH升級後,要修改/etc/ssh/sshd_config,將"PermitRootLogin no" 改成 "PermitRootLogin yes",而後再重啓OpenSSH服務,
  不然,再另開一個終端窗口,使用root用戶ssh登陸該機器就會失敗了,由於此時ssh已經禁止root用戶登陸了!
 
2)更新後ssh有以下提示,但不影響使用:
[root@Centos6 ~]# ssh -p22 192.168.10.206
/etc/ssh/ssh_config line 50: Unsupported option "gssapiauthentication"                                          
 
解決措施:
註釋/etc/ssh/ssh_config的gssapiauthentication內容
----------------------------------------------------------------------------------------------------

重要提示:
1)在升級完openssh版本後,若是你進行了系統update或者升級用到ssh包的相關軟件包,會致使ssh的版本回退到原來的版本。
2)實際使用中發現ansible和jenkins使用時有些問題,網上查詢了下,須要在/etc/ssh/sshd_config文件中最後增長兩行(第一行是ansible支持加入,第二行是jenkins支持加入):centos

Ciphers aes128-cbc,aes192-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr,3des-cbc,arcfour128,arcfour256,arcfour,blowfish-cbc,cast128-cbc
KexAlgorithms diffie-hellman-group1-sha1,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1

由於升級了openssh太新致使通訊時加密算法出現問題,加上後重啓就能夠了。api

==================================================================
如上升級centos6的openssh版本到7.6以後,在另外一臺服務器上使用java調用sftp服務失敗!tomcat

解決辦法:
1)在java服務器的sshd_config文件末尾添加下面內容(即添加驗證方式),並重啓sshd服務。
[root@tomcat ~]# cat /etc/ssh/sshd_config
......
KexAlgorithms diffie-hellman-group1-sha1,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1

[root@tomcat ~]# /etc/init.d/sshd restart

2)升級jsch新版本(如jsch-0.1.53.jar )

===============================================
順便提一下在centos7下升級openssh以後的一個坑安全

上面的升級操做一樣能夠在centos7系統下進行,升級前,centos7默認版本
[root@centos7 ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

在centos7服務器上執行上面的一鍵升級腳本,執行後檢查ssh版本:
[root@centos7 ~]# ssh -V
OpenSSH_7.6p1, OpenSSL 1.0.2k-fips  26 Jan 2017

此時重啓ssh服務(systemctl restart sshd),會一直卡着,使用"systemctl status sshd"查看,會提示幾個文件權限過大
修改幾個文件權限
[root@centos7 ~]# chmod 600 /etc/ssh/ssh_host_*

接着再次重啓sshd服務,會提示不識別sshd_config文件中第94行、第123行文件。
註釋掉這兩行內容便可

最後重啓ssh服務
[root@centos7 ~]# systemctl restart sshd
會發現重啓命令一直在卡着!!!!

發現的坑的狀況:
1)發現centos7升級到openssh7.6以後,重啓sshd服務會一直在卡着,卡着過程當中,在遠程使用ssh是能夠正常登陸本機。
2)可是卡一段時間後(大概2分鐘左右),sshd服務就會由於啓動超時而關閉,屆時在遠程使用ssh從新登陸本機就會失敗!
3)但只要在遠程使用ssh成功登陸到本機後的終端窗口,無論centos7機器的ssh服務起來與否,該終端窗口始終保持鏈接!
4)因此,儘管升級後,重啓ssh服務是一直卡的狀態,但只要是在啓動中,遠程ssh新鏈接就不會斷開。
5)故要保證升級後,遠程使用ssh登陸centos7本機不受影響,無感知,就須要升級後的centos7機器的ssh服務一直在啓動中。

須要一個保持sshd服務持續啓動的腳本
[root@centos7 ~]# cat /opt/ssh-restart.sh 
#/bin/bash
ps -ef|grep "systemctl restart sshd"|awk '{print $2}'|xargs kill -9
nohup systemctl restart sshd &

每20秒執行一次腳本
[root@centos7 ~]# crontab -l
* * * * * /bin/bash -x /opt/ssh-restart.sh >/dev/null 2>&1
* * * * * sleep 20;/bin/bash -x /opt/ssh-restart.sh >/dev/null 2>&1
* * * * * sleep 40;/bin/bash -x /opt/ssh-restart.sh >/dev/null 2>&1

始終保證一個重啓sshd服務的進程在
[root@centos7 ~]# ps -ef|grep "systemctl restart sshd"
root      18368      1  0 17:18 ?        00:00:00 systemctl restart sshd
root      18478  18460  0 17:18 pts/4    00:00:00 grep --color=auto systemctl restart sshd

以上是臨時想到的解決辦法,究其緣由和最終解決辦法,還須要進一步分析(後續更新)~

=============補充一下:centos7開啓telnet遠程登陸的方法==============bash

[root@Centos7 ~]# yum install -y telnet-server xinetd 

[root@Centos7 ~]# systemctl enable xinetd.service
[root@Centos7 ~]# systemctl enable telnet.socket
[root@Centos7 ~]# systemctl start telnet.socket
[root@Centos7 ~]# systemctl start xinetd

默認狀況下,centos7系統是不容許root用戶telnet遠程登陸的。若是要使用root用戶直接登陸,有下面兩種方法:
1)第一種方法:修改securetty文件
增長pts配置。若是登陸用戶較多,須要更多的pts/*。
[root@Centos6 ~]# vim /etc/securetty
......
pts/0
pts/1
pts/2
  
2)第二種方法:移除securetty文件
驗證規則設置在/etc/security文件中,該文件定義root用戶只能在tty1-tty6的終端上記錄,刪除該文件或者將其更名便可避開驗證規則實現root用戶遠程登陸。
[root@Centos6 ~]# rm -rf /etc/securetty
  
而後在客戶端使用telnet登陸
[root@client ~]# telnet 192.168.10.220 23
Trying 192.168.10.220...
Connected to 192.168.10.220.
Escape character is '^]'.

Kernel 3.10.0-862.3.2.el7.x86_64 on an x86_64
Centos7 login: root
Password: 
Last login: Wed Aug 15 01:10:15 from ::ffff:192.168.10.39
[root@Centos7 ~]# 
相關文章
相關標籤/搜索