centOS升級SSH到OpenSSH_7.5p1

http://www.cnblogs.com/xshrim/p/6472679.html (Redhat 6.7 x64升級SSH到OpenSSH_7.4p1完整文檔 )

http://www.linuxidc.com/Linux/2017-05/143568.htm (CentOS 6.6升級OpenSSH到最新版本7.5.p1)

 

 

yum install gcc pam-devel zlib-devel

一、升級原因

7.4以下openssh版本存在嚴重漏洞:

1.OpenSSH 遠程權限提升漏洞(CVE-2016-10010)  

2.OpenSSH J-PAKE授權問題漏洞(CVE-2010-4478)  

3.Openssh MaxAuthTries限制繞過漏洞(CVE-2015-5600)  

OpenSSL>=1.0.1可以不用升級OpenSSL

 

二、安裝telnet服務

1、安裝軟件

1 # yum -y install telnet-server* telnet

 

2、啓用telnet服務,先關閉防火牆,否則telnet可能無法連接

# service iptables stop

# chkconfig iptables off

# vim /etc/xinetd.d/telnet 

將其中disable字段的yes改爲no以啓用telnet服務 

# mv /etc/securetty /etc/securetty.old    #允許root用戶通過telnet登錄   該/etc/securetty文件作用

# service xinetd start                    #啓動telnet服務 

# chkconfig xinetd on                    #使telnet服務開機啓動,避免升級過程中服務器意外重啓後無法遠程登錄系統

 

3、測試telnet能否正常登入系統

         控制面板中 程序-啓用或關閉windows程序 中打開 Telnet客戶端,則在cmd界面中就可以

         telnet ip或者域名  端口號

      C:\Windows\system32>telnet ip 23      #ip爲你自己要登錄的服務器ip

輸入用戶名,密碼就OK 表示成功了。

       退出telnet命令 ctrl+]  然後在telnet 命令行輸入 quit  就可以退出了。

 

三、升級openssL 因爲有openssl協議相關的升級,OpenSSL>=1.0.1可以不用升級

故:

1、備份當前openssl; 下載地址https://www.openssl.org/source/old/

# find / -name openssl

/usr/lib64/openssl

/usr/include/openssl

/usr/bin/openssl

/etc/pki/ca-trust/extracted/openssl

 

# mv  /usr/lib64/openssl /usr/lib64/openssl.old

# mv  /usr/include/openssl /usr/include/openssl.old

# mv  /usr/bin/openssl  /usr/bin/openssl.old

# mv  /etc/pki/ca-trust/extracted/openssl  /etc/pki/ca-trust/extracted/openssl.old

 

       如下兩個庫文件必須先備份,因系統內部分工具(如yum、wget等)依賴此庫,而新版OpenSSL不包含這兩個庫

 

  # cp  /usr/lib64/libcrypto.so.10  /usr/lib64/libcrypto.so.10.old

  # cp  /usr/lib64/libssl.so.10  /usr/lib64/libssl.so.10.old

2、卸載

# rpm -qa | grep openssl

openssl-1.0.1e-42.el6.x86_64

 

# rpm -e --nodeps openssl-1.0.1e-42.el6.x86_64

# rpm -qa | grep openssl

或者直接執行此命令:rpm -qa |grep openssl|xargs -i rpm -e --nodeps {}

3、解壓openssl_1.0.1u源碼並編譯安裝

# tar -zxvf openssl-1.0.1u.tar.gz

# cd openssl-1.0.1u

# ./config --prefix=/usr --openssldir=/etc/ssl --shared zlib    #必須加上--shared,否則編譯時會找不到新安裝的openssl的庫而報錯

# make

# make test                            #必須執行這一步結果爲pass才能繼續,否則即使安裝完成,ssh也無法使用

# make install

# openssl version -a                   #查看是否升級成功

 

4、恢復共享庫

 

       具體執行時請先查看是否新版本,並驗證是否生產新的文件;由於新版本OpenSSL不提供libcrypto.so.10和libssl.so.10這兩個庫,而yum、wget等工具又依賴此庫,因此需要將先前備份的這兩個庫進行恢復,其他的可視情況考慮是否恢復。

# mv  /usr/lib64/libcrypto.so.10.old  /usr/lib64/libcrypto.so.10

# mv  /usr/lib64/libssl.so.10.old  /usr/lib64/libssl.so.10

 

四、升級openSSH,下載頁面http://www.openssh.com/portable.html

1、備份當前openssh

    # mv /etc/ssh /etc/ssh.old

2、卸載當前openssh

 

[root@localhost home]#  rpm -qa | grep openssh

openssh-server-5.3p1-122.el6.x86_64

openssh-clients-5.3p1-122.el6.x86_64

openssh-5.3p1-122.el6.x86_64

openssh-askpass-5.3p1-122.el6.x86_64

 

[root@localhost home]# rpm -e --nodeps openssh-server-5.3p1-122.el6.x86_64

[root@localhost home]# rpm -e --nodeps openssh-clients-5.3p1-122.el6.x86_64

[root@localhost home]# rpm -e --nodeps openssh-5.3p1-122.el6.x86_64

[root@localhost home]# rpm -e --nodeps openssh-askpass-5.3p1-122.el6.x86_64

再次查看

