千家信息网

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

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,实验准备:本实验在两台CentOS主机上实现,一台做为FTP服务 器,一台做数据库服务器一台CentOS-7当MYSQL服务器一台CentOS-6当FTP服务器注意,这里谁当FTP服务器很关键,因为有
千家信息网最后更新 2025年01月20日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 
0