Vsftpd使用虚拟用户登录调用mysql验证
安装包:vsftpd,mariadb-server,mariadb-devel,pam-devel(此包如有安装有问题,可使用rpm命令安装)
1、 制作pam_mysql.so模块
获取pam_mysql-0.7RC1包
进入pam_mysql-0.7RC1目录下,执行configure命令,如下:
pam_mysql-0.7RC1]# ./configure –with-pam=/usr –with-mysql=/usr –with-pam-mods-dir=/usr/lib64/security
pam_mysql-0.7RC1]# make && make install
完成后在/usr/lib64/security下会有生成pam_mysql.so,如下
2、 数据配置
修改/etc/my.conf,添加如下:
建立虚拟用户数据库,库名vsftpd
create database vsftpd;
设置默认数据库为vsftpd
use vsftpd;
建立虚拟用户密码表,表名users,
create table users(id int unsigned not null auto_increment primary key, name varchar(100) not null,password varchar(48) not null,unique key(name));
插入数据两条数据, 这两条数据为2个虚拟用户和其密码
insert into users (name,password) values (‘smartwy’,password(‘123456’)), (‘test’,password(‘123456’));
授权vsftpd这个账号可以读取vsftpd数据库的user表
查看users表中数据
grant all on vsftpd.users to ‘vsftpd’@’localhost’ identified by ‘123456’;
flush privileges;或回到bash执行systemctl restart mariaDB
3、 vsftpd配置
修改/etc/vsftpd/vsftpd.conf,如下:
创建vuser系统用户与共享目录
~]# mkdir –pv /ftproot/vuser
~]# useradd -d /ftproot/vuser vuser
~]# chown -R vuser:vuser /ftproot/vuser
~]# chmod a-w /ftproot/vuser
/ftproot/vuser目录为虚拟用户登录操作的ftp共享目录
在/etc/pam.d/下新建vsftpd.vusers PAM认证文件,如下:
注意:host选项为数据库grant命令授权时的参数,切记。
crypt=0:密码使用明文方式保存
crypt=1:密码使用UNIX的DES加密方式加密后保存
crypt=2:密码使用MySQL的password()函数加密后保存
crypt=3:密码使用MD5散列值的方式保存
为虚拟用户设置权限,如下:
在/etc/vsftpd/vusers_config/下新建test、smartwy文件,如下:
配置完成后,重启vsftpd服务,
4、测试
浏览器测试,如下:输入ftp://用户名:密码@172.16.253.190
下面为匿名用户可访问的共享/var/ftp/pub目录,
下面是/etc/vsftpd/vsftpd.conf常用选项简介:
#禁用匿名用户登陆
anonymous_enable=NO
#允许本地用户登陆
local_enable=YES
#允许本地用户写入
write_enable=YES
#注意:这个地方如果不配置,就会出现只有root用户可以登陆,普通用户不可以
check_shell=NO
#掩码,决定了上传上来的文件的权限。设置为000使之有最大权限
local_umask=000
#允许记录日志
xferlog_enable=YES
#允许数据流从20端口传输
connect_from_port_20=YES
#日志路径
xferlog_file=/var/log/vsftpd.log
#ftp欢迎语,可以随便设置
ftpd_banner=hi,guys!
#注意:这个选项可以保证用户锁定在指定的家目录里,防止系统文件被修改。
chroot_local_user=YES
#注意:这个不配置有可能出现只能下载不能上传
allow_writeable_chroot=YES
#配置了可以以stand alone模式运行
listen=YES
#注意:该选项不配置可能导致莫名其妙的530问题
seccomp_sandbox=NO
#说明我们要指定一个userlist,里边放的是允许ftp登陆的本地用户。如果设置为YES,则文件里设置的是不允许登陆的本地用户
userlist_deny=NO
userlist_enable=YES
#记录允许本地登陆用户名的文件
userlist_file=/etc/vsftpd/allowed_users