centos7生產環境下openssh升級


由於生產環境ssh版本太低,導致使用安全軟件掃描時提示系統處於異常不安全的狀態,主要原因是ssh漏洞。推薦通過升級ssh版本修復漏洞

因為是生產環境,所以有很多問題需要注意。為了保險起見,在生產環境下做的任何升級之類的操作,最好先在測試環境中先測試一下,如果測試沒問題再在生產環境中實施

系統環境:centos7.3

[root@localhost perl-5.28.0]# ssh -V

OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013

[root@localhost perl-5.28.0]# rpm -qa|grep zlib
zlib-1.2.7-17.el7.x86_64

有一個問題需要注意一下,那就是版本兼容問題。升級的openssh需要依賴於openssl和zlib,不同的openssh版本

下載地址

http://www.zlib.net/

https://www.openssl.org/source/        #這個下哪個版本一定要看openssh的要求,太高或者太低的版本都不行

http://www.openssh.com/portable.html

在安裝過程中可能會提示perl5沒安裝,所以我們可能還需要安裝perl5

http://www.perl.org/get.html#unix_like

 

注意一定要安裝telnet並開啟,否則ssh在升級過程中一旦出現什么問題,你就等着去機房操作吧。我就在升級過程中遇到過ssh服務重啟失敗的情況,導致無法ssh連接,還好有telnet-server,telnet安裝好之后也要測試能連接成功

下面正式開始操作

#OS:centos6.5
#注意事項:其中第一、二、四部分在需要升級ssh版本的服務器上執行,第三步在其他機器上通過telnet連接執行,第三步之后才能執行第四步
#第一部分:要求,telnet測試成功
#第二部分:要求,ssh -V顯示版本已更新,可以另開一個窗口ssh連接上去,yum list等也都可以正常使用
#第三部分:要求,通過telnet連接,重啟ssh服務
#第四部分:要求,撤銷開放的telnet連接,升級工作完成

#以下代碼區域的命令可以直接復制到腳本內執行,按照以下步驟來

#!/bin/bash
#第一部分:這一部分需要根據實際情況修改,版本不同要修改對應的文件名
#下載壓縮包
#注意查看新版openssh的zlib和openssl版本要求 http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/INSTALL
yum install wget -y  #安裝wget才能下載壓縮包啊,如果一下地址失效,可以直接訪問主頁尋找下載的地方
wget http://www.zlib.net/zlib-1.2.11.tar.gz
wget https://www.openssl.org/source/openssl-1.0.2q.tar.gz #注意最新版openssh不支持最新版本openssh
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-7.9p1.tar.gz
wget https://www.cpan.org/src/5.0/perl-5.28.0.tar.gz
#解壓
tar -zxvf  zlib*   #輸入zlib后直接按tab鍵回車即可
tar -zxvf  openssl*
tar -zxvf perl* #在安裝openssl前,還需要先安裝好perl5
tar -zxvf openssh*
#刪除壓縮包,否則我們后面不好針對文件操作
rm -rf *.tar.gz
#telnet服務
yum -y install telnet-server*


#以下內容為新增完善的,將xinetd里的telnet服務啟用
cat > /etc/xinetd.d/telnet <<EOF
service telnet
{
flags = REUSE
socket_type = stream
wait = no 
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
disable = no #啟用telnet
}
<<EOF

mv /etc/securetty /etc/securetty.old #允許root用戶通過telnet登錄 service xinetd start #啟動telnet服務 chkconfig xinetd on #使telnet服務開機啟動,避免升級過程中服務器意外重啟后無法遠程登錄系統 service iptables stop chkconfig --del iptables setenforce 0 sed -i 's/=enforcing/=disabled/' /etc/selinux/config echo "telnet設置完畢,請開啟一個終端測試"
echo "opensshversion=解壓后的openssh文件夾名,因為我們后面要用到openssh+版本
這一文件名,所以在這里先賦值留給后面,例如opensshversion=openssh-7.9p1"

接着新開一個ssh連接窗口(一定要能通過telnet成功連接上去才可以):

#測試telnet功能,新開一個連接終端

telnet [ip]

#!/bin/bash
#第二部分: #正式開始安裝 #zlib的更新
yum install gcc pam-devel zlib-devel -y #提前安裝好依賴 #tar -zxvf zlib-1.2.11.tar.gz #輸入zlib后直接按tab鍵回車即可 #cd zlib-1.2.11 cd zlib* ./configure --prefix=/usr #檢查依賴關系 make #編譯 rpm -e --nodeps zlib #卸載zlib make install #開始安裝 echo '/usr/lib' >> /etc/ld.so.conf ldconfig #執行完成后,看yum list是否可以正常使用,如果可以說明正常了 #准備安裝openssl find / -name openssl #不同版本會有不同的文件,對這些文件夾進行備份,如下 cp -r /etc/pki/ca-trust/extracted/openssl /etc/pki/ca-trust/extracted/openssl.old cp -r /usr/bin/openssl /usr/bin/openssl.old cp -r /usr/lib64/openssl /usr/lib64/openssl.old cp /usr/lib64/libcrypto.so.10 /usr/lib64/libcrypto.so.10.old #注意這兩個是庫文件,也需要先備份一下 cp /usr/lib64/libssl.so.10 /usr/lib64/libssl.so.10.old #rpm -qa|grep openssl #對返回的結果進行卸載,如下,不同版本也會是不同的文件 #rpm -e --nodeps openssl-1.0.1e-60.el7.x86_6457 rpm -qa |grep openssl|xargs -i rpm -e --nodeps {} #該命令相當於直接執行以上兩條命令 cd #tar -zxvf openssl-1.0.2o.tar.gz #cd openssl* #./config --prefix=/usr --openssldir=/etc/ssl --shared zlib #在執行這里的時候,會提示沒有安裝perl5,所以還需要安裝perl5 #cd #wget https://www.cpan.org/src/5.0/perl-5.28.0.tar.gz #tar -zxvf perl-5.28.0.tar.gz #在安裝openssl前,還需要先安裝好perl5 cd perl* ./Configure -des -Dprefix=$HOME/localperl make  #這幾步操作都很耗時 make test #這里可能提示失敗 cd t chmod +x ../cpan/File-Path/t/Path_root.t ../cpan/File-Path/t/Path_root.t ./perl -I../lib harness op/filetest.t #如果這里提示全部成功了,應該就沒什么問題 cd .. make install perl -v #檢測perl5是否安裝成功 cd .. cd openssl* ./config --prefix=/usr --openssldir=/etc/ssl --shared zlib #繼續安裝openssl make make test make install openssl version cd mv -f /usr/lib64/libcrypto.so.10.old /usr/lib64/libcrypto.so.10 #恢復原來的庫文件,因為新安裝的openssl沒包含這兩個庫文件 mv -f /usr/lib64/libssl.so.10.old /usr/lib64/libssl.so.10 openssl version #安裝openssh mv /etc/ssh /etc/ssh.old #開始准備安裝openssh #rpm -qa|grep openssh #rpm -e --nodeps openssh-5.3p1-94.el6.x86_64 #rpm -e --nodeps openssh-server-5.3p1-94.el6.x86_64 rpm -qa |grep openssh|xargs -i rpm -e --nodeps {} install -v -m700 -d /var/lib/sshd chown -v root:sys /var/lib/sshd groupadd -g 50 sshd useradd -c 'sshd PrivSep' -d /var/lib/sshd -g sshd -s /bin/false -u 50 sshd #tar -zxvf openssh-7.9p1.tar.gz cd openssh* ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-zlib --with-openssl-includes=/usr --with-privsep-path=/var/lib/sshd make make install 執行可能會提示WARNING: UNPROTECTED PRIVATE KEY FILE!原因是下面幾個文件的權限問題,所以先執行以下命令 chmod 600 /etc/ssh/ssh_host_rsa_key chmod 600 /etc/ssh/ssh_host_ecdsa_key chmod 600 /etc/ssh/ssh_host_ed25519_key ssh -V install -v -m755 contrib/ssh-copy-id /usr/bin install -v -m644 contrib/ssh-copy-id.1 /usr/share/man/man1 install -v -m755 -d /usr/share/doc/openssh-7.9p1 install -v -m644 INSTALL LICENCE OVERVIEW README* /usr/share/doc/openssh-7.9p1 echo 'X11Forwarding yes' >> /etc/ssh/sshd_config cp -p contrib/redhat/sshd.init /etc/init.d/sshd chmod +x /etc/init.d/sshd chkconfig --add sshd chkconfig sshd on chkconfig --list sshd echo "PermitRootLogin yes" >>/etc/ssh/sshd_config #openssh7.9需要執行這個,默認配置文件禁止使用密碼登錄,不執行你就無法通過ssh登錄

然后

#第三部分:
#通過telnet連接,重啟ssh服務
service sshd restart
ssh -V #提示ssh為安裝的最新版本,升級成功

#!/bin/bash
#第四部分: #善后工作,取消telnet
mv /etc/securetty.old /etc/securetty chkconfig xinetd off service xinetd stop

 

附加知識:

#版本回退,如需還原之前的ssh配置信息,可直接刪除升級后的配置信息,恢復備份。
rm -rf /etc/ssh
mv /etc/ssh.old /etc/ssh

有時候我們還會遇到openssh已經升過級的情況,而且安裝方式還是編譯安裝的,很明顯上面的方式就不合適了

所以我們的的rpm -qa|grep ssh卸載方式那里需要換一下

find / -name ssh  一般會返回舊版本的安裝路徑,里面包含舊版本號的就是舊openssh的安裝路徑

進入該路徑執行cp -r /etc/ssh /etc/ssh.old 先做一個備份,再執行make uninstall就可以卸載了,其他步驟跟上面相似

 

備注:第二次修改(應該沒有什么特別大的問題了)


免責聲明!

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



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