1、問題描述(默認Linux安裝的SSHD服務存在一些漏洞,特此升級)node
在曾經手動升級sshd服務後發現了三個後遺症:linux
selinux開啓的狀態下,重啓機器sshd不啓動(緣由:庫文件「libcrypto.so.1.0.0」的selinux標記不正確,致使sshd沒法調用訪問該文件,使用setroubleshoot工具找到緣由)c++
hosts.allow,hosts.deny對sshd不起做用(緣由:編譯時未加上--with-tcp-wrappers)bash
sftp沒法使用(緣由:源碼安裝後配置文件未找到sftp-server工具)app
爲了方便之後安裝,再加上修補以上遺留問題,特寫成腳本。(腳本測試在CentOS6.五、RHEL6.四、CentOS5.10測試經過)ssh
注意事項:爲了下降風險,運行腳本以前,需以telnet登錄系統取得root權限(telnet默認不容許root登錄,能夠設置容許root或者以普通用戶切換)tcp
2、安裝工具
1. 工具包:openssh-6.6p1.tar.gz openssl-1.0.1g.tar.gz測試
openssh: http://mirror.internode.on.net/pub/OpenBSD/OpenSSH/portable/ .net
openssl: ftp://ftp.openssl.org/source/old/1.0.1/
2. 安裝時將腳本和兩個包放在相同路徑下,解決依賴請配置好YUM倉庫
3. 腳本:updatesshd.sh
#!/bin/bash #-------------------------------------| #"WARING"!!! Please use telnet-server.| #"WARING"!!! Please use telnet-server.| #"WARING"!!! Please use telnet-server.| #-------------------------------------| ssh_update() { #Backup the old files SSL_VER=openssl-1.0.1g SSH_VER=openssh-6.6p1 CUR_DIR=$(pwd) SSH_DIR=/usr/local/openssh cd /etc/ssh/ mkdir old mv ssh* moduli old mv /etc/init.d/sshd /etc/init.d/sshd.old #Update ssl yum -y install gcc gcc-c++ zlib-devel pam-devel tcp_wrappers* cd $CUR_DIR tar zxf $SSL_VER.tar.gz cd $SSL_VER ./config shared zlib make && make install mv /usr/bin/openssl /usr/bin/openssl.old mv /usr/include/openssl /usr/include/openssl.old ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl ln -s /usr/local/ssl/include/openssl/ /usr/include/openssl echo "/usr/local/ssl/lib" >> /etc/ld.so.conf ldconfig /sbin/restorecon -v /usr/local/ssl/lib/libcrypto.so.1.0.0 cd .. #Update sshd rpm -e `rpm -qa | grep openssh` --nodeps tar zvxf $SSH_VER.tar.gz cd $SSH_VER/ ./configure --prefix=$SSH_DIR --sysconfdir=/etc/ssh --with-pam --with-tcp-wrappers \ --with-ssl-dir=/usr/local/ssl --with-md5-passwords --with-zlib=zlib make && make install cp contrib/redhat/sshd.init /etc/init.d/sshd chmod u+x /etc/init.d/sshd chkconfig --add sshd chkconfig sshd on cp -rf sshd_config /etc/ssh/sshd_config cd $SSH_DIR cp -rf sbin/sshd /usr/sbin/sshd cp -rf bin/* /usr/bin/ sed -i 's#/usr/libexec/sftp-server#/usr/local/openssh/libexec/sftp-server#' /etc/ssh/sshd_config service sshd restart } read -p "Are you using telnet[YES/NO]?" ANSWER case $ANSWER in YES) echo "Fine,continue!!!" ssh_update 2>&1 | tee -a /tmp/update.log ;; NO) echo "It is dangerous,bye!!!";; *) echo "Error choice";; esac
4. 結果驗證:
[root@localhost src]# ssh -V
SSH, OpenSSL 1.0.1g 7 Apr 2014