好几年不用ftp了,本来想着yum安装下完事,发现版本太低了,2.x,官方已经3.0.3了,故编译安装。记录安装步骤如下:
最好关闭掉selinux。
一、安装基础依赖包下载源码包:

yum install gcc gcc-c++ db4-utils pam-devel libcap libcap-devel -y 
wget https://security.appspot.com/downloads/vsftpd-3.0.3.tar.gz

官网地址在这里https://security.appspot.com/vsftpd.html

二、编译安装:

tar xvf vsftpd-3.0.3.tar.gz
cd vsftpd-3.0.3
make
make install

即可安装完成,使用vsftpd -v查看版本号 vsftpd: version 3.0.3

三、配置
把身份认证模块拷贝至系统目录中

cp vsftpd-3.0.3/RedHat/vsftpd.pam /etc/pam.d/vsftpd
vim /etc/xinetd.d/vsftpd 将disable中no改成yes
设置为服务
vim /etc/rc.d/init.d/vsftpd

#!/bin/bash
#
# 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
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x /usr/local/sbin/vsftpd ] || exit 0
RETVAL=0
prog="vsftpd"
start() {
        # Start daemons.
        if [ -d /etc/vsftpd ] ; then
                for i in `ls /etc/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

保存,再给该文件加上执行权限:
chmod +x /etc/rc.d/init.d/vsftpd
service vsftpd {start|stop|restart|condrestart|status}
现在就可以把vsftpd当作服务来启动了;
service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]

创建目录

mkdir /etc/vsftpd/
mkdir /etc/vsftpd/userconfig

创建虚拟用户
添加虚拟用户名和密码,一行用户名,一行密码,以此类推。奇数行为用户名,偶数行为密码。
vim /etc/vsftpd/vuser.txt
test001 #用户名
123456 #密码
test002 #用户名
123456 #密码

将刚添加的vuser.txt虚拟用户口令文件转换成系统识别的口令认证文件。
db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuser.db

编辑vsftpd的PAM认证文件
vim /etc/pam.d/vsftpd

将里面其他的都注释掉,添加下面这两行:

32位系统:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser
64位系统
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser

建立本地映射用户并设置宿主目录权限
所有的FTP虚拟用户需要使用一个系统用户,这个系统用户不需要密码。
useradd vftp -d /data -s /bin/false

vsftpd.conf配置文件说明
直接查看cat vsftpd.conf | grep -v "#"

anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome to XXXXXX server.
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list    #chroot_list加入登陆用户的名字,限制主目录
user_config_dir=/etc/vsftpd/userconfig      #用户配置文件目录,一个用户一个配置文件
allow_writeable_chroot=YES
listen=YES

listen_port=21                #默认端口号
guest_enable=YES
guest_username=vftp
pam_service_name=vsftpd
virtual_use_local_privs=YES
pasv_enable=YES
pasv_min_port=10000
pasv_max_port=10005
pasv_promiscuous=YES

虚拟用户配置实例
/etc/vsftpd/userconfig/test001
test001的根目录为/data/upfile/test,权限为可上传、下载、创建、改名和删除的权限。

local_root=/data/upfile/test
anon_world_readable_only=no
write_enable=yes
anon_upload_enable=yes
anon_other_write_enable=yes
anon_mkdir_write_enable=yes

限速的几个全局设置:
anon_max_rate 设置匿名用户每条连接最大上传或下载速率
local_max_rate 设置本地用户每条连接最大上传或下载速率
max_per_ip 设置每个用户允许连接最大连接数,即每台电脑同时可以打开几个ftp连接
max_clients 设置允许同时连接服务器最大客户端数
对具体单个用户进行限速:
在用户设置文件中加入这句local_max_rate=1000000即限制某个用户上传、下载速度为最大1M

报错解决:
vsftpd:500 OOPS: vsftpd: refusing to run with writable root inside chroot ()错误的解决方法.
限定了用户不能跳出其主目录之后,使用该用户登录FTP时往往会遇到这个错误:
在vsftpd的配置文件中增加下列两项中的一项:
allow_writeable_chroot=YES
然后设置下根目录权限
chmod a-w /data
更改下级主目录属主为vftp
chown -R vftp.vftp /data/upfile
chroot_list文件里面要加入登陆用户的名字,限制主目录,不写也会包500错误
即可解决·
/etc/pam.d/vsftpd文件设置如下:

#%PAM-1.0
#auth       required    /lib64/security/pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
#auth       required    /lib64/security/pam_unix.so shadow nullok
#auth       required    /lib64/security/pam_shells.so
#account    required    /lib64/security/pam_unix.so
#session    required    /lib64/security/pam_unix.so
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
带符号 * 的表示必填项