1.安装Mysql数据库

yum install -y mysql-server mysql-devel

2.使用yum仓库安装pam-devel

如果未安装pam-devel包会在安装pam-mysql中提示find pam headers. Please check if your system is ready forpam module development

yum install -y pam-devel

3.安装pam_mysql包

PAM 基于 mysql 数据库的认证插件,我们可以到http://sourceforge.net/projects/pam-mysql/下载得到。我下载的文件是pam_mysql-0.7RC1.tar.gz。安装好之后,pam_mysql.so被安装到了/lib/security,--with-openssl可以避免make时报有关md5.h的编译错误

tar –zxvf pam_mysql-0.7RC1.tar.gz
cdpam_mysql-0.7RC1
./configure –-with-openssl
make
make install

4.安装vsftpd服务

yum –y install vsftpd

5.创建数据

(一)创建vsftpd数据库:

mysql> create database vsftpd;

(二)创建users表:

mysql> use vsftpd;
mysql> create table users(name char(16),passwd char(16));

(三)插入一条用户为ftp密码为ftp的虚拟用户数据:

mysql> insert into users (name,passwd) values ('ftp', 'ftp');

(四)授权vsftpdguest用户能够在本地查询vsftpd数据库中所有表且授权密码为vsftpdguest:

mysql> grant select on vsftpd.* to'vsftpdguest'@'localhost' identified by 'vsftpdguest';

6.编写Pam认证文件

编辑vim /etc/pam.d/vsftpd.mysql文件添加以下两行数据。

auth required/lib/security/pam_mysql.so user=vsftpdguest passwd=vsftpdguest host=localhostdb=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=0
account required/lib/security/pam_mysql.so user=vsftpdguest passwd=vsftpdguest host=localhostdb=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=0

注意,整个这个文件中只有authaccount两行内容,中途不要加回车换行;文件中不要再有包含其它pam模块的行; 文件中其它字段的意思是:

user 访问数据库用户名

passwd 访问数据库用户密码

host 数据库主机

db 数据库名

table 表名

usercolumn 用户列名

passwdcolumn 密码列名

crypt 口令字段中口令的加密方式;0不加密;1使用UNIX系统的DES加密;2经过mysql的 password()函数加密后保存

7.创建guest用户

vsftpd采用PAM方式验证虚拟用户。由于虚拟用户的用户名/口令被单独保存,因此在验证时,vsftpd需要用一个系统用户的身份来读取数据库文件或数据库服务器以完成验证,这就是vsftpd的guest用户。这正如同匿名用户也需要有一个系统用户ftp一样。当然,我们也可以把guest用户看 成是虚拟用户在系统中的代表。下面在系统中添加vsftpdguest用户,作为vsftpd的guest。

useradd -s /sbin/nologin vsftpdroot
chmod go+rx vsftpdroot


8.编辑vsftpd的配置文件vsftpd.conf

vim/etc/vsftpd/vsftpd.conf


修改:
anonymous_enable=NO
#将YES改为NO表示禁止匿名用户访问
pam_service_name=vsftpd.mysql
#更改pam的认证文件,也就是上面配置的位于/etc/pam.d下的vsftpd.mysql文件
添加:
guest_enable=YES
#允许虚拟用户访问
guest_username=vsftpdroot
#虚拟用户使用具体的用户登录
anon_upload_enable=YES
#允许虚拟用户上传
virtual_use_local_privs=YES
#当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限

9.帮助

tail -f /var/log/secure
#查看vsftpd日志文件

在测试中最好将selinux和iptables关闭,以免报错

setenforce 0
#将selinux设置为宽容
service iptables stop
#将iptables服务关闭