实现基于MYSQL验证的vsftpd虚拟用户访问

实现基于MYSQL验证的vsftpd虚拟用户访问

利用 pam_mysql 模块可以实现基于MySQL的FTP虚拟用户功能

注意:

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

MySQL8.0由于取消了PASSWORD()函数不支持,因此选择MariaDB

环境准备:

源码包:pam_mysql-0.7RC1.tar.gz

IP操作系统及版本描述
10.0.0.7CentOS-7.9FTP服务器
10.0.0.17MariaDB-10.4.22数据库服务器

1、在数据库服务上配置数据库支持vsftpd服务

#建立存储虚拟用户数据库和表
MariaDB [mysql]> CREATE DATABASE vsftpd;
MariaDB [mysql]> 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('ftp_xiaoming',password('123456'));
MariaDB [vsftpd]> INSERT INTO users(name,password) values('ftp_xiaohong',password('654321'));
MariaDB [vsftpd]> select * from users;
+----+--------------+-------------------------------------------+
| id | name         | password                                  |
+----+--------------+-------------------------------------------+
|  1 | ftp_xiaoming | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
|  2 | ftp_xiaohong | *2A032F7C5BA932872F0F045E0CF6B53CF702F2C5 |
+----+--------------+-------------------------------------------+

#创建连接的数据库用户
MariaDB [vsftpd]>  GRANT SELECT ON vsftpd.* TO vsftpd@'10.0.0.%' IDENTIFIED BY '123456';
MariaDB [vsftpd]> FLUSH PRIVILEGES;

2、在FTP服务器上安装vsftpd 和 pam_mysql包

[root@centos7 ~]#yum -y install vsftpd

3、在FTP服务器上安装 pam_mysql

#下载pam-mysql源码包,并解包
[root@centos7 ~]#tar xvf pam_mysql-0.7RC1.tar.gz -C /usr/local/src
[root@centos7 ~]#cd /usr/local/src
[root@centos7 src]#ls
pam_mysql-0.7RC1
[root@centos7 src]#cd pam_mysql-0.7RC1/

#安装相关包
[root@centos7 pam_mysql-0.7RC1]#yum -y install vsftpd gcc gcc-c++ make mariadb-devel pam-devel

#编译安装
[root@centos7 pam_mysql-0.7RC1]#./configure --with-pam-mods-dir=/lib64/security
[root@centos7 pam_mysql-0.7RC1]#make install
[root@centos7 pam_mysql-0.7RC1]#ll /lib64/security/pam_mysql*
-rwxr-xr-x 1 root root    882 Mar 19 22:18 /lib64/security/pam_mysql.la
-rwxr-xr-x 1 root root 141720 Mar 19 22:18 /lib64/security/pam_mysql.so

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

[root@centos7 pam_mysql-0.7RC1]#vim /etc/pam.d/vsftpd.mysql
#添加如下两行
auth required pam_mysql.so user=vsftpd passwd=123456 host=10.0.0.17 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=123456 host=10.0.0.17 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

注意:以上参考 README文档

crypt 加密方式:

  • 0表示不加密
  • 1表示crypt(3)加密
  • 2表示使用mysql password()函数加密
  • 3表示md5加密
  • 4表示sha1加密

配置字段说明:

  • auth 表示认证
  • account 验证账号密码正常使用
  • required 表示认证要通过
  • pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝对路径;后
    面为给此模块传递的参数
  • user=vsftpd为登录mysql的用户
  • passwd=123456 登录mysql的的密码
  • host=10.0.0.17 mysql服务器的主机名或ip地址
  • db=vsftpd 指定连接msyql的数据库名称
  • table=users 指定连接数据库中的表名
  • usercolumn=name 当做用户名的字段
  • passwdcolumn=password 当做用户名字段的密码
  • crypt=2 密码的加密方式为mysql password()函数加密

5、建立相应用户和修改vsftpd配置文件

