vsftpd基于mysql_基于mysql验证的vsftpd虚拟用户

基于mysql验证的vsftpd虚拟用户主要利用 pam_mysql 模块可以实现基于MySQL的FTP虚拟用户功能

因此项目年代久远不再更新,只支持CentOS 6,7,不支持CentOS 8!

本实验在两台主机上实现, CentOS 7 一台做为FTP服务器,一台做MySQL 数据库服务器!

1、在数据库服务器上安装mysql数据库

$ yum -y install mariadb-server

$ systemctl enable --now mariadb.service

2、在数据库服务上配置数据库支持vsftp服务

$ mysql

# 建立存储虚拟用户数据库和表

MariaDB [(none)]> CREATE DATABASE vsftpd;

MariaDB [(none)]> USE vsftpd;

MariaDB [vsftpd]> CREATE TABLE users (

id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,

name CHAR(50) BINARY NOT NULL,

password CHAR(48) BINARY NOT NULL

);

# 添加虚拟用户,为了安全应该使用PASSWORD函数加密其密码后存储

MariaDB [vsftpd]> INSERT INTO users(name,password) values('test03',password('test'));

MariaDB [vsftpd]> INSERT INTO users(name,password) values('test04',password('test'));

# 创建连接的数据库用户

MariaDB [vsftpd]> GRANT SELECT ON vsftpd.* TO vsftpd@'%' IDENTIFIED BY '123456';

MariaDB [vsftpd]> FLUSH PRIVILEGES;

3、在ftp服务器上安装vsftpd和pam_mysql包

$ yum install vsftpd

在FTP服务器上安装 pam_mysql

对于 centos 6:pam_mysql由EPEL的源中提供

$ yum install pam_mysql

对于 centos7 和 8:无对应rpm包,需手动编译安装

pam-mysql源码进行编译

$ yum install vsftpd gcc gcc-c++ make mariadb-devel pam-devel -y

# 安装相关包

$ wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz

# 也可以在github上获取源码https://github.com/NigelCunningham/pam-MySQL/archive/v0.8.1.tar.g

# 下载pam-mysql源码进行编译

$ tar xvf pam_mysql-0.7RC1.tar.gz && cd pam_mysql-0.7RC1/

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

# 如果上面命令不指定 --with-pam-mods-dir=/lib64/security 会报以下错误

# checking if the second argument of pam_conv.conv() takes const pointer... no

# configure: error: Your system doesn't appear to be configured to use PAM. Perhaps you need to specify the correct location where the PAM modules reside.

$ make install

$ ll /lib64/security/pam_mysql*

-rwxr-xr-x 1 root root 882 Dec 17 14:34 /lib64/security/pam_mysql.la

-rwxr-xr-x 1 root root 141712 Dec 17 14:34 /lib64/security/pam_mysql.so

4、 在FTP服务器上建立pam认证所需文件

$ vim /etc/pam.d/vsftpd.mysql

#添加如下两行

auth required pam_mysql.so user=vsftpd passwd=123456 host=10.4.7.101 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

account required pam_mysql.so user=vsftpd passwd=123456 host=10.4.7.101 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

crypt 加密方式:

0表示不加密

1表示crypt(3)加密

2表示使用mysql password()函数加密

3表示md5加密

4表示sha1加密

配置字段说明

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、 建立相应用户和修改vsftpd配置文件

$ useradd -s /sbin/nologin -d /data/ftproot -r vuser

# 建立虚拟用户映射的系统用户及对应的目录

$ mkdir -pv /data/ftproot/upload

$ setfacl –m u:vuser:rwx /data/ftproot/upload

# centos7 需除去ftp根目录的写权限

$ vim /etc/vsftpd/vsftpd.conf

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

anonymous_enable=YES

# 添加下面两项

guest_enable=YES

guest_username=vuser

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

pam_service_name=vsftpd.mysql

$ systemctl enable --now vsftpd

# 启动vsftpd服务

6、在FTP服务器上配置虚拟用户具有不同的访问权限

vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可!

$ vim /etc/vsftpd/vsftpd.conf

# 配置vsftpd为虚拟用户使用配置文件目录

# 添加如下选项

user_config_dir=/etc/vsftpd/vusers.d/

$ mkdir /etc/vsftpd/vusers.d/

# 创建所需要目录,并为虚拟用户提供配置文件

# 配置虚拟用户的访问权限

# 虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。如要让用户test03具有上传文件的权限,可修改/etc/vsftpd/vusers.d/wang文件,在里面添加如下选项并设置为YES即可,只读则设为NO

# 注意:需确保对应的映射用户对于文件系统有写权限

$ vim /etc/vsftpd/vusers.d/test03

anon_upload_enable={YES|NO}

anon_mkdir_write_enable={YES|NO}

anon_other_write_enable={YES|NO}

# 登录目录改变至指定的目录

local_root=/data/ftproot2

自行测试!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值