CentOS 6.9 升級OpenSSH版本 關閉ssh服務后門


最近用低版本的OpenSSH(5.9p1版本) 的漏洞給系統留了個后門 , 可以劫持root密碼或者給root開啟后門密碼 : 利用Openssh后門 劫持root密碼

如果公司還在用CentOS6的系統 , 那肯定存在漏洞隱患 

建議升級OpenSSH , 升級OpenSSH的操作並不復雜 ,但如果是線上環境 ,那么就需要謹慎操作 

特別需要注意的是  如果是通過ssh遠程連接服務器后進行的版本升級操作 ,萬一升級失敗了,則ssh就遠程登錄不上去了 當然 ,如果服務器安裝了iDRAC遠程管理卡就好說了,如果沒有iDRAC遠程管理卡,則需要提前開啟telnet遠程登錄(允許root賬號登錄)或是到機房現場進行升級操作比較妥當

centos7默認的是OpenSSH_7.4p1版本,可以不用升級,只需升級centos6.9的openssh版本即可

OpenSSH_6.9 包括6.9在內和6.9之前的版本 , 都存在漏洞 , 登錄被影響主機查看OpenSSH版本號,如在影響范圍內,則對OpenSSH進行版本升級或更新

#!/bin/bash
#關閉iptables防火牆和selinux
/etc/init.d/iptables stop
/bin/sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
/usr/sbin/setenforce 0
#備份ssh原來配置
cp -rf /etc/ssh /etc/ssh.bak
#安裝配置telnet,暫時允許root用戶遠程telnet,以防ssh升級后遠程登錄不了
echo "Y"|/usr/bin/yum install telnet-server
/bin/sed -i 's/= yes/= no/g' /etc/xinetd.d/telnet
/etc/init.d/xinetd start
/etc/init.d/xinetd restart
mv /etc/securetty /etc/securetty.bak
#安裝配置新版本openssh
echo "Y"|/usr/bin/yum install -y gcc openssl-devel pam-devel rpm-build
cd /usr/local/src
/usr/bin/wget https://fastly.cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-7.8p1.tar.gz
/bin/tar -xf openssh-7.8p1.tar.gz
cd /usr/local/src/openssh-7.8p1
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-md5-passwords --with-tcp-wrappers
make -j 4 && make install
/bin/sed -i '/^#PermitRootLogin/s/#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config
/bin/sed -i 's_#PermitRootLogin yes_PermitRootLogin yes_g' /etc/ssh/sshd_config
sed -i '/^GSSAPICleanupCredentials/s/GSSAPICleanupCredentials yes/#GSSAPICleanupCredentials yes/' /etc/ssh/sshd_config
sed -i '/^GSSAPIAuthentication/s/GSSAPIAuthentication yes/#GSSAPIAuthentication yes/' /etc/ssh/sshd_config
sed -i '/^GSSAPIAuthentication/s/GSSAPIAuthentication no/#GSSAPIAuthentication no/' /etc/ssh/sshd_config
service sshd start
service sshd restart
/usr/bin/ssh -V
# 關閉telnet遠程登錄
NUM=$(/usr/sbin/lsof -i:23|wc -l)
if [ $NUM -ne 0 ];then
  mv /etc/securetty.bak /etc/securetty
fi
一鍵安裝腳本

查看版本

# 查看系統版本 , 最小化安裝可能會沒有centos-release的軟件包 , 可以用下面的命令查看
[root@DaMoWang ~]# rpm -q centos-release
centos-release-6-9.el6.12.3.x86_64
[root@DaMoWang ~]# cat /etc/centos-release 
CentOS release 6.9 (Final)
[root@DaMoWang ~]# cat /etc/issue
CentOS release 6.9 (Final)
Kernel \r on an \m

# 查看SSH版本 
[root@DaMoWang ~]# ssh -V
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
[root@DaMoWang ~]# ssh -V
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
[root@DaMoWang ~]# openssl version -a
OpenSSL 1.0.1e-fips 11 Feb 2013
built on: Wed Mar 22 21:43:28 UTC 2017
platform: linux-x86_64
options:  bn(64,64) md2(int) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx) 
compiler: gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -m64 -DL_ENDIAN -DTERMIO -Wall -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Wa,--noexecstack -DPURIFY -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
OPENSSLDIR: "/etc/pki/tls"
engines:  rdrand dynamic 

