腳本解決openssh漏洞

一、問題描述

在上一篇手動升級sshd服務後發現了三個後遺症:

  1. selinux開啓的狀態下,重啓機器sshd不啓動(原因:庫文件“libcrypto.so.1.0.0”的selinux標記不正確,導致sshd無法調用訪問該文件,使用setroubleshoot工具找到原因)

  2. hosts.allow,hosts.deny對sshd不起作用(原因:編譯時未加上--with-tcp-wrappers)

  3. sftp無法使用(原因:源碼安裝後配置文件未找到sftp-server工具)

  4.  爲了方便以後安裝,再加上修補以上遺留問題,特寫成腳本。(腳本測試在CentOS6.5、RHEL6.4、CentOS5.10測試通過)

注意事項:爲了降低風險,運行腳本之前,需以telnet登陸系統取得root權限(telnet默認不允許root登陸,可以設置允許root或者以普通用戶切換)


二、安裝

1.  工具包:openssh-6.6p1.tar.gz     openssl-1.0.1g.tar.gz

openssh:  http://mirror.internode.on.net/pub/OpenBSD/OpenSSH/portable/     

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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章