背景說明
最近公司項目上客戶提供的云主機(jī),被云服務(wù)器提供商掃描告知有許多openssh漏洞,一下想到的就是升級到最新版本,可是大家都知道openssh是一個非常重要的服務(wù),實在不敢隨意升級于是就在虛擬機(jī)里面進(jìn)行了多次模擬演練,結(jié)果都失敗了。
經(jīng)過一番百度和不斷的模擬對比,對升級過程進(jìn)行一步一步的仔細(xì)探索,終于將openssh升級到最新版7.5p1,其中sshd和sftp-server均正常功能,至于x11功能未進(jìn)行測試。
升級中遇到的坑
遇到問題多看日志,仔細(xì)分析,由于修復(fù)漏洞的時間比較緊,當(dāng)時沒有仔細(xì)分析日志,待安裝完成后,再重新進(jìn)行問題重現(xiàn)的過程中仔細(xì)查看分析日志才知道原來都是一些配置錯誤。
- 升級過程中ssh不會因為重啟斷開,一定要在啟一個窗口測試可以登錄之后再關(guān)閉當(dāng)前的ssh鏈接,避免升級不成功導(dǎo)致不能遠(yuǎn)程連接到服務(wù)器。
- 升級成功后不能使用systemctl start sshd啟動程序
原因分析:
1、編譯安裝時未啟用某些功能支持導(dǎo)致使用舊配置文件無法啟動sshd,如GSSAPIAuthentication、UsePrivilegeSeparation
2、配置文件權(quán)限錯誤,導(dǎo)致無法啟動,如:ssh_host_rsa_key、ssh_host_ecdsa_key、ssh_host_ed25519_key - 升級成功后輸入密碼無法登錄系統(tǒng)
原因分析:
1、未對配置文件進(jìn)行修改,openssh7.5默認(rèn)配置不允許使用root登錄系統(tǒng)
2、pam配置文件錯誤或丟失
3、配置文件中未啟用pam選項:UsePAM
升級準(zhǔn)備
在升級過程中,測試了源碼編碼及使用源碼創(chuàng)建rpm進(jìn)行升級,此文先將源碼編譯升級進(jìn)行講解,之后再講解如何使用rpmbuild命令創(chuàng)建rpm進(jìn)行安裝
(1) 下載源碼包,下載地址如下
openssh-7.5p1 下載地址:
https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/openssh-7.5p1.tar.gz
其他版本openssh下載地址:
https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/
cd /opt
wget https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/openssh-7.5p1.tar.gz
(2) 備份原openssh配置文件
cp /etc/ssh{,.old_$(date '+%s')}
cp /etc/pam.d/sshd{,.old_$(date '+%s')}
(3) 安裝依賴
yum -y install gcc automake zlib-devel openssl-devel pam-devel
(4) 解壓編譯安裝
tar xf openssh-7.5p1.tar.gz
cd openssh-7.5p1
./configure --prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin \
--sysconfdir=/etc/ssh --mandir=/usr/share --docdir=/usr/share /doc/openssh75 \
--with-pam --with-md5-passwords --with-zlib --with-ssl
make && make install
(5) 修改配置文件sshd_config,如果無法遠(yuǎn)程,請多查看報錯根據(jù)報錯來修改配置文件。下面是推薦可用參數(shù)
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
PermitRootLogin yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
Subsystem sftp /usr/libexec/sftp-server
(6) 重啟服務(wù)
systemctl restart sshd
安裝腳本:
mkdir /opt/backup
mv /etc/ssh /opt/backup
cp /etc/pam.d/sshd /opt/backup
yum -y install gcc automake openssl-devel zlib-devel pam-devel
tar xf openssh-7.5p1.tar.gz
cd openssh-7.5p1
./configure --prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc/ssh --mandir=/usr/share --docdir=/usr/share/doc/openssh75 --with-pam --with-md5-passwords --with-zlib --with-ssl
make
mv sshd_config{,old_$(date '%s')}
cat >> sshd_config << SSHDEOF
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
PermitRootLogin yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
Subsystem sftp /usr/libexec/sftp-server
SSHDEOF
cp contrib/redhat/sshd.init /etc/init.d/sshd
chmod 755 /etc/init.d/sshd
chkconfig --add sshd
chkconfig sshd on
rpm -qa | grep openssh | xargs rpm -e --nodeps
cp /opt/backup/sshd /etc/pam.d/
make install
service sshd start