• 基于mysql验证的vsftpd虚拟用户


    基于mysql验证的vsftpd虚拟用户主要利用 pam_mysql 模块可以实现基于MySQL的FTP虚拟用户功能

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

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

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

    1、在数据库服务器上安装mysql数据库

    $ yum -y install mariadb-server
    $ systemctl enable --now  mariadb.service
    

    2、在数据库服务上配置数据库支持vsftp服务

    $ mysql
    # 建立存储虚拟用户数据库和表
    MariaDB [(none)]> CREATE DATABASE vsftpd;
    
    MariaDB [(none)]> USE vsftpd;
    
    MariaDB [vsftpd]> CREATE TABLE users (
    id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
    name CHAR(50) BINARY NOT NULL,
    password CHAR(48) BINARY NOT NULL
    );
    
    # 添加虚拟用户,为了安全应该使用PASSWORD函数加密其密码后存储
    MariaDB [vsftpd]> INSERT INTO users(name,password) values('test03',password('test'));
    
    MariaDB [vsftpd]> INSERT INTO users(name,password) values('test04',password('test'));
    
    # 创建连接的数据库用户
    MariaDB [vsftpd]> GRANT SELECT ON vsftpd.* TO vsftpd@'%'  IDENTIFIED BY '123456';
    
    MariaDB [vsftpd]>  FLUSH PRIVILEGES;
    

    3、在ftp服务器上安装vsftpd和pam_mysql包

    $ yum install vsftpd 
    

    在FTP服务器上安装 pam_mysql

    对于 centos 6:pam_mysql由EPEL的源中提供

    $ yum install  pam_mysql
    

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

    pam-mysql源码进行编译

    $ yum install vsftpd gcc gcc-c++ make mariadb-devel  pam-devel -y
    # 安装相关包
    
    $ wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
    # 也可以在github上获取源码https://github.com/NigelCunningham/pam-MySQL/archive/v0.8.1.tar.g
    # 下载pam-mysql源码进行编译
    $ tar xvf pam_mysql-0.7RC1.tar.gz && cd 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.
    
    $ make install 
    $ 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
    

    4、 在FTP服务器上建立pam认证所需文件

    $ vim /etc/pam.d/vsftpd.mysql 
    #添加如下两行
    auth required pam_mysql.so user=vsftpd passwd=123456 host=10.4.7.101 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
    account required pam_mysql.so user=vsftpd passwd=123456 host=10.4.7.101 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
    

    crypt 加密方式:

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

    配置字段说明

    • 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()函数加密

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

    $ useradd -s /sbin/nologin -d /data/ftproot -r vuser
    # 建立虚拟用户映射的系统用户及对应的目录
    
    $ mkdir -pv /data/ftproot/upload
    $ setfacl –m u:vuser:rwx /data/ftproot/upload
    # centos7 需除去ftp根目录的写权限
    
    $ vim /etc/vsftpd/vsftpd.conf
    # 确保/etc/vsftpd/vsftpd.conf中已经启用了以下选项
    anonymous_enable=YES
    # 添加下面两项
    guest_enable=YES
    guest_username=vuser
    
    # 修改下面一项,原系统用户无法登录
    pam_service_name=vsftpd.mysql
    
    $ systemctl enable --now vsftpd
    # 启动vsftpd服务
    

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

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

    $ vim /etc/vsftpd/vsftpd.conf
    # 配置vsftpd为虚拟用户使用配置文件目录
    # 添加如下选项
    user_config_dir=/etc/vsftpd/vusers.d/ 
    
    $ mkdir /etc/vsftpd/vusers.d/
    # 创建所需要目录,并为虚拟用户提供配置文件
    # 配置虚拟用户的访问权限
    # 虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。如要让用户test03具有上传文件的权限,可修改/etc/vsftpd/vusers.d/wang文件,在里面添加如下选项并设置为YES即可,只读则设为NO
    # 注意:需确保对应的映射用户对于文件系统有写权限
    $ vim /etc/vsftpd/vusers.d/test03
    anon_upload_enable={YES|NO}
    anon_mkdir_write_enable={YES|NO}
    anon_other_write_enable={YES|NO}
    # 登录目录改变至指定的目录
    local_root=/data/ftproot2 
    

    自行测试!

    *************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************
  • 相关阅读:
    Spring boot test
    SQL怎么输出前n个记录? n是中间计算得到的,不支持变量传递
    crontab 命令
    Python 素数判断;以及默尼森数
    精通Web Analytics 2.0 (1) 引言
    Python 编程小备忘
    Python 编辑器 tips
    Hadoop 权威指南学习1 (主要框架)
    ml的线性回归应用(python语言)
    python 学习5--matplotlib画图实践
  • 原文地址:https://www.cnblogs.com/lvzhenjiang/p/14406450.html
Copyright © 2020-2023  润新知