脚本升级openssh
一、问题描述(默认Linux安装的SSHD服务存在一些漏洞,特此升级)
在曾经手动升级sshd服务后发现了三个后遗症:
-
selinux开启的状态下,重启机器sshd不启动(原因:库文件“libcrypto.so.1.0.0”的selinux标记不正确,导致sshd无法调用访问该文件,使用setroubleshoot工具找到原因)
-
hosts.allow,hosts.deny对sshd不起作用(原因:编译时未加上--with-tcp-wrappers)
-
sftp无法使用(原因:源码安装后配置文件未找到sftp-server工具)
-
为了方便以后安装,再加上修补以上遗留问题,特写成脚本。(脚本测试在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

浙公网安备 33010602011771号