准备:
1) 确认已经安装vsftpd,使用yum 默认安装即可。2) 确认安装Berkeley dbrheL自带的db4版本不够,且没有utils包,需要升级。
执行命令:
~# yum -y install db4-utils
开始:
1) 生成虚拟用户的数据库:
使用pam_userdb来认证虚拟用户。
[url=mailto:root@localhost]root@localhost VIRTUAL_USERS]# cd /etc/vsftpd
[url=mailto:root@localhost]root@localhost vsftpd]# vi logins.txt
[root@localhost vsftpd]# cat logins.txt
admin
258369
upload
123456
down
654321
[root@localhost vsftpd]# db_load -T -t hash -f logins.txt login.db

[url=mailto:root@localhost]root@localhost vsftpd]# chmod 600 login.db
vsftpd]# ls
ftpusers logins.txt vsftpd.conf   vsftpd_conf_migrate.sh
login.db user_list   vsftpd.conf.bk vsftpd_user_conf

#1创建一个logins.txt,并在里面写入用户名及密码,单数行为用户名,双数行为对应的密码:
# 2logins.txt转换成db文件:
2) 生成PAM认证文件。
~# vi /etc/pam.d/vsfptd
把原有各行均注释掉,然后加入下面两行:
[root@localhost vsftpd]# cat /etc/pam.d/vsftpd
#%PAM-1.0
#session   optional   pam_keyinit.so   force revoke
#auth   required   pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth   required   pam_shells.so
#auth   include   system-auth
#account   include   system-auth
#session   include   system-auth
#session   required   pam_loginuid.so
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/login
 account required /lib/security/pam_userdb.so db=/etc/vsftpd/login
注意 login 后面没有.db,如果是64位的,"lib"应更改为"lib64"

3) 建立虚拟用户的目录,ftpsite即为本机ftp的根目录
Set up the location of the files for the virtual users.
useradd -d /home/ftpsite virtual
ls -ld /home/ftpsite
drwx------   3 virtual virtual   4096 Jul 30 00:39 /home/ftpsite
cp /etc/hosts /home/ftpsite
 chown virtual.virtual /home/ftpsite/hosts

4) 配置 vsftpd .conf文件
anonymous_enable=NO
#这禁止了匿名用户使用FTP 服务,
local_enable=YES  
#允许本地用户登陆
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
anon_world_readable_only=NO
#出于安全的目的,禁止写权限,
chroot_local_user=YES
#限制虚拟用户只能在家目录
guest_enable=YES
 guest_username=virtual
启用虚拟用户,并将虚拟用户映射为本地virtual用户
pam_service_name=vsftpd
启用PAM认证并指定配置文件为vsftp
user_config_dir=/etc/vsftpd/vsftpd_user_conf
#配置不同虚拟用户配置文件的存放路径
listen=YES
 listen_port=10021
让 vsftpd 以主动 模式运行端口在非标准备(2110021处监听
pasv_min_port=30000
 pasv_max_port=30999
#限定端口,方便防火墙的设置

5)创建virtual 用户主配置文件目录
~#mkdir/etc/vsftpd/vsftpd_user_conf
[root@server vsftpd_user_conf]# mkdir /home/ftpsite/public
[root@server vsftpd_user_conf]# chown virtual.virtual /home/ftpsite/public

6)创建虚拟用户名命名的配置文件并设置登陆家目录及用户权限
[root@server vsftpd_user_conf]# pwd
/etc/vsftpd/vsftpd_user_conf
[root@server vsftpd_user_conf]# cat admin   拥用/home/ftpsite全部管理权限
local_root=/home/ftpsite
 write_enable=YES
 anon_world_readable_only=NO
 anon_upload_enable=YES
 anon_mkdir_write_enable=YES
 anon_other_write_enable=YES
[root@server vsftpd_user_conf]# cat upload   拥用/home/ftpsite/public除删除外
                                全部 管理权限
local_root=/home/ftpsite/public
 write_enable=YES
 anon_world_readable_only=NO
 anon_upload_enable=YES
 anon_mkdir_write_enable=YES
 anon_other_write_enable=NO
[root@server vsftpd_user_conf]# cat down   拥用/home/ftpsite/public 读取 权限
local_root=/home/ftpsite/public
 write_enable=NO
 anon_world_readable_only=NO
 anon_upload_enable=NO
 anon_mkdir_write_enable=NO
 anon_other_write_enable=NO

#anon_world_readable_only=NO    //读取
#write_enable=YES                 // 更改
#anon_upload_enable=YES     //上传
#anon_other_write_enable=YES     //删除
#anon_mkdir_write_enable=YES   //创建目录

7) setsebool -P ftpd_disable_trans 1


8重启 vsftpd.
service vsftpd restart

9test
[root@localhost vsftpd_user_conf]# ftp localhost 10021
Connected to localhost.localdomain.
220 Welcomeb TO THAILIN FTP service.
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): update
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/"
ftp> ls
227 Entering Passive Mode (127,0,0,1,119,160)
150 Here comes the directory listing.
-rw-r--r--   1 503   503   187 Jun 03 15:26 hosts
-rw-r--r--   1 503   503   13 Jun 03 16:23 index.html
226 Directory send OK.
ftp> bye
221 Goodbye.

#如果出现500 oops错误,请执行:setsebool ftpd_disable_trans 1

或者查看用户文件有没有空格。