原來公司有一個項目抬吟,因為客戶的服務(wù)器系統(tǒng)上openssh版本低火本,掃描有漏洞钙畔,需要做openssh升級擎析,因此在網(wǎng)上查了很多升級openssh的資料揍魂,實踐的時候踩過很多的坑,但是最后還是升級成功了偎蘸,這里整理記錄一下升級的過程,以免大家重復(fù)踩同樣的坑遂鹊。
以前我發(fā)布在了百度經(jīng)驗上面慧邮,現(xiàn)在重新錄入在簡書里面误澳。
系統(tǒng):CentOS7
需要準備的包(準備這些rpm包忆谓,是因為我要升級的服務(wù)器無法聯(lián)網(wǎng))
openssl-1.0.2o.tar.gz
openssh-7.7p1.tar.gz
pam-1.1.8-22.el7.x86_64.rpm
pam-devel-1.1.8-22.el7.x86_64.rpm
zlib-1.2.7-17.el7.x86_64.rpm
zlib-devel-1.2.7-17.el7.x86_64.rpm
telnet-0.17-64.el7.x86_64.rpm
telnet-server-0.17-64.el7.x86_64.rpm
openssl-1.0.2k-12.el7.x86_64.rpm
之所以需要低版本的openssl倡缠,是因為如果在后面卸載openssl后昙沦,無法繼續(xù)操作的話盾饮,再次安裝openssl普办,不至于造成系統(tǒng)無法使用泌豆。
這些包可以自己搜索一下去下載踪危,也可以通過yumdownload來下載贞远。(yumdownload 是安裝yum-utils后可以使用)
例如下載pam蓝仲,可以執(zhí)行:
#yumdownload pam
升級openssh袱结,先要開啟telnet,確保telnet可以正常登陸维费。這樣當openssh升級出現(xiàn)問題的時候而晒,還可以通過telnet登錄到服務(wù)器操作倡怎。
安裝依賴包
pam,pam-devel,xinted,zlib,zlib-devel,telnet,telnet-server
安裝pam
先查看是否有pam已經(jīng)安裝
#rpm? -qa |grep pam
服務(wù)器上面有pam的包豹障。
采用rpm -U升級安裝血公,免得rpm -e? --nodeps卸載包出現(xiàn)問題累魔。(而且真有可能出現(xiàn)問題垦写,尤其是zlib包)
#rpm? -Uvh? pam-1.1.8-22.el7.x86_64.rpm
#rpm -Uvh? pam-devel-1.1.8-22.el7.x86_64.rpm
安裝xinted
#rpm? -Uvh? xinetd-2.3.15-13.el7.x86_64.rpm
安裝zlib
#rpm? -Uvh? zlib-1.2.7-17.el7.x86_64.rpm
#rpm? -Uvh? zlib-devel-1.2.7-17.el7.x86_64.rpm
安裝telnet
#rpm? -Uvh? telnet-0.17-64.el7.x86_64.rpm
#rpm? -Uvh? telnet-server-0.17-64.el7.x86_64.rpm
開啟xinetd
#systemctl? start? xinetd
查看狀態(tài)
#systemctl? status? xinetd
#systemctl? enable? xinetd
啟動telnet
# systemctl start telnet.socket
# systemctl status telnet.socket
# systemctl enable telnet.socket
默認情況下分蓖,telnet是不允許root登錄的么鹤。
執(zhí)行命令:
# echo "pts/0" >> /etc/securetty
# echo "pts/1" >> /etc/securetty
關(guān)閉selinux
#vi /etc/selinux/config
如下圖將selinux設(shè)置為disable
關(guān)閉防火墻
# systemctl stop? iptables
編輯pam配置文件,以便telnet允許root登錄柠新。
# vi /etc/pam.d/login
如圖注釋這一行
編輯配置文件:
#vi? /etc/pam.d/remote
如圖注釋這一行
auth? ? ? required? ? pam_securetty.so
重啟xinetd,telnet服務(wù)
#systemctl? restart? xinetd
#systemctl? restart? telnet.socket
然后從其他服務(wù)器利用telnet測試登錄(當然另外一臺服務(wù)器上已經(jīng)安裝了telnet)
#telnet? ip
輸入賬號密碼红氯,登錄成功。
telnet可以登錄茉贡,實際上是開了另外一條可以登錄服務(wù)器的通道腔丧,以免ssh升級出錯,造成無法登錄服務(wù)器拿撩。
如圖压恒,我要升級的服務(wù)器ip地址是10.0.30.100探赫,從另外一臺機器上telnet登錄到30.100
升級OpenSSL
先確保你的服務(wù)器上已經(jīng)有g(shù)cc撬呢,gcc-c++魂拦。這兩個是編譯工具晨另。
#rpm? -qa? |grep? gcc
若沒有安裝借尿,則執(zhí)行安裝路翻,這里我已經(jīng)下載了gcc,gcc-c++的包蝶桶。
如果你的服務(wù)器聯(lián)網(wǎng)真竖,可以執(zhí)行:
#yum? install? gcc? gcc-c++
如果沒有聯(lián)網(wǎng)恢共,就提前下載rpm包讨韭,可以采取上面yumdownload方法從聯(lián)網(wǎng)服務(wù)器上下載透硝。(也可以采用yum安裝,然后將yum的cache打開埋泵,這樣在安裝的時候就會保存下來下載的所有的依賴包)
建議yum安裝秋泄,否則你將要下載很多依賴包。
上圖谁撼,是為了安裝gcc厉碟,gcc-c++崭参,下載的所有依賴包款咖。
因為一開始安裝的時候铐殃,會返回下圖依賴錯誤富腊。
然后根據(jù)依賴錯誤赘被,下載了所有的依賴包民假。
如下圖這樣阳欲,相互依賴的秽晚。安裝這個筒愚,返回依賴錯誤(已安裝的版本不一致造成),安裝那個就返回這個依賴錯誤句伶。
這樣的考余,直接rpm -Uvh 后面跟這兩個安裝包的名字。
rpm -Uvh glibc-common*.rpm glibc-2.17*.rpm
卸載舊的openssl包身冬。
#rpm? -qa? |grep openssl
解壓openssl安裝包
#tar? -xvf? openssl-1.0.2o.tar.gz
卸載這些包酥筝。
#for? i? in? $(rpm? -qa |grep? openssl);do? rpm? -e? $i --nodeps? ;done
進入openssl-1.0.2o目錄
#cd? openssl-1.0.2o
執(zhí)行:
#./config? shared
執(zhí)行安裝
#make? &&? make? install
安裝完畢剿配。
執(zhí)行命令:
#echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
#ldconfig
配置ssl庫
#cp /usr/local/ssl/lib/libssl.so.1.0.0? /usr/lib64
#cp /usr/local/ssl/lib/libcrypto.so.1.0.0? /usr/lib64
#ln -s /usr/lib64/libcrypto.so.1.0.0? /usr/lib64/libcrypto.so.10
#ln -s /usr/lib64/libcrypto.so.1.0.0? /usr/lib64/libcrypto.so
#ln -s /usr/lib64/libssl.so.1.0.0? /usr/lib64/libssl.so.10
#ln -s /usr/lib64/libssl.so.1.0.0? /usr/lib64/libssl.so
#ln -s /usr/local/ssl/bin/openssl? /usr/bin/openssl
#ln -s /usr/local/ssl/include/openssl? /usr/include/openssl
查看openssl版本
#openssl? version? -a
升級成功
升級OpenSSH
解壓openssh安裝包
#tar? xvf? openssh-7.7p1.tar.gz
#cd? openssh-7.7p1
卸載原openssh
#rpm? -qa |grep? openssh
卸載
#for? i? in? $(rpm? -qa? |grep? openssh);do? rpm? -e? $i? --nodeps ;done
執(zhí)行:
#./configure --prefix=/usr? --sysconfdir=/etc/ssh --with-md5-passwords? --with-pam? --with-tcp-wrappers? --with-ssl-dir=/usr/local/ssl? ? --without-hardening
刪除原ssh配置目錄
#rm? -rf? /etc/ssh
安裝
#make? &&? make? install
安裝完成蝇更,執(zhí)行配置
#cp? ./contrib/redhat/sshd.init? ? /etc/init.d/sshd
#chkconfig --add sshd
#chkconfig sshd on
#chkconfig --list|grep sshd
查看版本
#ssh? -V
執(zhí)行命令(這一步也很重要):
#sed -i "32 aPermitRootLogin yes" /etc/ssh/sshd_config
#service? sshd? restart
升級完成蚁廓。
從其他服務(wù)器ssh登錄升級的服務(wù)器相嵌,登錄成功饭宾!
注意:不要輕易卸載zlib軟件