1、建立虚拟用户的用户名和密码数据库文件
vsftpd服务的虚拟用户数据库是使用Berkeley DB格式的数据文件。建立该数据库文件要用到db_load命令工具,从光盘安装db4-utils-4.3.29-9.fc6.i386.rpm或yum进行安装软件包后可获得该工具。
密码数据库文件中奇数行为用户名,偶数行为上一行中用户所对应的密码
# vi /etc/vsftpd/vusers.list
laya
123
test
456

2、生成vsftpd的认证文件
# cd /etc/vsftpd/
# db_load -T -t hash -f vusers.list vusers.db  //如果没有db_load命令,请安装db4*相关rpm包。
注意:
rhel5默认只安装db4-4.3.29-9.fc6.i386.rpm和db4-devel-4.3.29-9.fc6.i386.rpm,
要使用db_load需要将db4-utils-4.3.29-9.fc6.i386.rpm包安装上否则会出现错误:找不到db_load命令。

# file vusers.db
设置认证文件只对root用户可读可写
# chmod 600 /etc/vsftpd/vusers.*   //降低文件权限以提高安全性
注意:每次步骤1中添加新内容,都要再次运行步骤2,否则新加用户不生效
 
3、建立虚拟用户所需的PAM认证文件
# vi /etc/pam.d/vsftpd.vu
#%PAM-1.0
auth required pam_userdb.so  db=/etc/vsftpd/vusers
account required  pam_userdb.so db=/etc/vsftpd/vusers
注意:以上2行中最后的2个文件名vusers和第2个步骤中的数据库名字必须一致!

4、建立虚拟用户所要访问的目录并设置相应权限
# mkdir -p /var/www
# useradd -d /var/www -s /sbin/nologin virtual(用户名)  //建立映射账号virtual
# chown virtual:virtual /var/www
# chmod 755 /var/www  //更改ftp根目录权限
# ls -lh /boot > /var/www/vutest.file  //建立测试文件(可不建)

5、设置vsftpd.conf配置文件
anonymous_enable=NO
local_enable=YES  //使用虚拟用户要启用本地用户
anon_umask=022  //设置虚拟用户所上传文件的默认权限掩码,是anon_mask而不是local_mask
chroot_local_user=YES  //将所有本地用户限制在家目录中,NO则不限制
max_clients=300  //设置FTP服务器最大接入客户端数为300个
max_per_ip=10  //设置每个IP地址最大连接数为10个
write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
guest_enable=YES //启用用户映射功能
guest_username=virtual  //将映射用户指定为virtual
pam_service_name=vsftpd.vu  //修改使用的PAM文件位置
userlist_enable=YES
tcp_wrappers=YES

6、设置主配置文件
修改vsftpd.conf主配置文件,添加用户配置目录支持
user_config_dir=/etc/vsftpd/vusers_dir  //添加此行配置项,指定用户配置目录位置
为用户laya、test建立独立的配置目录及文件
使用mkdir命令建立用户配置目录
# mkdir /etc/vsftpd/vusers_dir
为虚拟用户建立单独的配置文件,用户配置文件名称与用户名相同
vi /etc/vsftpd/vusers_dir/laya
vi /etc/vsftpd/vusers_dir/test

7、每个FTP虚拟用户都可以独立设置其权限
anon_world_readable_only=NO  //允许匿名用户浏览器整个服务器的文件系统
anon_upload_enable=YES  //可上传
anon_mkdir_write_enable=YES  //可创建和删除文件夹
anon_other_write_enable=YES  //可文件改名和删除文件
anon_max_rate=50000:限定传输速率为50KB/s
注意:
vsftpd对于文件传输速度限制并不是绝对锁定在一个数值上,而是在80%~120%之间变化,比如设置100KB/s则实际是速度在80KB/s~120KB/s之间变化。

local_root=/var/www/test  //指定test的宿主目录
注意:请先到/var/www下面去创建test文件夹

8、重新启动vsftpd服务
# service vsftpd restart

9、使用虚拟账户访问FTP服务进行测试

由于匿名FTP根目录“/var/ftp/”的默认权限为755,因此不要将该目录的属主改为ftp,否则匿名访问时可能会报错“500 OOPS:vsftd:refusing to run with writable anonymous root”,导致访问失败。

vsftp500错误简单解决方法
cannot change directory:/home/***
ftp服务器连接失败,错误提示:
500 OOPS: cannot change directory:/home/*******
500 OOPS: child died
解决方法:
 # setsebool ftpd_disable_trans 1
  # service vsftpd restart

Linux默认字符编码为为utf8,如出现乱码可设置为GBK
手动更改配置文件的命令:
vi /etc/sysconfig/i18n
将LANG="zh_CN.UTF-8"修改为:LANG="zh_CN.GBK"
注销重新登录图形界面