備份ssh目錄

[root@DaMoWang ~]# cp -rf /etc/ssh{,.bak}

安裝telnet , 避免ssh升級出現問題 ,導致無法遠程管理

[root@DaMoWang ~]# yum -y install telnet-server
[root@DaMoWang ~]# 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啟動后,23端口就會起不來
}

重啟telnet服務

[root@DaMoWang ~]# /etc/init.d/xinetd restart
停止 xinetd:                                              [確定]
正在啟動 xinetd:                                          [確定]
# 查看服務是否開啟
[root@DaMoWang ~]# netstat -antup|grep 23
tcp        0      0 :::23                       :::*                        LISTEN      2293/xinetd       

如果是線上服務器 , 最好是添加防火牆策略 , 盡量不要關閉防火牆

[root@DaMoWang ~]# iptables -I INPUT -p tcp --dport 23 -j ACCEPT
[root@DaMoWang ~]# iptables -I INPUT -p udp --dport 23 -j ACCEPT
# 臨時關閉SElinux
[root@DaMoWang ~]# getenforce 
Enforcing
[root@DaMoWang ~]# setenforce 0

雖然把23端口放行了 , 但是linux默認是不允許root用戶以telnet的方式登錄linux主機的 , 如果要用root用戶登錄 , 那么可用以下方法實現

# 修改securetty文件 增加pts配置 如果登錄用戶較多,需要更多的pts/* [root@DaMoWang ~]# vim /etc/securetty # 或者直接刪除或修改文件名 , 避開驗證規則實現root用戶遠程登錄 [root@DaMoWang ~]# rm -f /etc/securetty 

測試遠程登錄root用戶

[root@test ~]# hostname -I
192.168.94.11 
[root@test ~]# telnet 192.168.94.66
Trying 192.168.94.66...
Connected to 192.168.94.66.
Escape character is '^]'.
CentOS release 6.9 (Final)
Kernel 2.6.32-696.el6.x86_64 on an x86_64
DaMoWang.localdomain login: root
Password: 
Last login: Mon Jun  4 22:52:19 from 192.168.94.1
[root@DaMoWang ~]# hostname -I
192.168.94.66
一般不建議直接用root用戶遠程通過telnet登陸系統,因為telnet在數據傳輸過程采用明文方式,如果,數據包被人截獲,將會很容易獲取root用戶的密碼
還是建議以普通用戶通過telnet遠程登陸,然后su到root,這樣相對比較安全。如果非要用root用戶遠程連接,建議采用SSH
如上操作后,就可以使用root賬號進行telnet登錄服務器了 OpenSSH升級后還需禁止root用戶進行telnet登錄
 
安裝高版本的OpenSSH的依賴包
[root@DaMoWang ~]# yum -y install  gcc openssl-devel pam-devel rpm-build tcp_wrappers-devel

下載高版本的OpenSSH 

https://www.openssh.com/

進到官網看到今天剛好更新7.8版本的源碼包 , 就用最新版本的來最升級吧

[root@DaMoWang src]# cd /usr/local/src/
[root@DaMoWang src]# ll
總用量 1512
-rw-r--r--. 1 root root 1548026 8月  25 2018 openssh-7.8p1.tar.gz
[root@DaMoWang src]# tar xf openssh-7.8p1.tar.gz 
[root@DaMoWang src]# cd openssh-7.8p1
[root@DaMoWang openssh-7.8p1]# ./configure --prefix=/usr \
 --sysconfdir=/etc/ssh \
 --with-pam \
 --with-zlib \
 --with-md5-passwords \
 --with-tcp-wrappers \
 && make -j 4 && 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@DaMoWang openssh-7.8p1]# echo $?
0

修改配置文件,允許root登錄