[root@localhost home]# rpm -qa | grep openssh    已經卸載完成

 

或者直接執行此命令:rpm -qa |grep openssh|xargs -i rpm -e --nodeps {}

 

注意:卸載過程中如果出現以下錯誤 

[root@localhost home]# rpm -e --nodeps openssh-server-5.3p1-122.el6.x86_64  

error reading information on service sshd: No such file or directory 

error: %preun(openssh-server-5.3p1-122.el6.x86_64) scriptlet failed, exit status 1 

解決方法: 

# rpm -e --noscripts openssh-server-5.3p1-104.el6.x86_64

 

3、openssh安裝前環境配置

 

注意: 必須備份 /etc/pam.d/sshd

# mv /etc/pam.d/sshd /etc/pam.d/sshd.old

不備份,否則最後登錄不上的。

 

# install -v -m700 -d /var/lib/sshd

# chown -v root:sys /var/lib/sshd

當前系統sshd用戶已經存在的話以下不用操作 

# groupadd -g 50 sshd

# useradd  -c 'sshd PrivSep' -d /var/lib/sshd -g sshd -s /bin/false -u 50 sshd

 

4、解壓openssh_7.5p1源碼並編譯安裝

 

[root@localhost home]# tar -zxvf openssh-7.5p1.tar.gz

[root@localhost home]# cd openssh-7.5p1

[root@localhost openssh-7.5p1]# ./configure --prefix=/usr  --sysconfdir=/etc/ssh  --with-md5-passwords  --with-pam  --with-zlib --with-openssl-includes=/usr --with-privsep-path=/var/lib/sshd

[root@localhost openssh-7.5p1]# make

[root@localhost openssh-7.5p1]# make install

 

5、openssh安裝後環境配置

 

 在openssh編譯目錄執行如下命令

[root@localhost openssh-7.5p1]# install -v -m755    contrib/ssh-copy-id /usr/bin

[root@localhost openssh-7.5p1]# install -v -m644    contrib/ssh-copy-id.1 /usr/share/man/man1

[root@localhost openssh-7.5p1]# install -v -m755 -d /usr/share/doc/openssh-7.5p1

[root@localhost openssh-7.5p1]# install -v -m644    INSTALL LICENCE OVERVIEW README* /usr/share/doc/openssh-7.5p1

[root@localhost openssh-7.5p1]# ssh -V              #驗證是否升級成功

 OpenSSH_7.5p1, OpenSSL 1.0.1e-fips 11 Feb 2013

     因我本身沒更新openssl版本原因

6、啓用OpenSSH服務

 

 在openssh編譯目錄執行如下目錄

[root@localhost openssh-7.5p1]# echo 'X11Forwarding yes' >> /etc/ssh/sshd_config

[root@localhost openssh-7.5p1]# echo "PermitRootLogin yes" >> /etc/ssh/sshd_config  

                                     #允許root用戶通過ssh登錄

[root@localhost openssh-7.5p1]# cp -p contrib/redhat/sshd.init /etc/init.d/sshd

注意: 這一操作很重要!很重要!很重要!重要的事情說三遍,因爲openssh安裝好默認是不執行sshd_config文件的,所以即使在sshd_config中配置允許root用戶遠程登錄,但是不加上這句命令,還是不會生效!

vim /etc/init.d/sshd

在 ‘$SSHD $OPTIONS && success || failure’這一行上面加上一行 OPTIONS="-f /etc/ssh/sshd_config"

保存退出

 

[root@localhost openssh-7.5p1]# chmod +x /etc/init.d/sshd

[root@localhost openssh-7.5p1]# chkconfig  --add  sshd                      #加入系統服務

[root@localhost openssh-7.5p1]# chkconfig  sshd  on                           #自啓動

[root@localhost openssh-7.5p1]# chkconfig  --list  sshd                       #查看系統啓動服務是否增加改項

sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off

[root@localhost openssh-7.5p1]# service sshd start

注意:這裏必須先檢查/etc/pam.d/下沒有生成的有 sshd還原 /etc/pam.d/sshd 文件纔行;

[root@localhost openssh-7.5p1]# mv /etc/pam.d/sshd.old /etc/pam.d/sshd

 

五、善後工作

 

    新開啓遠程終端以ssh [ip]登錄系統,確認一切正常升級成功後,只需關閉telnet服務以保證系統安全性即可。

# mv /etc/securetty.old /etc/securetty

# chkconfig  xinetd off

# service xinetd stop

 

  如有必要,可重新開啓防火牆

  # service iptables start

  # chkconfig iptables on

 

    此時可以直接登錄了;有時新版本升級後,在xshell客戶端相關中鏈接出現找不到匹配的outgoing encryption算法(No matching outgoing encryption algorithm found);設置下客戶端工具的編碼方式即可,網上自己查閱;但如需還原之前的ssh配置信息,可直接刪除升級後的配置信息,恢復備份。

# rm -rf /etc/ssh

# mv /etc/ssh.old /etc/ssh

 

 注意:我操作的時候,發現 /etc/pam.d/ 目錄下的 sshd 文件不存在了,後來拷貝了一個別的系統的過來才能登錄;並且還原/etc/securetty文件纔行。一旦該文件,則telnet 就不能登錄了。 故建議採用dropbear 第3方工具來操作。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章