CentOS6源码安装VSFTPD3

还是碰到老问题:安全扫描,由于CentOS6上VSFTPD最高支持到V2.2.2,目前已经是官方支持的最新版本(发布了几年...)

但有安全漏洞,又没法通过限制访问进行控制,只能想办法升级到最新版本了。

关闭服务 service vsftpd stop service iptables stop sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config;

检查旧版vsftpd版本 vsftpd -v

卸载旧版vsftpd yum remove -y vsftpd

安装依赖包: yum install -y libcap libcap-devel tcp_wrappers tcp_wrappers-devel

编译安装源码包 tar -xzvf vsftpd-3.0.3.tar.gz cd vsftpd-3.0.3

修改显示 sed -i 's/UTF8 ON/DISABLE UTF8 ON/g' opts.c

编译安装

make &;&; make install`
mkdir /etc/vsftpd/ 
cp vsftpd.conf /etc/vsftpd/
cp RedHat/vsftpd.pam /etc/pam.d/vsftpd #PAM认证文件 
sed -i 's/lib///lib64///g' /etc/pam.d/vsftpd 
如果不成功,手动修改/etc/pam.d/vsftpd中的lib为lib64

启动并查看

vsftpd /usr/local/sbin/vsftpd &
netstat -tunlp | grep 21 
/usr/local/sbin/vsftpd -v 
cp /usr/local/sbin/vsftpd /usr/sbin/vsftpd 

制作启动脚本 vim /etc/xinetd.d/vsftpd disable = yes

重启xinetd服务service xinetd restart

修改启动脚本:

vim  /etc/init.d/vsftpd 
        #!/bin/bash
        #
        # vsftpd      This shell script takes care of starting and stopping
        #             standalone vsftpd. Customized to be used with CentOS 5.4
        #             and Monit by creating PID files for each process
        #
        # 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

        RETVAL=0
        prog="vsftpd"
        site="$prog"
        sbin="/usr/sbin/vsftpd"
        conf="/etc/vsftpd/vsftpd.conf"
        pidfile="/var/run/vsftpd/vsftpd.pid"

        [ -d /var/run/$prog ] || mkdir -p /var/run/$prog

        start() {

                [ -x $sbin ] || exit 1
                [ -r $conf ] || exit 1

                if [ -f $pidfile ]; then
                        pid=`cat $pidfile`
                        ps -ef | grep -v grep | grep $pid | grep $sbin > /dev/null
                        if [ $? -eq 0 ]; then
                                echo "$prog already running!"
                                exit 1
                        else
                                rm -f $pidfile
                        fi
                fi

                echo -n $"Starting $prog: "
                $sbin $conf &
                [ $? -eq 0 ] && success || failure
                [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
                pidcmd=`ps -ef | grep -v grep | grep $sbin | awk '{print $2}'`
                echo $pidcmd > $pidfile
                echo
                return $RETVAL
        }


        stop() {

                echo -n $"Shutting down $prog: "
                killproc $prog
                RETVAL=$?
                echo
                [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
                rm -f $pidfile
                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 2
        esac

        exit $RETVAL

授权755

chmod  755  /etc/init.d/vsftpd 
chkconfig vsftpd on 

修改配置文件

vim /etc/vsftpd/vsftpd.conf
---

验证

service vsftpd restart 
vsftpd -v

贴一个主要配置:

local_root=/home
chroot_local_user=YES
chroot_list_enable=YES
allow_writeable_chroot=YES

chroot_list文件不包含要使用的FTP用户名!

解决报错500 OOPS: vsftpd: refusing to run with writable root inside chroot ()

另,和以前版本不一样配置(估计没用):

cat /etc/vsftpd/user_config/ftpuser
write_enable=YES