本文檔講述的升級操作是基於操作系統centos6.5,使用的openssl版本是openssl-1.0.2l.tar.gz,openssh版本是openssh-7.6p1.tar.gz。
1. 依賴檢查
檢查以下軟件是否安裝
#rpm -qa | grep gcc(檢查gcc是否安裝)
#yum install gcc(如果沒有gcc,安裝gcc,如果有,此步驟跳過)
#rpm -qa|grep pam(檢查pam是否安裝)
#yum install pam (如果沒有pam,安裝pam,如果有,此步驟跳過)
#rpm -qa|grep pam-devel(檢查pam-devel是否安裝)
#yum install pam-devel (如果沒有pam-devel,安裝pam-devel,如果有,此步驟跳過)
注意:pam-devel包必須與系統的pam包版本一致
#rpm -qa|grep zlib(檢查zlib是否安裝)
#yum install zlib(如果沒有zlib,安裝zlib,如果有,此步驟跳過)
#rpm -qa|grep zlib-devel(檢查zlib-devel是否安裝)
#yum install zlib-devel(如果沒有zlib-devel,安裝zlib-devel,如果有,此步驟跳過)
2. 開啟telnet服務和FTP服務
開啟telnet服務和ftp服務,防止升級ssh出現問題時,可以通過telnet登陸,以及通過ftp上傳文件。
2.1 檢查xinetd、telnet-server、vsftpd是否安裝
# rpm -qa | grep xinetd(檢查xinetd是否安裝)
# yum install xinetd(如果沒有,則安裝xinetd,否則跳過此步驟)
# rpm -qa | grep telnet-server(檢查telnet-server是否安裝)
# yum install telnet-server(如果沒有,則安裝telnet-server,否則跳過此步驟)
# rpm -qa | grep vsftpd(檢查vsftpd是否安裝)
# yum install vsftpd(如果沒有,則安裝vsftpd,否則跳過此步驟)
2.2 配置telnet
修改配置文件vim /etc/xinetd.d/telnet
service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
#disable = yes
disable = no
}
注意:將disable = yes 改為disable = no
2.3 啟動服務
chkconfig xinetd on (使telnet服務開機啟動,避免升級過程中服務器意外重啟后無法遠程登錄系統)
mv /etc/securetty /etc/securetty.old #允許root用戶通過telnet登錄
service xinetd start(啟動telnet服務)
service vsftpd start(啟動ftp服務)
telnet服務開啟后,測試下是否能通過telnet成功登陸
3. OpenSSL升級
下載地址:http://www.openssl.org/source
根據ssl安裝目錄不同,這里介紹兩種升級方式。
3.1 備份當前ssl
mv /usr/bin/openssl /usr/bin/openssl.old
mv /usr/include/openssl /usr/include/openssl.old
mv /usr/lib64/libssl.so.1.0.1e /usr/lib64/libssl.so.1.0.1e.old
3.2 方法一(安裝在/usr/local/openssl下)
(1) 卸載舊版本
rpm -qa | grep openssl (查看當前安裝的版本)
# 使用rpm命令卸載舊版本
rpm -e --nodeps openssl-1.0.0-27.el6.x86_64
rpm -e --nodeps openssl-devel-1.0.0-27.el6.x86_64
(2)安裝openssl
tar -zxvf openssl-1.0.2l.tar.gz (解壓文件)
cd openssl-1.0.2l
./config --prefix=/usr/local/openssl shared
make
make test(進行 SSL 加密協議的完整測試,如果出現錯誤就要一定先找出哪里的原因,否則一味繼續可能導致最終 SSH 不能使用)
make install
#設置軟鏈接
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
ln -s /usr/local/openssl/lib/libssl.so.1.0.0 /usr/lib64/libssl.so
ln -s /usr/local/openssl/lib/libssl.so.1.0.0 /usr/lib64/libssl.so.10
ln -s /usr/local/openssl/lib/libcrypto.so.1.0.0 /usr/lib64/libcrypto.so.10
#將 OpenSSL 的動態鏈接庫地址寫入動態鏈接裝入器(dynamic loader)
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
#重新加載動態鏈接庫
ldconfig -v
#查看當前系統的openssl版本
openssl version -a
3.3 方法二(安裝在/usr目錄下)
安裝在/usr目錄下,會覆蓋舊版本數據
(1) 卸載舊版本
rpm -qa | grep openssl (查看當前安裝的版本)
#使用rpm命令卸載舊版本
rpm -e --nodeps openssl-1.0.0-27.el6.x86_64
rpm -e --nodeps openssl-devel-1.0.0-27.el6.x86_64
(2) 安裝openssl
tar -zxvf openssl-1.0.2l.tar.gz (解壓文件)
cd openssl-1.0.2l
./config --prefix=/usr --shared
make
make test(進行 SSL 加密協議的完整測試,如果出現錯誤就要一定先找出哪里的原因,否則一味繼續可能導致最終 SSH 不能使用)
make install
#設置軟鏈接
ln -s /usr/lib64/libssl.so.1.0.0 /usr/lib64/libssl.so.10
ln -s /usr/lib64/libcrypto.so.1.0.0 /usr/lib64/libcrypto.so.10
#查看當前系統的openssl版本
openssl version -a
4. OpenSSH升級
下載地址:http://mirror.internode.on.net/pub/OpenBSD/OpenSSH/portable
(1) 備份當前ssh
mv /etc/ssh /etc/ssh.old
mv /etc/init.d/sshd /etc/init.d/sshd.old
(2) 卸載舊版本
rpm -e --nodeps `rpm -qa | grep openssh`
(3) 安裝ssh
tar -zxvf openssh-7.6p1.tar.gz (解壓)
cd openssh-7.6p1
./configure --prefix=/usr --with-zlib --sysconfdir=/etc/ssh --with-ssl-dir=/usr --with-md5-passwords --with-pam(注意:如果使用方法一安裝openssl,要將--with-ssl-dir=/usr改為--with-ssl-dir=/usr/local/openssl)
make
make install
#驗證openssh版本
ssh -V
(4) 啟動ssh服務
cp contrib/redhat/sshd.init /etc/init.d/sshd
chkconfig --add sshd
chkconfig sshd on
chkconfig --list sshd
service sshd restart
注意:如果升級操作一直是在ssh遠程會話中進行的,上述sshd服務重啟命令可能導致會話斷開並無法使用ssh再行登入(即ssh未能成功重啟),此時需要通過telnet登入再執行sshd服務重啟命令
5. 系統功能驗證后關閉telnet服務
驗證系統是否正常,沒有問題再關閉telnet服務
mv /etc/securetty.old /etc/securetty
chkconfig xinetd off
service xinetd stop
如需還原之前的ssh配置信息,可直接刪除升級后的配置信息,恢復備份。
rm -rf /etc/ssh
mv /etc/ssh.old /etc/ssh
6. FAQ
卸載openssl后,升級安裝后,執行某些命令時,可能會遇到一些錯誤
6.1 libcrypto.so.10錯誤
錯誤提示:error while loading shared libraries: libcrypto.so.10: cannot open shared object file: No such file or directory
原因:軟鏈接/usr/lib64/libcrypto.so.10不存在
解決方法:ln -s /usr/lib64/libcrypto.so.1.0.0 /usr/lib64/libcrypto.so.10,或者是 ln -s /usr/local/openssl/lib/libcrypto.so.1.0.0 /usr/lib64/libcrypto.so.10(根據openssl的實際安裝路徑來決定)
6.2 libssl.so.10錯誤
錯誤提示:libssl.so.10: cannot open shared object file: No such file or directory
原因:軟鏈接/usr/lib64/libssl.so.10不存在
解決方法:ln -s /usr/lib64/libssl.so.1.0.0 /usr/lib64/libssl.so.10,或者是ln -s /usr/local/openssl/lib/libssl.so.1.0.0 /usr/lib64/libssl.so.10(根據openssl的實際安裝路徑來決定)
6.3 OpenSSL version mismatch錯誤
錯誤提示:sshd:OpenSSL version mismatch. Built against 10000003, you have 100020cf(注意:由於安裝的ssl版本不同,錯誤提示可能不同,表現在10000003、100020cf上)
原因:ssh和ssl版本不匹配
解決方法:卸載系統自帶的openssh,安裝和現有openssl版本匹配的openssh