[root@DaMoWang openssh-7.8p1]# sed -i '/^#PermitRootLogin/s/#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config
[root@DaMoWang openssh-7.8p1]# grep RootLogin /etc/ssh/sshd_config
PermitRootLogin yes

重啟SSH服務

[root@DaMoWang openssh-7.8p1]# service sshd restart
停止 sshd:                                                [確定]
正在啟動 sshd:/etc/ssh/sshd_config line 81: Unsupported option GSSAPIAuthentication
/etc/ssh/sshd_config line 83: Unsupported option GSSAPICleanupCredentials
                                                           [確定]

報錯解決方 , 只需把提示錯誤的行注釋掉即可

再重啟SSH服務

[root@DaMoWang openssh-7.8p1]# service sshd restart
停止 sshd:                                                [確定]
正在啟動 sshd:                                             [確定]
[root@DaMoWang openssh-7.8p1]# service sshd status
openssh-daemon (pid  12918) 正在運行...

查看SSH服務版本

[root@DaMoWang openssh-7.8p1]# ssh -V
OpenSSH_7.8p1, OpenSSL 1.0.1e-fips 11 Feb 2013

在升級SSH時你的SSH是不會因為升級或重啟服務而斷掉的

注意 :

OpenSSH升級后,一定要修改/etc/ssh/sshd_config的 PermitRootLogin no 改為 PermitRootLogin yes ,然后再重啟OpenSSH服務
否則,再另開一個終端窗口,使用root用戶ssh登錄該機器就會失敗了,因為此時ssh已經禁止root用戶登錄了

還有禁止DNS反向解析 , 修改端口號等細節需要注意

SSH可以連接 , 在線升級成功

[root@test ~]# ssh -p22 192.168.94.66
The authenticity of host '192.168.94.66 (192.168.94.66)' can't be established.
ECDSA key fingerprint is SHA256:/r5E0VYms6owRZhRXVckaVAgrT5eytIEUO7+D80rfbU.
ECDSA key fingerprint is MD5:1a:0e:a2:82:a5:08:bc:ed:23:7b:f7:c3:47:f0:dd:3b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.94.66' (ECDSA) to the list of known hosts.
root@192.168.94.66's password: 
Last login: Sat Aug 25 01:12:57 2018 from 192.168.94.66
[root@DaMoWang ~]# hostname -I
192.168.94.66 

這是源碼編譯升級 , 如果主機使用update升級更新系統 , 那么OpenSSH的版本會回退默認版本

順便說一下 , 之前用CentOS7更換OpenSSH版本 , 有坑 , systemctl restart sshd 啟動服務超時 , 服務啟動失敗 , 但是重啟服務那短暫的時間 , 還是可以連接上ssh的 

原因很多 , 根據自身實際情況來解決 

升級成功后不能使用systemctl start sshd啟動程序 : 

1、編譯安裝時未啟用某些功能支持導致使用舊配置文件無法啟動sshd,如GSSAPIAuthentication、UsePrivilegeSeparation
2、配置文件權限錯誤,導致無法啟動,如:ssh_host_rsa_key、ssh_host_ecdsa_key、ssh_host_ed25519_key

升級成功后輸入密碼無法登錄系統 :

1、未對配置文件進行修改,openssh7.5默認配置不允許使用root登錄系統
2、pam配置文件錯誤或丟失
3、配置文件中未啟用pam選項:UsePAM

如果實在運行不了ssh服務 , 那么好 , 就利用那重啟服務短暫的空隙 , 只需要讓服務無限重啟 , 保持ssh的進程即可 , 這個方法並不能解決實際問題 , 不過在沒找到問題原因之前 , 可以暫時使用

[root@test ~]# cat /etc/centos-release
CentOS Linux release 7.5.1804 (Core) 
[root@test ~]# vim /opt/restart-ssh.sh
#/bin/bash
ps -ef|grep "systemctl restart sshd"|awk '{print $2}'|xargs kill -9
nohup systemctl restart sshd &
# 服務啟動超時 , 殺掉ssh進程 , 再重啟ssh服務
# 加到計划任務中 10秒執行一次

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM