漏洞掃描工具掃描出openssh用戶枚舉漏洞,搜索資料得知無補丁和升級包,解決這個漏洞得安裝漏洞修復之后的版本version>7.8。
環境
linux版本: CentOS Linux release 7.5.1804
ssh版本: OpenSSH_7.4p1
升級前准備
-
備份
-
備份ssh配置
mkdir -p /bak
cp -ar /etc/ssh /bak
-
備份老版本的openssh軟件包
[root@localhost soft]# rpm -qa|grep openssh
openssh-7.4p1-16.el7.x86_64
openssh-server-7.4p1-16.el7.x86_64
openssh-clients-7.4p1-16.el7.x86_64可以去網上下載,這里上傳的雲盤:
鏈接: https://pan.baidu.com/s/1K9PRWji99IeSoWc6O6rcfw 提取碼: ex5v
下載openssh7.4.zip, 將這些文件全部上傳至要升級的服務器。
-
安裝telnet服務,防止ssh升級后登錄不上
網盤里telnet.zip解壓安裝即可:
[root@localhost telnet_dir]# ls telnet-0.17-64.el7.x86_64.rpm telnet-server-0.17-64.el7.x86_64.rpm xinetd-2.3.15-13.el7.x86_64.rpm [root@localhost telnet_dir]# rpm -iv --force --nodeps *.rpm [root@localhost telnet_dir]# chkconfig xinetd on 注意:正在將請求轉發到“systemctl enable xinetd.service”。 [root@localhost telnet_dir]# chkconfig telnet on 注意:正在將請求轉發到“systemctl enable telnet.socket”。 Created symlink from /etc/systemd/system/sockets.target.wants/telnet.socket to /usr/lib/systemd/system/telnet.socket. [root@localhost telnet_dir]# systemctl start telnet.socket [root@localhost telnet_dir]# systemctl start xinetd # 測試telnet是否連接正常,默認配置不支持root登錄,最好建一個普通用戶登錄,再su到root,升級完成再userdel -r 刪除用戶即可,也可以更改配置允許root通過telnet登錄。 [root@localhost telnet_dir]# useradd tom [root@localhost telnet_dir]# passwd tom 進行遠程telnet連接測試
-
構建openssh7.9p1的rpm包
這里為了更省事,防止網絡等環境問題,構建openssh的rpm包進行安裝。上面從我的網盤鏈接里下載了openssh.zip文件的可以忽略這一步,因為openssh.zip里面已經構建好了openssh7.9p1的rpm包,直接進行升級安裝即可。
[root@localhost ~]# mkdir -p /usr/src/redhat/{SOURCES,SPECS}
[root@localhost ~]# cd /usr/src/redhat/SOURCES/
[root@localhost SOURCES]# wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-7.9p1.tar.gz
[root@localhost SOURCES]# tar -zvxf openssh-7.9p1.tar.gz openssh-7.9p1/contrib/redhat/openssh.spec
[root@localhost SOURCES]# mv openssh-7.9p1/contrib/redhat/openssh.spec ../SPECS/
[root@localhost SOURCES]# chown sshd:sshd /usr/src/redhat/SPECS/openssh.spec
[root@localhost SOURCES]# cp /usr/src/redhat/SPECS/openssh.spec /usr/src/redhat/SPECS/openssh.spec_def
[root@localhost SOURCES]# sed -i -e "s/%define no_gnome_askpass 0/%define no_gnome_askpass 1/g" /usr/src/redhat/SPECS/openssh.spec
[root@localhost SOURCES]# sed -i -e "s/%define no_x11_askpass 0/%define no_x11_askpass 1/g" /usr/src/redhat/SPECS/openssh.spec
[root@localhost SOURCES]# mkdir -p ~/rpmbuild/SOURCES/
[root@localhost SOURCES]# cp /usr/src/redhat/SOURCES/openssh-7.9p1.tar.gz ~/rpmbuild/SOURCES/
[root@localhost SOURCES]# cd /usr/src/redhat/SPECS/
[root@localhost SPECS]# rpmbuild -ba openssh.spec
[root@localhost SPECS]# ll /root/rpmbuild/RPMS/x86_64/openssh-*
-rw-r--r-- 1 root root 496204 1月 17 13:31 /root/rpmbuild/RPMS/x86_64/openssh-7.9p1-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 548576 1月 17 13:31 /root/rpmbuild/RPMS/x86_64/openssh-clients-7.9p1-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 2508852 1月 17 13:31 /root/rpmbuild/RPMS/x86_64/openssh-debuginfo-7.9p1-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 391696 1月 17 13:31 /root/rpmbuild/RPMS/x86_64/openssh-server-7.9p1-1.el7.x86_64.rpm
參考:https://blog.csdn.net/qq_42609381/article/details/82855043
# 編譯過程遇到的錯誤:
錯誤:構建依賴失敗: openssl-devel < 1.1 被 openssh-7.9p1-1.el7.x86_64 需要
解決:[root@localhost SPECS]# vim openssh.spec 注釋掉 BuildRequires: openssl-devel < 1.1 這一行
錯誤:configure: error: PAM headers not found
RPM 構建錯誤: /var/tmp/rpm-tmp.OB3GHI (%build) 退出狀態不好
解決: yum install pam-devel
錯誤:壞文件:/root/rpmbuild/SOURCES/x11-ssh-askpass-1.2.4.1.tar.gz: 沒有那個文件或目錄
解決:
wget http://ftp.riken.jp/Linux/momonga/6/Everything/SOURCES/x11-ssh-askpass-1.2.4.1.tar.gz
cp x11-ssh-askpass-1.2.4.1.tar.gz /root/rpmbuild/SOURCES/
升級
-
卸載當前版本的openssh
rpm -e `rpm -qa |grep openssh` 如果有依賴: rpm -e `rpm -qa |grep openssh` --nodeps
-
刪除/etc/ssh/下所有文件(注意檢查是否備份)
rm -rf /etc/ssh/*
-
rpm安裝openssh7.9p1
unzip openssh.zip rpm -iv --force --nodeps *.rpm
-
配置服務
設置開機啟動: chkconfig sshd on 編輯ssh配置文件: vim /etc/ssh/sshd_config 配置: PasswordAuthentication yes 如果要允許root用戶ssh登錄需要配置:PermitRootLogin yes 服務重啟 service sshd restart 驗證連接和版本 ssh -V
可以直接恢復之前的ssh配置文件看能否成功,我這里直接恢復之前的配置文件可以啟動但無法連接,我注釋掉GSS和PAM后可以連接。
#GSSAPIAuthentication yes
#GSSAPICleanupCredentials no
#UsePAM yes
卸載telnet
升級完成之后如果需要卸載telnet,進行如下步驟即可(卸載之前確保ssh連接已經沒有問題):
systemctl stop xinetd
systemctl stop telnet.socket
chkconfig xinetd off
chkconfig telnet off
rpm -e `rpm -qa|egrep "telnet|xinetd"`
# 最后刪除之前測試telnet新建的普通用戶
userdel -r tom