千家信息网

FTP(六)实现基于MYSQL验证的FTP虚拟用户

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,实验准备:本实验在两台CentOS主机上实现,一台做为FTP服务 器,一台做数据库服务器一台CentOS-7当MYSQL服务器一台CentOS-6当FTP服务器注意,这里谁当FTP服务器很关键,因为有
千家信息网最后更新 2026年10月31日FTP(六)实现基于MYSQL验证的FTP虚拟用户

实验准备:本实验在两台CentOS主机上实现,一台做为FTP服务 器,一台做数据库服务器

  • 一台CentOS-7当MYSQL服务器
  • 一台CentOS-6当FTP服务器
    注意,这里谁当FTP服务器很关键,因为有一个PAM模块包是CentOS-7上没有的,需要源码编译,pam_mysql,下面我先演示CentOS-6当FTP服务器的例子

CentOS-6当FTP服务器

一,配置数据库服务器

1,在数据库服务器端安装mariadb-server包

    yum -y install  mariadb-server    systemctl  start  mariadb     # 设为开机自动启动    systemctl  enable mariadb

2,为了安全起见可以运行一下mariadb安全脚本

"mysql_secure_installation"    第一项问你:输入root密码  回车即可,因为没有    第二项问你:需要设置root密码么,当然要  敲Y    第三项问你:需要删除空账号用户么,当然要  敲Y    第四项问你:禁止root用户远程登入么,根据你们公司的需要    第五项问你:需要删除test测试数据哭么,我不需要    第六项问你:现在重新加载权限表吗 ,当然

3,在mariadb服务器端建立虚拟用户账号

 1,创建存储虚拟用户数据库和连接的数据库用户(带有mysql>的就表示需要连接到数据库执行操作)     #创建数据库     mysql> CREATE DATABASE vsftpd;       #查看数据库是否创建成功     mysql> SHOW DATABASES; 2,创建管理vsftpd数据库的用户。     mysql> GRANT all ON vsftpd.* TO   vsftpd@'192.168.136.6' IDENTIFIED BY 'centos';      命令解析:        GRANT:                 创建授权用户关键字        all  :                  表示拥有对vsftpd这个数据库的所有权限        vsftpd.*:              表示指定vsftpd的所有表        vsftpd@'192.168.136.6': @ 前的vsftpd表示用户名,@ 后面的表示该用户只能在192.168.136.6这个主机登入,如果想表示一个网段可以加百分号:192.168.136.%        IDENTIFIED BY 'centos': 作用设置密码,centos就是该用户的密码。

准备存放用户的相关表

    #切表        mysql> USE vsftpd;     #查看表        Mysql> SHOW TABLES;      #创建users表        mysql>create table users (id int auto_increment not null primary key,name varchar(30) binary not null, password varchar(50) binary not null);    命令解析:        create table users:创建表名为users子句        口号里的就表结构,用逗号分开的表示字段例如:第一个字段为id,第二个字段为name,第三个字段为password        修饰符:        int:           表示该字段为数字,        auto_increment:表示该字段是整数自动增长        not null:      表示该字段不能为空        primary key:   表示该字段为主键        varchar(30):   表示该字段可以是任意字符长度为30个        binary:        作用是让字段能够用于登入验证

在user表中添加虚拟用户

根据需要添加所需要的用户,为了安全应该使用PASSWORD 函数加密其密码后存储

    #查看表结构    mysql>DESC users;      #插入内容    mysql> INSERT INTO users(name,password)    values('wang',password('wang'));      #插入内容    mysql> INSERT INTO users(name,password)          values('li',password('li'));      #查看表内容    mysql> SELECT * FROM users;

二,配置FTP服务器

1,在FTP服务器上安装vsftpd和pam_mysql包

 centos6:pam_mysql由epel6的源中提供    配置epel源:    [epel]    name=centos-epel    baseurl=http://mirrors.aliyun.com/epel/6/x86_64/    gpgcheck=0    enable=1 #安装模块,以及FTP服务器端包    yum install vsftpd pam_mysql

2,创建FTP所需PAM模块认证文件

因为需要连接数据库所以之前的PAM块已经不能用了,需要自己配置

在/etc/pam.d/目录下创建一个名为vsftpd.mysql存放PAM模块的配置文件     cd /etc/pam.d/     touch  vsftpd.mysql      vim vsftpd.mysql     添加如下几行:     auth required pam_mysql.so user=vsftpd passwd=centos host=数据库IP地址  db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2      account required pam_mysql.so user=vsftpd passwd=centos host=数据库IP地址 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 配置字段说明     • auth 表示认证     • account 验证账号密码正常使用     • required 表示认证要通过     • pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路 径而言,也可以写绝对路径;后面为给此模块传递的参数     • user=vsftpd为登录mysql的用户     • passwd=magedu 登录mysql的的密码     • host=mysqlserver  mysql服务器的主机名或ip地址     • db=vsftpd  指定连接msyql的数据库名称     • table=users 指定连接数据库中的表名     • usercolumn=name 当做用户名的字段     • passwdcolumn=password 当做用户名字段的密码     • crypt=2 密码的加密方式为mysql password()函数加密     注意 :crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示 使用mysql password()函数加密,3表示md5加密,4表示sha1 加密 

