实验前说明:本实验需要在两台centos向主机上实现,一台作为ftp服务器,一台做数据库服务器

在这里我使用centos6做数据库服务器,centos7做ftp服务器

一:安装所需要的包和包组

在centos6上安装数据库所需要的包

yum -y install mysql-server

在centos7因为没有对应的rpm包,需要手动编译安装

yum -y groupinstall "development tools"

yum -y install pam-devel vsftpd

下载源码包

pam_mysql-0.7RC1.tar.gz

解压包 tar xvf pam__mysql-0.7RC1.tar.gz

然后进入这个目录下进行编译cd pam_mysql-0.7RC1/

./configure --with-mysql=/usr --with-pam=/usr

--with-pam-mods-dir=/lib64/security

根据提示我们还需要安装maria-devel这个包

安装之后,重新进行编译

如果没有出现错误,就可以进行下一步啦

Make &&make install

二.在数据库服务器上创建虚拟用户账号

建立存储虚拟用户数据库和连接的数据库用户

建立连接数据库的用户

ed2d85f2fdf36a3d348bb95d5405996c.png


在数据库中准备相关表来存储虚拟用户的账号


实现基于mysql验证的vsftpd虚拟用户_第1张图片

测试连接

实现基于mysql验证的vsftpd虚拟用户_第2张图片

三 添加虚拟用户

根据需要添加所需要的用户,为了安全应该使用password

函数加密其密码后存储

在ftp服务器上配置vsftpd服务

在ftp服务器上建立pam认证所需文件

Vim /etc/pam.d/vsftpd.mysql添加如下两行

d9f25dcef0fb507afdf03ab8cad5315a.png

auth  表示认证

account  验证账号密码正常使用

required  表示认证要通过

pam_mysql.so 模块是默认的相对路径,是相对/lib64/security/ 路

径而言,也可以写绝对路径;后面为给此模块传递的参数

user=vsftpd 为登录mysql 的用户

passwd=magedu  登录mysql 的的密码

host=mysqlserver mysql 服务器的主机名或ip 地址

db=vsftpd 指定连接msyql 的数据库名称

table=users  指定连接数据库中的表名

usercolumn=name  当做用户名的字段

passwdcolumn=password  当做用户名字段的密码

crypt=2  密码的加密方式为mysql password()函数加密

四 建立相应用户和修改vsftpd配置文件,使其适应mysql认证,建立虚拟用户映射的系统用户及对应的目录

useradd -s /sbin/nologin -d /var/ftproot vuser

chmod 555 /var/ftproot centos7  需除去ftp 根目录的写权限

mkdir /var/ftproot/{upload,pub}

setfacl m u:vuser:rwx /var/ftproot/upload

确保/etc/vsftpd/vsftpd.conf中已经启用了以下选项

Anonymous_enable=yes

并添加下面两项

guest_enable=yes

guest_username=vuser

修改下面一项,原系统用户无法登录

实现基于mysql验证的vsftpd虚拟用户_第3张图片

五 启动vsftpd服务

Systemctl start vsftpd

查看端口开启情况

Ss -ntl |grep :21

六 测试:利用ftp客户端工具,以虚拟用户登录验证结果

实现基于mysql验证的vsftpd虚拟用户_第4张图片