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) 编辑 收藏 举报