vsftpd基于pam-mysql认证

vsftpd 基于 pam_mysql 虚拟用户机制认证

实验准备

$ yum groupinstall "Development Tools"

安装vsftpd

$ yum install vsftpd

编译PAM-MYSQL

准备

从PAM-MYSQL名字就能看出来需要依赖PAM和MYSQL

$ yum install pam pam-devel
$ yum install mariadb mariadb-server openssl-devel mariadb-devel

编译PAM-MYSQL

没有rpm包只能自己编译
官网 http://pam-mysql.sourceforge.net/

$ wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
$ tar xf pam_mysql-0.7RC1.tar.gz -C /usr/src
$ cd /usr/src/pam_mysql-0.7RC1
$ ./configure --with-pam-mods-dir=/usr/lib64/security/ # 用"rpm -ql pam | grep so"查看pam模块路径
$ make && make install

安装生成 /usr/lib64/security/pam_mysql.so

创建虚拟用户

MariaDB [(none)]> create database vsftpd;

MariaDB [(none)]> use vsftpd;

MariaDB [vsftpd]> create table users ( id int auto_increment not null primary key, name char(30) not null, password char(48) binary not null );

MariaDB [vsftpd]> insert into users(name,password) values ('xiaoming',password('xiaohong'));

MariaDB [vsftpd]> insert into users(name,password) values ('xiaohong',password('xiaoqiang'));

MariaDB [vsftpd]> insert into users(name,password) values ('xiaoqiang',password('xiaoming'));

MariaDB [vsftpd]> insert into users(name,password) values ('xiaofang',password('xiaoming'));

MariaDB [vsftpd]> grant select on vsftpd.* to 'vsftpd'@'localhost' identified by 'vsftpd.com';

MariaDB [vsftpd]> grant select on vsftpd.* to 'vsftpd'@'127.0.0.1' identified by 'vsftpd.com';

PAM数据库认证

新建/etc/pam.d/vsftpd.mysql并添加如下内容

auth required pam_mysql.so user=vsftpd passwd=vsftpd.com host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=vsftpd.com host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

任何一个虚拟用户都要映射为系统用户
添加映射帐号

$ useradd -s /sbin/nologin -d /data/ftpmroot vsftpuser
$ chmod go+x /data/ftpmroot/
$ chmod -w /data/ftpmroot/

编辑/etc/vsftpd/vsftpd.conf

修改前:pam_service_name=vsftpd
修改后:pam_service_name=vsftpd.mysql

添加如下内容
guest_enable=YES
guest_username=vsftpuser

启动ftp服务

$ systemctl start vsftpd

OK