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

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

 

 

 

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

 

环境准备:

本实验在两台主机上实现

一台做为FTP服务器CentOS7, IP:10.0.0.7

一台做 Mariadb 数据库服务器 CentOS8,IP:10.0.0.8

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

 

1.1在数据库服务器上安装mysql数据库

#注意:MySQL8.0由于取消了PASSWORD()函数不支持,因此选择Mariadb

[root@centos8 ~]#yum -y install mariadb-server

[root@centos8 ~]#systemctl enable --now mariadb.service

 

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

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

[root@centos8 ~]#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 ('ftp_wang',password('Mmagedu0!'));

MariaDB [vsftpd]> insert into users (name,password) values ('ftp_mage',password('Mmagedu0!'));

MariaDB [vsftpd]> select * from users;

+----+----------+-------------------------------------------+

| id | name     | password                                  |

+----+----------+-------------------------------------------+

|  1 | ftp_wang | *ECDC144B52E8C55BBCCACB4D415A1455E4E3476C |

|  2 | ftp_mage | *ECDC144B52E8C55BBCCACB4D415A1455E4E3476C |

+----+----------+-------------------------------------------+

2 rows in set (0.000 sec)

 

#创建连接的数据库用户

MariaDB [vsftpd]> grant select on vsftpd.* to vsftpd@'10.0.0.%' identified by 'Mmagedu0!';

MariaDB [vsftpd]> flush privileges;

 

 

 

2.1FTP服务器上安装vsftpd 和 pam_mysql包

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

 

2.2FTP服务器上安装 pam_mysql

#下载pam-mysql源码包,并解包

[root@centos7 ~]#tar xvf pam_mysql-0.7RC1.tar.gz -C /usr/local/src

[root@centos7 ~]#cd /usr/local/src/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 14820 Mar 19 22:18 /lib64/security/pam_mysql.so

 

 

2.3FTP服务器上建立pam认证所需文件

[root@centos7 pam_mysql-0.7RC1]#vim /etc/pam.d/vsftpd.mysql

#添加如下两行

auth required pam_mysql.so user=vsftpd passwd=Mmagedu0! host=10.0.0.db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

account required pam_mysql.so user=vsftpd passwd=Mmagedu0! host=10.0.0.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=Mmagedu0! 登录mysql的的密码

host=10.0.0.8 mysql服务器的主机名或ip地址

db=vsftpd 指定连接msyql的数据库名称

table=users 指定连接数据库中的表名

usercolumn=name 当做用户名的字段

passwdcolumn=password 当做用户名字段的密码

crypt=2 密码的加密方式为mysql password()函数加密

 

 

 

2.4、建立相应用户和修改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

[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

#添加下面两项

guest_enable=YES

guest_username=vuser

 

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

pam_service_name=vsftpd.mysql

 

 

 

2.5、启动vsftpd服务

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

 

2.6、在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_wang

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/

 

[root@centos7 pam_mysql-0.7RC1]#mkdir /data/ftproot1/upload -pv

[root@centos7 pam_mysql-0.7RC1]#chown vuser.vuser /data/ftproot1/upload/

[root@centos7 pam_mysql-0.7RC1]#ll -d /data/ftproot1/upload/

 

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

 

 

2.7测试

[root@centos7 pam_mysql-0.7RC1]# ftpd 10.0.0.8

bash: ftpd: command not found...

[root@centos7 pam_mysql-0.7RC1]# yum install ftp -y

 

[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_wang

331 Please specify the password.

Password:

230 Login successful.

 

posted @   惊起千层浪  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示