####考虑到服务器的安全性,应该关闭实体用户的登录,而采用虚拟用户验证机制,同时根据用户的等级限制用户的行为和速度。
解决方案1:本地数据文件方式
1 .新建本地数据文件,用于设置可登录的虚拟账户和密码
    vim /etc/vsftpd/vftpuser.txt
2.添加虚拟账户和密码,账户密码各占一行,格式如下
    lucas
    123456
    lulu
    lulu.123
3.利用db_load将txt文件转换成db文件
    db_load -T -t hash -f /etc/vsftpd/vftpuser.txt /etc/vsftpd/vftpuser.db
4.为了防止账号被盗,将db文件设置成只有root可以查看
    chmod 600 /etc/vsftpd/vftpuser.db 
5.为了进行身份验证,需要调用系统的pam模块来进行验证。在pam模块目录下,存在vsftpd的验证设置
    vi /etc/pam.d/vsftpd
6.将该文件的默认设置全部注释后,添加以下2项:
    auth  required    /lib/security/pam_userdb.so    db=/etc/vsftpd/vftpuser
    account    required    /lib/security/pam_userdb.so    db=/etc/vsftpd/vftpuser 
7.创建不可登录的系统账户shareuser和vipuser
    useradd -s /sbin/nologin -d /var/ftp/share shareuser
    useradd -s /sbin/nologin -d /var/ftp/vip vipuser
8.经过第7步,系统会创建share和vip文件夹,修改其权限
    chmod -R 500 /var/ftp/share    //公共账户只允许下载
    chmod -R 700 /var/ftp/vip     //vip客户可以进行上传等操作
9.建立配置文件,由于要控制不同的虚拟账户具有不同的权限,需要为每个虚拟账户建立不同的配置文件
    9.1.修改/etc/vsftpd/vsftpd.conf如下
    listen=YES
    listen_port=21
    anonymous_enable=NO
    local_enable=YES
    chroot_local_user=YES
    max_clients=300
    max_per_ip=10
    connect_from_port_20=YES
    use_localtime=YES
    pam_service_name=vsftpd
    user_config_dir=/etc/vsftpd/vuserconfig    //设置虚拟账户的主目录
    9.2.新建/etc/vsftpd/vuserconfig目录,并在此目录下,新建lucas的配置文件(假定lucas为一般用户),记住必须与虚拟用户同名
    mkdir /etc/vsftpd/vuserconfig
    vim /etc/vsftpd/vuserconfig/lucas
    9.3.在/etc/vsftpd/vuserconfig/lucas文件中新增以下内容:
    guest_enable=YES
    guest_username=shareuser
    anon_world_readable_only=YES
    max_anon_rate=50000    //限制普通账户的下载速度为50KB/s.其实vsftpd的下载速度是在设置项的0.8-1.2倍之间浮动
    9.4。新建lulu的配置文件(假定lulu为vip用户),vim /etc/vsftpd/vuserconfig/lulu,其内容如下:
    guest_enable=YES
    guest_username=vipuser
    anon_world_readable_only=NO    //匿名用户无法访问到此目录
    write_enable=YES
    anon_mkdir_write_enable=YES
    anon_upload_enable=YES
    anon_max_rate=100000    //限制vip用户的下载速度为100KB/s
    9.5.重启vsftpd。
    service vsftpd restart
解决方案2:使用mysql方式
1.建立不可登录的系统账户,与解决方案1中的步骤7,8相同
2.在数据库中创建用于存放虚拟用户的数据库表,如下步骤
    2.1.使用root连接到数据库
    mysql -u root -p
    2.2.在数据库环境中新建数据库vftpuser并在vftpuser中新建users表:
    create database vftpuser;
    use vftpuser;
create table user(name char(20) binary,passwd char(20) binary);
    2.3.添加虚拟用户:
    insert into users (name,passwd) values ('bobyuan', '111');
     insert into users (name,passwd) values ('markwang',‘111');
    2.4授权系统账户shareuser和vipuser具有users的查询权限:
    grant select on vftpuser.users to shareuser@localhost identified by '111111'; 
    #grant select on vftpuser.users to vipuser@localhost identified by '111111'; 
    fulsh privileges;
3.查看/lib/security目录下有没有MySQL对应的PAM模块,若无,则需要安装。
    3.1查看系统
    ls /lib/security/ | grep mysql
    3.2经查未安装,则需安装pam_mysql
     wget  http://nchc.dl.sourceforge.net/project/pam-mysql/pam-mysql/0.7RC1/pam_mysql-0.7RC1.tar.gz 
    tar -zxvf pam_mysql-0.7RC1.tar.gz
    cd  pam_mysql-0.7RC1/ 
    由于要在配置过程中需要用到mysql,则先配置好
    ln -s /usr/local/mysql/include/mysql /usr/include/mysql
    ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql
    ln -s /usr/include/openssl/md5.h /usr/include/md5.h
    ./configure --with-openssl=/usr/ --with-mysql=/usr/ --with-pam-mods-dir=/lib/security/
    make
    make install
4.在pam下设置vsftpd的验证方式,vi /etc/pam.d/vsftpd,将原来的设置注释后,添加下列设置:    

auth required pam_mysql.so user=shareuser passwd=111111 host=localhost db=vftpuser table=users usercolumn=name passwdcolumn=passwd crypt=0

account required pam_mysql.so user=shareuser passwd=111111 host=localhost db=vftpuser table=users usercolumn=name passwdcolumn=passwd crypt=0
crypt=0:表示口令使用明文方式保存在数据库中
crypt=1:表示口令使用UNIX的DES加密方式加密后保存在数据库中
crypt=2:表示口令使用MySQL的password()函数加密后保存在数据库中
crypt=3:表示口令使用MD5散列值的方式保存在数据库中
4.1.在 pam_mysql-0.7RC1之后的版本有支持通过外部文件来设置pam的文件:
auth    required        /lib/security/pam_mysql.so config_file=/etc/security/pam_mysql.conf
account     required      /lib/security/pam_mysql.so config_file=/etc/security/pam_mysql.conf
auth之后,account之前的内容攻占一行,剩下的内容占一行,这里知名了pam的库文件的位置,请根据你的配置自行修改;config_file知名pam_mysql的配置文件
4.2。/etc/security/pam_mysql.conf设置如下:
users.host=localhost
users.database=vftpuser
users.db_user=shareuser
users.db_passwd=111111
users.table=users
users.user_column=name
users.password_column=passwd
users.password_crypt=0
5.重新启动vsftpd后测试。
参考文献:
http://yuanbin.blog.51cto.com/363003/129071
http://www.cnblogs.com/HackingProgramer/archive/2012/09/19/2693568.html
http://ciscolj.blog.51cto.com/330452/120179