mysql管理多服务器ftp虚拟用户

发布时间 2023-06-09 15:57:04作者: 小七闲

前言

  • 1.FTP虚拟用户:FTP虚拟用户由ftp服务器提供,依赖于一个服务器本地账号,可以同时设置多个虚拟账号。vsftpd分辨虚拟用户,由可插入认证模块(PAM)认证,该模块的账号信息可用文件或者数据库存储。

FTP虚拟用户是FTP服务器的专有用户,使用虚拟用户账号可以提供集中管理的FTP根目录,方便了管理员的管理,同时将用于FTP登录的用户名、密码与系统用户账号区别开,进一步增强了FTP服务器的安全性。

使用虚拟用户登录FTP服务器,可以避免使用操作系统帐号作为FTP用户带来的一些安全问题,也便于通过数据库或其它程序来进行管理。虚拟用户的特点是只能访问服务器为其提供的FTP服务,而不能访问系统的其它资源。

  • 2.数据库存储:服务器的ftp功能使用vsftpd,配合pam-mysql模块来访问数据库进行虚拟用户认证。其中数据库只负责存储用户信息。
  • 3.基本流程:FTP用户访问->PAM配置文件(由vsftpd.conf中pam_service_name指定)->PAM认证->区别用户读取配置文件(由vsftpd.conf中user_config_dir指定配置文件路径,文件名即用户名)

1、环境

ftp服务器x2:centos7,分ip1、ip2。需要使用pam-mysql模块
数据库服务器x1:mysql
pam-mysql模块:该模块项目较久远,支持centos6和7,不支持centos8,且centos7需要用源码编译安装,最后版本的附件如下:
pam_mysql-0.7RC1.tar.gz
链接:https://pan.baidu.com/s/15l6M36lDJPOTspA6KXHcaw
提取码:njdx

2、配置数据库

1. 建库和表

新建vsftpd库,并创建users表:

// 创建数据库
CREATE DATABASE vsftpd;

// 创建虚拟用户表
CREATE TABLE `users`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户名',
  `password` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '密码,需要password函数加密',
  `service_ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '服务器ip',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

2. 新增虚拟用户信息

// 密码需要使用password函数进行加密
INSERT INTO users(name,password,service_ip) values('test01',password('test'),'服务器ip1');
INSERT INTO users(name,password,service_ip) values('test02',password('test'),'服务器ip2');

3. 授权访问

// 创建数据库用户,并授权该用户可访问。用户名:vsftpd,密码:123456
GRANT SELECT,INSERT,UPDATE ON vsftpd.* TO vsftpd@'%'  IDENTIFIED BY '123456';

// 也可以限制使用的ip网段,例如
GRANT SELECT,INSERT,UPDATE ON vsftpd.* TO vsftpd@'10.0.0.%'  IDENTIFIED BY '123456';

3、安装pam-mysql模块

1.安装对应的依赖

安装对应的依赖:
yum install vsftpd gcc gcc-c++ make mariadb-devel pam-devel -y

2.ftp服务器下载pam-mysql模块

wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz

3.解压并进入对应目录

tar xvf pam_mysql-0.7RC1.tar.gz && cd pam_mysql-0.7RC1/

4. 编译

# 设置编译参数
./configure --with-pam-mods-dir=/lib64/security

# 编译
make install

# 查看是否成功生成对应模块
ll /lib64/security/pam_mysql*

## 结果应包含如下文件:
# /lib64/security/pam_mysql.la
#  /lib64/security/pam_mysql.so

5.设置pam_mysql认证配置

新建文件/etc/pam.d/vsftpd.mysql,在其中设置以下内容:

auth required pam_mysql.so user=vsftpd passwd=123456 host=数据库ip db=vsftpd table=users usercolumn=name passwdcolumn=password where=`service_ip`='当前服务器ip' crypt=2
account required pam_mysql.so user=vsftpd passwd=123456 host=数据库ip db=vsftpd table=users usercolumn=name passwdcolumn=password where=`service_ip`='当前服务器ip' crypt=2

4、设置vsftpd的ftp虚拟用户

1. ftp服务器安装vsftpd

yum install vsftpd

2.设置vsftpd支持虚拟用户

  1. 复制一份vsftpd设置文件做备份:/etc/vsftpd/vsftpd.conf
  2. 然后修改以下设置:
# 关闭匿名登录
anonymous_enable=NO

# 锁定本地用户在主目录,不允许切换到上一级目录中
chroot_local_user=YES

# 将pam文件指定为vsftpd.mysql,不启用原设置
pam_service_name=vsftpd.mysql

  1. 然后新增以下设置:
# 允许禁锢的FTP根目录可写
allow_writeable_chroot=YES

# 将虚拟用户映射为本地vuser用户(前提是local_enable=YES)
guest_enable=YES
guest_username=vuser

# 设置虚拟用户使用的配置文件目录
user_config_dir=/etc/vsftpd/vusers.d/

# 这个参数表示虚拟用户和本地用户有相同的权限,可不设置
# virtual_use_local_privs=YES
  1. 重启vsftpd服务service vsftpd restart
  2. 设置每个虚拟用户的权限与目录
    1. 在/etc/vsftpd/vusers.d目录下新建虚拟用户配置文件。例如test01的用户,对应配置文件:/etc/vsftpd/vusers.d/test01
    2. 在test01文件内配置对应权限:
    #设定允许写操作
    // write_enable=YES
    
    #设定权限:可以上传文件
    //anon_upload_enable=YES
    
    #设定权限:不能新建目录
    //anon_mkdir_write_enable=NO
    
    #设定权限:不能删除/重命名文件
    //anon_other_write_enable=NO
    
    #设定权限:可以浏览目录下的文件
    // anon_world_readable_only=NO
    
    #设定上传文件权限掩码,022对应:新建的目录权限是755,文件的权限是 644
    // anon_umask=022
    
    #指定虚拟用户的具体主路径
    // local_root=/var/ftp/virtual/username
    
    #设定空闲连接超时时间
    // idle_session_timeout=600
    
    #设定单次连续传输最大时间
    // data_connection_timeout=120
    
    #设定并发客户端访问个数
    // max_clients=10
    
    #设定单个客户端的最大线程数,这个配置主要来照顾Flashget、迅雷等多线程下载软件
    // max_per_ip=5
    
    #设定该用户的最大传输速率,单位b/s" >> /etc/vsftpd/vconf/vconf.tmp
    // #local_max_rate=50000
    
    
    

5、测试

如果有遇到登录失败的情况,可以看下登录日志文件/var/log/secure

7、步骤脚本包

在自己尝试过程中,将以上步骤整理成脚本和配置文件,内含说明,有需要可取用。建议先自己实践过1-4步骤后,再使用脚本包的文件,便于理解和根据需要调整
百度链接 提取码: 6mai
1.png
2.png

6、参考引用

mysql管理ftp账号设置1:https://blog.51cto.com/johnnyfang/5213966
mysql管理ftp账号设置2:https://www.cnblogs.com/lvzhenjiang/p/14406450.html
ftp账号理解:https://cloud.tencent.com/developer/article/1025979
vsftpd选项设置:https://developer.aliyun.com/article/294506
vsftpd选项设置说明和自动化脚本:https://www.cnblogs.com/UG9527/p/11409703.html
pam-mysql原github:https://github.com/NigelCunningham/pam-MySQL