二、数据库服务器(MySQL)方式
1. 安装MySQL
我使用的是Tar包安装的MySQL,版本号:mysql-6.0.8-alpha.tar.gz
2. 建立本地映射用户并设置宿主目录权限
[root@CentOS5 /]#useradd –d /home/vftpsite –s /sbin/nologin vftpuser
[root@CentOS5 /]#chmod 700 /home/vftpsite
3. 配置vsftpd.conf(设置虚拟用户配置项)
[root@CentOS5 /]#vi /etc/vsftpd/vsftpd.conf
guest_enable=YES #开启虚拟用户
guest_username=vftpuser #FTP虚拟用户对应的系统用户
pam_service_name=vsftpd #PAM认证文件
4. 在MySQL中建立用户口令数据库
[root@CentOS5 /]#mysql –u root –p
mysql> create database vftpuser; #建立虚拟用户数据库,库名vftpuser
mysql> use vftpuser; #进入vftpuser数据库
mysql> create table users(name char(16) binary,passwd char(16) binary); #建立虚拟用户口令表,表名users
mysql> insert into users (name,passwd) values ('bobyuan',password('111'));
mysql> insert into users (name,passwd) values ('markwang',password('111'));
#建立两个虚拟用户,bobyuan和markwang
注:在这里我用这种方法添加的虚拟用户密码都是经过MySQL加密的,加密后的密码pam-mysql不能识别(MySQL和pam-mysql兼容性有些问题),因此本次实验使用明文保存密码。
添加明文密码:
方法一:单个添加用户
mysql> insert into users (name,passwd) values ('bobyuan', '111');
mysql> insert into users (name,passwd) values ('markwang',‘111');
方法二:批量添加用户
新建vftpuser.txt文件
[root@CentOS5 /]#vi vftpuser.txt
添加用户名和密码,注意字段数据之间要用Tab键隔开。
bobyuan 111
markwang 111
mysql>use vftpuser;
mysql>load data local infile “/vftpuser.txt”into table users;
mysql>flush privileges;
mysql> grant select on vftpuser.users to vftpuser@localhost identified by '111111'; #授权vftpuser这个账号可以读取vftpuser数据库的user表
5. 验证第4步的设置是否成功
[root@CentOS5 /]#mysql –u vftpuser –p
mysql>show databases;
mysql>use vftpuser;
mysql>show tables;
mysql>select * from users;
mysql>quit
如下图:
6. 编译MySQL的PAM认证模块
查看/lib/security目录下有没有MySQL对应的PAM模块。
如果没有则下载pam-mysql安装(),
我下载的是pam_mysql-0.7RC1.tar.gz。
[root@CentOS5 /]#cd /usr/local/src
[root@CentOS5 src]#tar –zxvf pam_mysql-0.7RC1.tar.gz
[root@CentOS5 src]#cd pam_mysql-0.7RC1
[root@CentOS5 pam_mysql-0.7RC1]# ./configure --with-mysql=/usr/local/mysql/ --with-pam-mods-dir=/lib/security/
[root@CentOS5 pam_mysql-0.7RC1]#make
[root@CentOS5 pam_mysql-0.7RC1]#make install
7. 编辑vsftpd的PAM认证文件
在/etc/pam.d目录下,
[root@CentOS5 /]#vi /etc/pam.d/vsftpd
将里面其他的都注释掉,添加下面这两行:
auth required pam_mysql.so user=vftpuser passwd=111111 host=localhost db=vftpuser table=users usercolumn=name passwdcolumn=passwd crypt=0
account required pam_mysql.so user=vftpuser 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散列值的方式保存在数据库中
8. 重启vsftpd服务
[root@CentOS5 /]#service vsftpd restart
9. 测试虚拟用户登录FTP
C:\User\Administrator>ftp 192.168.120.240
Connected to 192.168.120.240.
220 Welcome to BOB FTP server
User (192.168.120.240:(none)): bobyuan
331 Please specify the password.
Password:
230 Login successful.
ftp> quit
221 Goodbye.