#建立虚拟用户映射的系统用户及对应的目录
[root@centos7 pam_mysql-0.7RC1]#useradd -s /sbin/nologin -d /data/ftproot -r vuser
[root@centos7 pam_mysql-0.7RC1]#mkdir -pv /data/ftproot/upload
mkdir: created directory ‘/data/ftproot’
mkdir: created directory ‘/data/ftproot/upload’
[root@centos7 pam_mysql-0.7RC1]#setfacl -m u:vuser:rwx /data/ftproot/upload

#确保/etc/vsftpd/vsftpd.conf中已经启用了以下选项
[root@centos7 pam_mysql-0.7RC1]#vim /etc/vsftpd/vsftpd.conf
#修改下面一项,原系统用户无法登录
pam_service_name=vsftpd.mysql

#添加下面两项
guest_enable=YES
guest_username=vuser

6、启动vsftpd服务

[root@centos7 pam_mysql-0.7RC1]#systemctl enable --now vsftpd

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

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

#配置vsftpd为虚拟用户使用配置文件目录
[root@centos7 pam_mysql-0.7RC1]#vim /etc/vsftpd/vsftpd.conf
#添加如下选项
user_config_dir=/etc/vsftpd/conf.d/

#创建所需要目录,并为虚拟用户提供配置文件
[root@centos7 pam_mysql-0.7RC1]#mkdir /etc/vsftpd/conf.d/

#配置虚拟用户的访问权限
[root@centos7 pam_mysql-0.7RC1]#vim /etc/vsftpd/conf.d/ftp_xiaoming
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

#登录目录改变至指定的目录
local_root=/data/ftproot1
[root@centos7 pam_mysql-0.7RC1]#tree /etc/vsftpd/conf.d/
/etc/vsftpd/conf.d/
└── ftp_xiaoming

0 directories, 1 file
[root@centos7 pam_mysql-0.7RC1]#mkdir /data/ftproot1/upload -pv
mkdir: created directory ‘/data/ftproot1’
mkdir: created directory ‘/data/ftproot1/upload’
[root@centos7 pam_mysql-0.7RC1]#chown vuser.vuser /data/ftproot1/upload/
[root@centos7 pam_mysql-0.7RC1]#ll -d /data/ftproot1/upload/
drwxr-xr-x 2 vuser vuser 6 Mar 19 23:31 /data/ftproot1/upload/

[root@centos7 pam_mysql-0.7RC1]#systemctl restart vsftpd

[root@centos7 ~]#ftp 10.0.0.7
Connected to 10.0.0.7 (10.0.0.7).
220 (vsFTPd 3.0.2)
Name (10.0.0.7:root): ftp_xiaoming
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd upload
ftp> lcd /etc
ftp> put hosts

[root@centos7 pam_mysql-0.7RC1]#ll /data/ftproot1/upload/
total 4
-rw------- 1 vuser vuser 158 Mar 19 23:45 hosts

[root@centos7 pam_mysql-0.7RC1]#cd /etc/vsftpd/conf.d/
[root@centos7 conf.d]#ls
ftp_xiaoming
[root@centos7 conf.d]#cp ftp_xiaoming ftp_xiaohong
[root@centos7 conf.d]#vim ftp_xiaohong
local_root=/data/ftproot2
[root@centos7 conf.d]#mkdir /data/ftproot2/upload -pv
mkdir: created directory ‘/data/ftproot2’
mkdir: created directory ‘/data/ftproot2/upload’
[root@centos7 conf.d]#touch /data/ftproot2/xiaohong.txt

[root@centos7 ~]#ftp 10.0.0.7
Connected to 10.0.0.7 (10.0.0.7).
220 (vsFTPd 3.0.2)
Name (10.0.0.7:root): ftp_xiaohong
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (10,0,0,7,131,227).
150 Here comes the directory listing.
drwxr-xr-x    2 0        0               6 Mar 19 16:04 upload
-rw-r--r--    1 0        0               0 Mar 19 16:09 xiaohong.txt
226 Directory send OK.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直在努力学习的菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值