修复VSFTPD漏洞——版本升级

第一步:备份相关文件

mkdir vsftpd-bak		#创建目录,用来做配置文件备份
cd vsftpd-bak/
cp -R /etc/vsftpd ./vsftpdbak`date +%F-%T`		#备份全部的配置文件
cp /etc/rc.d/init.d/vsftpd ./vsftpd.service.bak`date +%F-%T`		#备份服务文件,方便回退,如升级成功,该文件就没用了
cp /etc/pam.d/vsftpd ./vsftpd.pam`date +%F-%T`						#备份pam文件,方便回退,如升级成功,该文件就没用了
cp /usr/sbin/vsftpd ./vsftpd.`date +%F-%T`							#备份程序文件
rpm -qa | grep vsftpd > vsftpd.version								#记录就版本信息

yum -y remove vsftpd-*			## 可选操作,没必要卸载


第二步:编译安装新版本的VSFTPD

tar xf vsftpd-3.0.3.tar.gz 
cd vsftpd-3.0.3

[root@localhost vsftpd-3.0.3]# make
gcc -o vsftpd main.o utility.o prelogin.o ftpcmdio.o postlogin.o privsock.o tunables.o ftpdataio.o secbuf.o ls.o postprivparent.o logging.o str.o netstr.o sysstr.o strlist.o banner.o filestr.o parseconf.o secutil.o ascii.o oneprocess.o twoprocess.o privops.o standalone.o hash.o tcpwrap.o ipaddrparse.o access.o features.o readwrite.o opts.o ssl.o sslslave.o ptracesandbox.o ftppolicy.o sysutil.o sysdeputil.o seccompsandbox.o -Wl,-s -fPIE -pie -Wl,-z,relro -Wl,-z,now `./vsf_findlibs.sh`
/usr/bin/ld: cannot find -lcap		##缺少cap依赖
collect2: ld returned 1 exit status
make: *** [vsftpd] Error 1
# 编译过程中报错

#安装如下软件包
yum -y install libcap
yum -y install libcap-devel 

make  
make install

第三步:将编译完成后的文件拷贝到该去的地方

# 以下文件均在源码VSFTPD目录中

### 除了程序文件以外,其它文件根据需要拷贝
\cp -f vsftpd.conf /etc/vsftpd/			
\cp -f RedHat/vsftpd.pam /etc/pam.d/vsftpd
\cp -f ftpusers /etc/vsftpd/
\cp -f chroot_list /etc/vsftpd/
\cp -f user_list /etc/vsftpd/

## 替换程序文件
\cp -f /usr/local/sbin/vsftpd /usr/sbin/vsftpd

#启动服务验证
/usr/local/sbin/vsftpd &
ss -ntulp | grep ftp
## 验证启动后,可以关闭

第四步:修改service文件

# 文件内容可以直接拷贝,有其它特殊管理方式的根据需要修改
[root@localhost ~]# grep -v ^# /etc/init.d/vsftpd | grep -v ^$
. /etc/rc.d/init.d/functions
. /etc/sysconfig/network
RETVAL=0
prog="vsftpd"
start() {
        # Start daemons.
        if [ -d /etc ] ; then
                for i in `ls /etc/vsftpd/vsftpd.conf`; do
                        site=`basename $i .conf`
                        echo -n $"Starting $prog for $site: "
                        /usr/local/sbin/vsftpd $i &
                        RETVAL=$?
                        [ $RETVAL -eq 0 ] && {
                           touch /var/lock/subsys/$prog
                           success $"$prog $site"
                        }
                        echo
                done
        else
                RETVAL=1
        fi
        return $RETVAL
}
stop() {
        # Stop daemons.
        echo -n $"Shutting down $prog: "
        killproc $prog
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
        return $RETVAL
}
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart|reload)
        stop
        start
        RETVAL=$?
        ;;
  condrestart)
        if [ -f /var/lock/subsys/$prog ]; then
            stop
            start
            RETVAL=$?
        fi
        ;;
  status)
        status $prog
        RETVAL=$?
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|condrestart|status}"
        exit 1
esac
exit $RETVAL 
[root@localhost ~]# chmod 755 /etc/init.d/vsftpd
#启停验证
chkconfig vsftpd on
service vsftpd stop
service vsftpd start

其它:配置文件主要配置

[root@localhost ~]# grep -v ^# /etc/vsftpd/vsftpd.conf | grep -v ^$
#anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=NO
### 配置文件根据需要添加


allow_writeable_chroot=YES	
#从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误,要修复这个错误,
#解决办法:可以用命令chmod a-w /home/user去除用户主目录的写权限,注意把目录替换成你自己的。或者你可以在/etc/vsftpd.conf 的配置文件中增加allow_writeable_chroot=YES

升级过程中遇到的问题

kernel: lo: Dropping TSO features since no CSUM feature.
kernel: warning: `vsftpd' uses 32-bit capabilities (legacy support in use)
如系统出现宕机,并在/var/log/messages日志中出现以上两条报错信息
需要在配置文件中添加以下配置项

isolate=NO
isolate_network=NO

完整地service文件

vim  /etc/init.d/vsftpd
#!/bin/bash
#
### BEGIN INIT INFO
# Provides: vsftpd
# Required-Start: $local_fs $network $named $remote_fs $syslog
# Required-Stop: $local_fs $network $named $remote_fs $syslog
# Short-Description: Very Secure Ftp Daemon
# Description: vsftpd is a Very Secure FTP daemon. It was written completely from
#              scratch
### END INIT INFO


# vsftpd      This shell script takes care of starting and stopping
#             standalone vsftpd.
#
# chkconfig: - 60 50
# description: Vsftpd is a ftp daemon, which is the program \
#              that answers incoming ftp service requests.
# processname: vsftpd
# config: /etc/vsftpd/vsftpd.conf


# Source function library.
. /etc/rc.d/init.d/functions


# Source networking configuration.
. /etc/sysconfig/network


RETVAL=0
prog="vsftpd"
start() {
        # Start daemons.
        if [ -d /etc ] ; then
                for i in `ls /etc/vsftpd/vsftpd.conf`; do
                        site=`basename $i .conf`
                        echo -n $"Starting $prog for $site: "
                        /usr/local/sbin/vsftpd $i &
                        RETVAL=$?
                        [ $RETVAL -eq 0 ] && {
                           touch /var/lock/subsys/$prog
                           success $"$prog $site"
                        }
                        echo
                done
        else
                RETVAL=1
        fi
        return $RETVAL
}
stop() {
        # Stop daemons.
        echo -n $"Shutting down $prog: "
        killproc $prog
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
        return $RETVAL
}
# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart|reload)
        stop
        start
        RETVAL=$?
        ;;
  condrestart)
        if [ -f /var/lock/subsys/$prog ]; then
            stop
            start
            RETVAL=$?
        fi
        ;;
  status)
        status $prog
        RETVAL=$?
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|condrestart|status}"
        exit 1
esac
exit $RETVAL 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WYQXLGLM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值