vsftpd虚拟用户

虚拟用户:

  1. 所有虚拟用户会统一映射为一个指定的系统帐号:访问共享位置,即为此系统帐号的家目录

  2. 各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定

虚拟用户帐号的存储方式:

  1. 文件:编辑文本文件,此文件需要被编码为hash 格式Berkeley DB database,奇数行为用户名,偶数行为密码

  2. 关系型数据库中的表中:实时查询数据库完成用户认证

vsftpd 支持mysql库:pam要依赖于pam-mysql

/lib64/security/pam_mysql.so
/usr/share/doc/pam_mysql-0.7/README

实现基于文件验证的虚拟用户

创建用户数据库文件

[root@centos8 ~] rpm -qf `which db_load`
libdb-utils-5.3.28-37.el8.x86_64
[root@centos8 ~] vim /etc/vsftpd/vusers.txt
wang
wangpass
mage
magepass
[root@centos8 ~] db_load -T -t hash -f /etc/vsftpd/vusers.txt
/etc/vsftpd/vusers.db
[root@centos8 ~] chmod 600 /etc/vsftpd/vusers.* 

创建用户和访问FTP目录

[root@centos8 ~] useradd -d /data/ftproot -s /sbin/nologin -r vuser
[root@centos8 ~] mkdir -pv /data/ftproot/upload
[root@centos8 ~] setfacl -m u:vuser:rwx /data/ftproot/upload

#chmod a=rx /data/ftproot/ 如果自动创建家目录,需修改权限

创建pam配置文件

[root@centos8 ~] vim /etc/pam.d/vsftpd.db

auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers

指定pam配置文件

[root@centos8 ~] vim /etc/vsftpd/vsftpd.conf

guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd.db

虚拟用户建立独立的配置文件

#指定各个用户配置文件存放的路径
[root@centos8 ~] vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers.d/

#创建各个用户配置文件存放的路径
[root@centos8 ~] mkdir /etc/vsftpd/vusers.d/

#创建各用户自已的配置文件,允许wang用户可读写,其它用户只读
[root@centos8 ~] vim /etc/vsftpd/vusers.d/wang  
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

#创建各用户自已的配置文件
[root@centos8 ~] vim /etc/vsftpd/vusers.d/mage  

#登录目录改变至指定的目录
local_root=/data/ftproot2 
实现基于mysql验证的vsftpd虚拟用户

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

项目网站:https://sourceforge.net/projects/pam-mysql/

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

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

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

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

[root@centos8 ~] yum –y install mariadb-server
[root@centos8 ~] systemctl enable --now mariadb.service

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

#建立存储虚拟用户数据库和表
[root@centos8 ~] mysql
mysql> CREATE DATABASE vsftpd;
mysql> USE vsftpd;
mysql> CREATE TABLE users (
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
name CHAR(50) BINARY NOT NULL,
password CHAR(48) BINARY NOT NULL
);

#添加虚拟用户,为了安全应该使用PASSWORD函数加密其密码后存储
mysql> INSERT INTO users(name,password) values('wang',password('magedu'));
mysql> INSERT INTO users(name,password) values('mage',password('magedu'));

#创建连接的数据库用户
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'172.16.0.%' IDENTIFIED BY 'magedu';
mysql> FLUSH PRIVILEGES;

在FTP服务器上安装vsftpd

[root@centos7 ~] yum install vsftpd 

在FTP服务器上安装pam_mysql包

对centos6:

[root@centos6 ~] yum install pam_mysql

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

pam_mysql源码编译:

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

#下载pam-mysql源码进行编译
[root@centos7 ~]wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql0.7RC1.tar.gz
                     https://github.com/NigelCunningham/pam-MySQL/archive/v0.8.1.tar.gz
                     
[root@centos7 ~] tar xvf pam_mysql-0.7RC1.tar.gz
[root@centos7 ~] cd pam_mysql-0.7RC1/

[root@centos7 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.

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

在FTP服务器上建立pam认证所需要的文件

[root@centos7 ~] vim /etc/pam.d/vsftpd.mysql

#添加如下两行
auth required pam_mysql.so user=vsftpd passwd=magedu host=mysqlserver db=vsftpd
table=users usercolumn=name passwdcolumn=password crypt=2

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

crypt 加密方式:

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

配置字段说明

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

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

#建立虚拟用户映射的系统用户及对应的目录
[root@centos7 ~] useradd -s /sbin/nologin -d /data/ftproot -r vuser
#centos7 需除去ftp根目录的写权限
              
[root@centos7 ~] mkdir -pv /data/ftproot/upload
[root@centos7 ~] setfacl –m u:vuser:rwx /data/ftproot/upload

#确保/etc/vsftpd/vsftpd.conf中已经启用了以下选项
[root@centos7 ~] vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES

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

#修改下面一项,原系统用户无法登录
pam_service_name=vsftpd.mysql

#启动vsftpd服务
[root@centos7 ~] systemctl enable --now vsftpd

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

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

#配置vsftpd为虚拟用户使用配置文件目录
[root@centos7 ~] vim /etc/vsftpd/vsftpd.conf

#添加如下选项
user_config_dir=/etc/vsftpd/vusers.d/

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

#配置虚拟用户的访问权限
#虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。如要让用户wang具有上传文件的权限,可修改/etc/vsftpd/vusers.d/wang文件,在里面添加如下选项并设置为YES即可,只读则设为NO
#注意:需确保对应的映射用户对于文件系统有写权限
[root@centos7 ~] vim /etc/vsftpd/vusers.d/wang

anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable={YES|NO}

#登录目录改变至指定的目录
local_root=/data/ftproot2 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值