实验环境:需要两台主机
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';(给[email protected]授权)
二、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登录测试
当看到这个状态时候,证明ftp1测试成功
用ftp2登录测试
当看到这个状态时,证明ftp2也没问题。那么恭喜你,已经成功搭建好基于mysql的ftp!!!!