实验环境:需要两台主机

    1、一台mariadb server

    2、一台ftp server

一、mariadb服务器

    1、安装mariadb包

        yum install mariadb-devel

    2、跑下安全脚本

         mysql_secure_installation   
    3、创建数据库

        mysql -uroot -p

        >create database vsftpd;

        >use vsftpd

        >create table ftpusers(name char(30),pass char(50));(创建表)

        >insert ftpusers values('ftp1',password('centos')),('ftp2',password('magedu'));(添加表内容)

        >grant select on vsftpd.ftpusers to 'ftp'@'172.17.166.166' identified by 'centos';(给ftp@172.17.166.166授权)

二、ftp服务器

    1、安装包组以及所需要的包

        yum groupinstall "development tools"

        yum install mysql-devel pam-devel

     2、编译安装 pam_mysql-0.7RC1.tar.gz

    tar xvf pam_mysql-0.7RC1.tar.gz

    cd pam_mysql-0.7RC1

    ./configure --with-pam-mods-dir=/lib64/security --with-pam=/usr

    make  && make install

    3、创建用户

       useradd -d  /app/ftpdir -r -m ftpuser (创建系统用户,使所有用户访问都指向ftpuser)

    4、编写模块配置文件

    vim /etc/pam.d/vsftpd.mysql

        auth required pam_mysql.so user=ftp passwd=centos host=172.17.177.177 db=vsftpd table=ftpusers usercolumn=name passwdcolumn=pass crypt=2

        account required pam_mysql.so user=ftp passwd=centos host=172.17.177.177 db=vsftpd table=ftpusers usercolumn=name passwdcolumn=pass crypt=2   
    其中选项为:

               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()函数加密

    5、更改ftp配置文件

    vim /etc/vsftpd/vsftpd.conf

     pam_service_name=vsftpd.mysql 修改

     再加下面行

     guest_enable=yes(开启指定用户选项)

     guest_username=ftpuser(指定用户)

        user_config_dir=/etc/vsftpd/conf.d/(指定目录,使其每个虚拟用户的权限不同)

    6、创建目录

        mkdir /etc/vsftpd/conf.d/

        cd /etc/vsftpd/conf.d/

        vim /etc/vsftpd/conf.d/ftp1

            anon_upload_enable=yes(允许ftp1上传文件)

        vim /etc/vsftpd/conf.d/ftp2

            local_root=/app/ftpdir2(指定ftp2的根文件为/app/ftpdir2)

    7、设置权限

        cd /app

        chmod 555 /app/ftpdir/(根目录不能有写权限)

        mkdir /app/ftpdir/upload

        chown ftpuser /app/ftpdir/upload

        mkdir /app/ftpdir2

        chmod 555 /app/ftpdir2

三、测试是否成功

    用ftp1登录测试

    736dbfe54a41881947ecdaec0a918e29.jpg当看到这个状态时候,证明ftp1测试成功

    用ftp2登录测试

    acb22997ee58577bf1ded638925c3e80.jpg

    当看到这个状态时,证明ftp2也没问题。那么恭喜你,已经成功搭建好基于mysql的ftp!!!!