第一步:建立虚拟FTP用户的账号数据库文件
[root@liudongyi ~]# vim /etc/vsftpd/vusers.list
然后把文本数据库文件转化为可以被ftp认证识别的数据库文件
[root@liudongyi ~]# db_load -T -t hash -f /etc/vsftpd/vusers.list /etc/vsftpd/vusers.db
我们可以查看刚才生成文件的文件类型
然后我们修改文件的权限(只允许root读写)
[root@liudongyi vsftpd]# chmod 600 vusers.db
[root@liudongyi vsftpd]# ll vusers.db

第二步,创建FTP根目录及虚拟用户映射的系统用户(虚拟用户映射到本地用户所以在配置文件中local_enable=YES)
创建目录,并创建用户使它不能登录
[root@liudongyi vsftpd]# mkdir /var/ftproot
[root@liudongyi vsftpd]#
[root@liudongyi vsftpd]# useradd -s /sbin/nologin virtual

[root@liudongyi vsftpd]# vim /etc/passwd (把家目录修改为我们刚才所创建的目录)
把刚才创建的ftproot目录的属组权限进行修改
[root@liudongyi vsftpd]# cd /var/
[root@liudongyi var]# chown virtual.virtual ftproot/
第三步:
然后创建虚拟用户的PAM认证文件 vsftpd.vu
[root@liudongyi var]# cd /etc/pam.d/
[root@liudongyi pam.d]# vim vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
第四步:
[root@liudongyi pam.d]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
pam_service_name=vsftpd.vu
guest_enable=YES
guest_username=virtual
重启服务(/etc/init.d/vsftpd restart)
第五步:为个别虚拟用户建立独立的配置文件
修改配置文件:用户配置目录
user_config_dir=/etc/vsftpd/vusers_home

我们先把创建目录的权限给取消了
#anon_mkdir_write_enable=YES
创建刚才我们配置文件中设定的目录
[root@liudongyi ~]# cd /etc/vsftpd/
[root@liudongyi vsftpd]# mkdir vusers_home
[root@liudongyi vsftpd]# cd vusers_home/
修改目录的属组权限修改为virtual。要不然会访问不到,(因为我们是a1用户映射到virtual的身份去访问的)
[root@liudongyi vsftpd]# chown virtual.virtual vusers_home/ -R
我们重启一下vsftpd,
service vsftpd restart
我们发现我们没有权限创建目录了,,刚才配置文件中取消了权限。
然后我们在个别用户中添加这个创建目录的权限
[root@liudongyi vsftpd]# cd vusers_home/
[root@liudongyi vusers_home]# vim a1 创建相同的名称文件并且在文件中编辑你所想添加的权限也就是此用户的权限
vim bendan

然后我们重启服务
然后我们以虚拟用户的身份去访问并且创建文件夹或上传看是否有权限
[root@liudongyi vusers_home]# lftp bendan@192.168.10.2 以bendan的身份去访问发现有创建文件夹和上传的权限
[root@liudongyi vusers_home]# lftp a1@192.168.10.2 我们以a1的身份去访问发现有创建文件夹和上传的权限

vsftpd和mysql的结合使用
第一步安装mysql及其他安装包
[root@liudongyi vusers_home]# yum install mysql-server mysql-devel pam_mysql -y
然后启动mysql服务,创建mysql的库
由于之前安装过mysql所以启动出现了状况,我把mysql.sock更名为mysql.sock.bak则启动成功
我使用root用户身份去登陆
[root@liudongyi local]# mysql -uroot -p
我创建一个vsftpd的数据库
我创建一个表
mysql> create table users (
-> id int AUTO_INCREMENT NOT NULL,
-> name char(20) binary NOT NULL,
-> password char(48) binary NOT NULL,
-> primary key(id)
-> );
然后在表里添加数据(为安全起见,我们设置的密码用password加密存储)
一个用户为tom 密码为ldy
另一个用户为lu密码为ldy
mysql> insert into users(name,password) values('tom',password('ldy'));
Query OK, 1 row affected (0.00 sec)
mysql> insert into users(name,password) values('lu',password('ldy'));
Query OK, 1 row affected (0.00 sec)
我们对数据库进行授权
mysql> grant select on vsftpd.* to vsftpd@127.0.0.1 identified by 'www.ldy.com';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges
-> ;
Query OK, 0 rows affected (0.00 sec)
mysql> grant select on vsftpd.* to vsftpd@localhost identified by 'www.ldy.com';
Query OK, 0 rows affected (0.00 sec)
mysql> grant select on vsftpd.* to vsftpd@192.168.10.2 identified by 'www.ldy.com';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges; 刷新一下特权让他立即生效
Query OK, 0 rows affected (0.00 sec)
我遇到了一个BUG(无知的BUG)
[root@liudongyi pam.d]# mysql -uvsftpd -h127.0.0.1 -p
会出现
ERROR 1045 (28000): Access denied for user 'vsftpd'@'localhost' (using password: YES)
我就不知道密码是啥。然后我就进不去数据库,上面设置的密码是www.ldy.com
然后我去查看数据库文件
创建pam认证文件创建为vsftpd.mysql编辑以下内容:
auth required /lib64/security/pam_mysql.so user=vsftpd passwd=www.ldy.com host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib64/security/pam_mysql.so user=vsftpd passwd=www.ldy.com host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2