3,建立系统普通用户,用作于虚拟用户映射的用户

一,创建用户,共享目录

    #创建虚拟用户映射的系统用户及对应的目录         useradd -s /sbin/nologin -d /var/ftproot vuser     #修改对应的目录权限,因为FTP共享根目录不能有写权限            chmod 555 /var/ftproot     #创建可以上传下载的共享目录        mkdir /var/ftproot/{upload,pub}    #并给vuser用户ACL权限        setfacl -m u:vuser:rwx /var/ftproot/upload 

修改主配置文件

确认/etc/vsftpd.conf中是否已经启用了以下选项    #支持匿名用户登入        anonymous_enable=YES     #添加下面两项 ,作用是支持虚拟用户映射为某一个系统用户        guest_enable=YES         guest_username=vuser     #修改下面一项,原系统用户无法登录         pam_service_name=vsftpd.mysql 

4,启动FTP服务

    #启动服务        service vsftpd start    #开机自动启动        chkconfig vsftpd on    #查看端口打开情况    ss -ntlp|grep :21 

5,SELinux相关配置

   1,restorecon  -R /lib64/security    2,setsebool -P ftpd_connect_db 1    3,setsebool -P ftp_home_dir 1    4,chcon -R -t public_content_rw_t /var/ftproot/ 

最后测试

   1,li用户登入测试:成功        [root@ansible-7 ~]# ftp 192.168.136.6        Connected to 192.168.136.6 (192.168.136.6).        220 (vsFTPd 2.2.2)        Name (192.168.136.6:root): li        331 Please specify the password.        Password:        230 Login successful.        Remote system type is UNIX.        Using binary mode to transfer files.    2,wang用户登入测试:成功        [root@ansible-7 ~]# ftp 192.168.136.6        Connected to 192.168.136.6 (192.168.136.6).        220 (vsFTPd 2.2.2)        Name (192.168.136.6:root): wang        331 Please specify the password.        Password:        230 Login successful.        Remote system type is UNIX.        Using binary mode to transfer files.

三,实现每个虚拟用户具有各自不同的权限

1,修改主配置文件

    vim /etc/vsftpd/vsftpd.conf      添加如下选项,作用是让虚拟用户支持独立权限配置文件,可以自定义存放目录。    user_config_dir=/etc/vsftpd/vusers_config/ 

2,在/etc/vsftpd/vusers_config/目录下创建每个虚拟用户的权限配置文件,文件名对应用户名

    mkdir /etc/vsftpd/vusers_config/     cd  /etc/vsftpd/vusers_config/     touch wang     touch li    "注意:虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关 指令进行的。   "    下面的权限都可以添加至文件中,需要什么权限添加什么权限            #是否支持上传功能            anon_upload_enable={YES|NO}            #是否支持创建文件功能            anon_mkdir_write_enable={YES|NO}             #是否支持删除文件功能            anon_other_write_enable={YES|NO}             #指定虚拟账户登入的共享目录            local_root=/ftproot           例如:让wang用户支持上传,下载,删除文件的权限那么只需要在wang的权限配置文件中添加如下几行        "注意:需确保对应的映射用户对于文件系统有写权限"        vim  wang        anon_upload_enable=YES         anon_other_write_enable=YES        anon_mkdir_write_enable=YES

CentOS-7当FTP服务器只有一个地方不同,就是需要编译安装pam_mysql模块,其他概略相同。

步骤:

 # 安装开发包组    yum -y groupinstall "Development Tools"  # 安装相关依赖包    yum -y install mariadb-devel  pam-devel vsftpd # 去官网下载pam_mysql-0.7RC1.tar.gz源码包            https://sourceforge.net/projects/pam-mysql/ # 解压缩包    tar xvf pam_mysql-0.7RC1.tar.gz  # 进入pam_mysql-0.7RC1/目录开始编译       cd pam_mysql-0.7RC1/  # 运行configure脚本    ./configure \    --with-mysql=/usr \     --with-pam=/usr \    --with-pam-mods-dir=/lib64/security # 编译开始    make -j 4 # 安装程序    make install 
用户 服务 数据 数据库 权限 服务器 字段 文件 配置 密码 目录 加密 模块 支持 系统 作用 用户名 测试 编译 安全 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网加科技 上海卓越科技互联网 互联网科技的 合肥互联网科技公司 上海喔噻互联网科技 互联网科技logo 伴你行互联网科技有限公司 多迪互联网科技有限公司 银川新华互联网科技学校地址 互联网金融中的现代科技 宁夏科技产业互联网案例 互联网和黑科技的看法 苏州铭阳互联网科技有限公司 呼和浩特新华互联网科技学院 黑科技 体验场景 互联网大会 宇信科技在杭州互联网排第几 从那以后互联网科技有限公司 工业互联网科技成果转化 萌小萌互联网科技河南有限公司 福建互联网展示科技馆设计 互联网与科技发展 以后互联网后是啥科技 佳云科技和互联网广告 广西互联网科技孵化中心 中国互联网十大科技股排名 互联网科技公司营业执照怎么办理 沐思想互联网科技有限公司 上海乐五互联网科技有限公司 科技互联网经济论坛 北京军民互联网科技公司
0