vsftpd 虚拟用户

 


 


 概述:

虚拟用户:给特定服务使用的用户帐号
所有虚拟用户会统一映射为一个指定的系统帐号:访问共享位置,即为此系统帐号的家目录
各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定

实现基于MYSQL验证的vsftpd虚拟用户(利用 pam_mysql 模块可以实现基于MySQL的FTP虚拟用户功能)
pam_mysql站点:

http://pam-mysql.sourceforge.net/
https://sourceforge.net/projects/pam-mysql/
http://sf.net/projects/pam-mysql

 

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

 

 实验环境:
一台做为FTP服务器CentOS 7:10.0.0.55
一台做Mariadb数据库服务器:10.0.0.30
1.创建vsftpd数据库及存储vsftpd虚拟账号的表及账号信息。

create database vsftpd;

CREATE TABLE users (
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
name CHAR(50) BINARY NOT NULL,
password CHAR(48) BINARY NOT NULL
);

insert into users(name,password) values('cql1',password(123456));
insert into users(name,password) values('cql2',password(123456));
insert into users(name,password) values('cql3',password(123456));

 

 

 

2.创建vsftpd用来连接数据库的账号权限为select

create user vsftpd@'10.0.0.%' identified by '123456';
grant select on vsftpd.* to vsftpd@'10.0.0.%';

 

 

 

 

 

3.在VSFTPD服务上安装编译pam.mysql所需的依赖包

 

yum -y install gcc gcc-c++ make mariadb-devel  pam-devel
wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
tar xf pam_mysql-0.7RC1.tar.gz

 

 

 

4.进入pam.mysql开始编译安装,编译后可以看到模块安装的路径下出现pam.mysql模块。

cd pam_mysql-0.7RC1
./configure --with-pam-mods-dir=/lib64/security
make install

 

 

5.创建vsftpd连接pam.mysql模块间接连接数据库的配置文件。

vim /etc/pam.d/vsftpd.mysql    #在 /etc/pam.d/ 下创建配置文件,文件名自定义。  

 

#分别为验证配置和账号有效性配置(相差并不多),将连接数据库使用的账号、密码、数据库IP、数据库上用于vsftpd使用的database、table、表中用于存放 账号、密码 的字段名进行填写
auth required pam_mysql.so user=vsftpd passwd=123456 host=10.0.0.30 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

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

 


 

 

6.在vsftpd服务器上创建个系统账号ftpuser,这个账号用来给vsftpd的虚拟账号作映射(因为要访问磁盘上的内容必须要系统账号)

useradd -r -s /sbin/nologin -d /data/ftproot ftpuser

 

<创建ftpuser账号的家目录及测试文件夹并设置所有者为ftpuser拥有rwx权限的facl>

mkdir /data/ftproot
mkdir /data/ftproot/upload
setfacl -m u:ftpuser:rwx /data/ftproot/upload

 


7.打开vsftpd的配置文件,将配置好的pam.mysql模块应用、开启guest账号功能并映射之前已经创建ftpuser账号。

vim /etc/vsftpd/vsftpd.conf

pam_service_name=vsftpd.mysql  
guest_enable=YES
guest_username=ftpuser
user_config_dir=/etc/vsftpd/conf.d/  #此选项可为系统账号或虚拟账号基于账号创建不同家目录(实现虚拟化管理)

 

 

 

 

 

 

8.进入到vsftpd子配置文件中,以数据库中users表中的账号名去创建文件并指定每个账号的家目录及开启相关配置。

cd /etc/vsftpd/conf.d/


<各个账号的家目录被存放于 /data/vsftpd/ 下因此将其创建出来>

mkdir /data/vsftpd_user/cql{1..3} -p
touch /data/vsftpd_user/cql1/123.txt #创建测试文件,当账号登录家目录时以便查看。
touch /data/vsftpd_user/cql2/456.txt
touch /data/vsftpd_user/cql3/789.txt
systemctl restart vsftpd             #配置完后重启服务

 


 

 

 

测试结果:
1)三个账号皆能登录成功并且进入设定的独立家目录当中。

 

 

 

 

 

 

2)但这个家目录也是根目录(FTP中根目录不可拥有w权限),也就意味着在根目录中是无法上传文件。需要创建一个子目录并拥有w权限给虚拟账号用于上传文件。

mkdir  /data/vsftpd_user/cql{1,2,3}/upload

 chown ftpuser:ftpuser /data/vsftpd_user/cql{1,2,3}/upload   #因为开启了guest选项,虚拟账号被映射成ftpuser(系统账号),因此实际工作的账号为ftpuser,所以需要将upload的所有者改为ftpuser。

 

 

 

 <可以看到三个账号都能够put>

 

 

 

 

 

 













 

posted on 2021-07-10 00:05  1251618589  阅读(2)  评论(0编辑  收藏  举报

导航