您的位置:首页 > 数据库 > SQL

vsftpd 示例:pam_mysql 认证 ftp 虚拟用户账号,且拥有不同的权限

2019-08-15 16:06 1381 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weixin_44983653/article/details/99623542

pam_mysql 认证 ftp 虚拟用户账号,且拥有不同的权限

  • 2、安装 pam 模块
  • 3、vsftpd 安装
  • 4、创建数据库、授权用户、创建账号和密码
  • 4.2 mysql 服务端配置文件修改
  • 4.2 mysql 数据库配置
  • 4.3 创建虚拟用户所映射的用户
  • 4.4 按 4.1 进行 pam 文件设置
  • 4.5 vsftpd 主配置文件修改
  • 4.6 vsftpd 根目录的写权限需去掉
  • 5、验证过程
  • 5.4 进行验证
  • 1、安装 mariadb-server

    查看是否安装 mariadb-server

    [root@neo ~]# yum info mariadb-server
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
    * base: mirror.bit.edu.cn
    * extras: mirror.bit.edu.cn
    * updates: mirror.bit.edu.cn
    Installed Packages
    Name        : mariadb-server
    Arch        : x86_64
    Epoch       : 1
    Version     : 5.5.60
    Release     : 1.el7_5
    Size        : 58 M
    Repo        : installed
    From repo   : base
    Summary     : The MariaDB server and related files
    URL         : http://mariadb.org
    License     : GPLv2 with exceptions and LGPLv2 and BSD
    Description : MariaDB is a multi-user, multi-threaded SQL database server. It is a
    : client/server implementation consisting of a server daemon (mysqld)
    : and many different client programs and libraries. This package contains
    : the MariaDB server and some accompanying files and directories.
    : MariaDB is a community developed branch of MySQL.

    查看 mariadb-server 的程序名称

    [root@neo ~]# rpm -ql mariadb-server | grep "/usr/lib/systemd/"
    /usr/lib/systemd/system/mariadb.service

    2、安装 pam 模块

    在 CentOS 上安装 pam 模块时,需要编译进行安装。

    2.1 安装 mariadb 和 pam 的开发环境

    [root@neo ~]# yum install mariadb-devel pam-devel -y

    2.2 准备开发环境,安装包组

    [root@neo ~]# yum groupinstall "Development Tools" "Server Platform Development" -y

    2.3 下载 pam_mysql ,进行解压

    [root@neo home]# ls
    pam_mysql-0.7RC1.tar.gz
    [root@neo home]# ls
    pam_mysql-0.7RC1  pam_mysql-0.7RC1.tar.gz
    [root@neo home]# cd pam_mysql-0.7RC1
    [root@neo pam_mysql-0.7RC1]# ls
    acinclude.m4  config.guess  configure     CREDITS     ltmain.sh    missing        pam_mysql.c        pkg.m4
    aclocal.m4    config.h.in   configure.in  INSTALL     Makefile.am  mkinstalldirs  pam_mysql.spec     README
    ChangeLog     config.sub    COPYING       install-sh  Makefile.in  NEWS           pam_mysql.spec.in  stamp-h.in

    2.4 预编译检查

    [root@neo pam_mysql-0.7RC1]# ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security

    2.5 进行编译

    [root@neo pam_mysql-0.7RC1]# make && make install

    2.6 pam 模块检查

    编译完成后,会生成以下模块,有了这个模块

    pam_mysql.so
    就可以使用 mysql 去做认证了 。

    [root@neo ~]# ls /usr/lib64/security/ | grep pam_mysql
    pam_mysql.la
    pam_mysql.so

    3、vsftpd 安装

    3.1 查看 vsftpd 是否安装

    [root@neo ~]# yum info vsftpd
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
    * base: mirror.bit.edu.cn
    * extras: mirror.bit.edu.cn
    * updates: mirror.bit.edu.cn
    Installed Packages
    Name        : vsftpd
    Arch        : x86_64
    Version     : 3.0.2
    Release     : 25.el7
    Size        : 353 k
    Repo        : installed
    From repo   : base
    Summary     : Very Secure Ftp Daemon
    URL         : https://security.appspot.com/vsftpd.html
    License     : GPLv2 with exceptions
    Description : vsftpd is a Very Secure FTP daemon. It was written completely from
    : scratch.

    2、查看 vsftpd 是否启动

    [root@neo ~]# systemctl status vsftpd.service
    ● vsftpd.service - Vsftpd ftp daemon
    Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
    Active: active (running) since Wed 2019-08-14 03:57:38 EDT; 21h ago
    Main PID: 14605 (vsftpd)
    CGroup: /system.slice/vsftpd.service
    └─14605 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

    4、创建数据库、授权用户、创建账号和密码

    4.1 pam 配置文件创建(需要和后续 mysql 数据库中的数据保持一致)

    [root@neo ~]# vim /etc/pam.d/vsftpd.vusers
    [root@neo ~]# cat /etc/pam.d/vsftpd.vusers
    auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=vsftpd host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
    account required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=vsftpd host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

    pam 配置文件格式说明

    auth                               # 认证帐号密码是否正确
    account                            # 验证账号密码正常使用
    required                           # 表示认证要通过
    /usr/lib64/security/pam_mysql.so   # 指定认证模块
    # 模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝对路径;后面为给此模块传递的参数
    user=vsftpd                        # 登陆 mysql 的用户名
    passwd=mageedu                     # 登陆 mysql 的密码
    host=127.0.0.1                     # 指定 mysql 的主机地址
    db=vsftpd                          # 指定 mysql 的数据库名称
    table=users                        # 指定 mysql 的表名称
    usercolumn=name                    # 指定 mysql 表中存储虚拟用户的用户名的列
    passwdcolumn=password              # 指定 mysql 表中存储虚拟用户的密码的列
    crypt=2                            # 指定用户名密码的加密方式
    crypt是加密方式
    0表示不加密
    1表示crypt(3)加密
    2表示使用mysql password()函数加密
    3表示md5加密
    4表示sha1加密

    pam 配置文件帮助手册

    [root@neo pam_mysql-0.7RC1]# pwd
    /home/pam_mysql-0.7RC1
    [root@neo pam_mysql-0.7RC1]# ls
    acinclude.m4  config.h       config.sub    CREDITS     ltmain.sh    missing        pam_mysql.la       pkg.m4
    aclocal.m4    config.h.in    configure     INSTALL     Makefile     mkinstalldirs  pam_mysql.lo       README
    ChangeLog     config.log     configure.in  install-sh  Makefile.am  NEWS           pam_mysql.spec     stamp-h
    config.guess  config.status  COPYING       libtool     Makefile.in  pam_mysql.c    pam_mysql.spec.in  stamp-h.in
    [root@neo pam_mysql-0.7RC1]# less README

    4.2 mysql 服务端配置文件修改

    [root@neo ~]# vim /etc/my.cnf.d/server.cnf
    skip_name_resolve=ON         # 关闭域名解析
    innodb_file_per_table=ON
    log_bin=mysql-bin
    [root@neo ~]# systemctl restart mariadb.service    # 重启 mariadb 服务

    4.2 mysql 数据库配置

    进行数据库配置时,要以上面 pam 文件中所指定的数据库名称、表名称和列名称要一一对应。

    登陆 mysql ,进行登陆用户授权

    [root@neo ~]# mysql
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 2
    Server version: 5.5.60-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    MariaDB [(none)]> GRANT ALL ON vsftpd.* TO vsftpd@'127.0.0.1' IDENTIFIED BY 'vsftpd';
    Query OK, 0 rows affected (0.00 sec)
    
    MariaDB [(none)]> FLUSH PRIVILEGES;     # 清楚缓存,立即生效
    Query OK, 0 rows affected (0.00 sec)
    
    MariaDB [(none)]> EXIT                  # 退出 mysql 数据库
    Bye

    利用新授权的用户名进行登陆

    [root@neo ~]# mysql -uvsftpd -pvsftpd -h127.0.0.1

    创建数据库和表,并增加用户名和密码内容

    MariaDB [(none)]> CREATE DATABASE vsftpd;
    Query OK, 1 row affected (0.00 sec)
    
    MariaDB [(none)]> use vsftpd;
    Database changed
    MariaDB [vsftpd]> CREATE TABLE users(id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, password CHAR(48) NOT NULL, UNIQUE KEY(name));
    Query OK, 0 rows affected (0.61 sec)
    
    MariaDB [vsftpd]> DESC users;              # 查看表结构
    +----------+------------------+------+-----+---------+----------------+
    | Field    | Type             | Null | Key | Default | Extra          |
    +----------+------------------+------+-----+---------+----------------+
    | id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
    | name     | varchar(100)     | NO   | UNI | NULL    |                |
    | password | char(48)         | NO   |     | NULL    |                |
    +----------+------------------+------+-----+---------+----------------+
    3 rows in set (0.01 sec)
    
    MariaDB [vsftpd]> INSERT INTO users(name,password) VALUES ('neo',PASSWORD('neo')),('tang',PASSWORD('tang'));
    Query OK, 2 rows affected (0.15 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    MariaDB [vsftpd]> SELECT * FROM users;      # 查看表中数据
    +----+------+-------------------------------------------+
    | id | name | password                                  |
    +----+------+-------------------------------------------+
    |  1 | neo  | *CE61FE257AE1B611CE37CC643F2A9FA0A64D85D9 |
    |  2 | tang | *DF47B2C81BB01F5F2FA9B36C82418EF3CF3BF1E4 |
    +----+------+-------------------------------------------+
    2 rows in set (0.00 sec)
    
    MariaDB [vsftpd]> EXIT
    Bye

    4.3 创建虚拟用户所映射的用户

    [root@neo ~]# mkdir /ftproot/vuser -pv
    mkdir: created directory ‘/ftproot’
    mkdir: created directory ‘/ftproot/vuser’
    [root@neo ~]# useradd -d /ftproot/vuser vuser    # 制定家目录,家目录后续就是 ftp 的根目录
    [root@neo ~]# finger vuser
    Login: vuser          			Name:
    Directory: /ftproot/vuser     	Shell: /bin/bash
    Never logged in.
    No mail.
    No Plan.
    [root@neo ~]# mkdir /ftproot/vuser/pub -pv        # 约定俗成的习惯,创建一个 pub 目录
    mkdir: created directory ‘/ftproot/vuser/pub’

    4.4 按 4.1 进行 pam 文件设置

    4.5 vsftpd 主配置文件修改

    [root@neo ~]# cd /etc/vsftpd/
    [root@neo vsftpd]# ls vsftpd.*       # 对主配置文件进行备份,养成良好习惯
    vsftpd.conf  vsftpd.conf.bak
    [root@neo vsftpd]# vim vsftpd.conf
    anonymous_enable=YES                 # (保持默认即可)允许匿名用户登陆
    pam_service_name=vsftpd.vusers       # 指定 pam 认证文件
    guest_enable=YES                     # 启动来宾帐号(虚拟帐号都成为来宾用户)
    guest_username=vuser                 # 来宾帐号映射成系统中的某一个用户
    [root@neo vsftpd]# systemctl restart vsftpd.service   # 重启服务
    [root@neo vsftpd]# ss -tnl
    State       Recv-Q Send-Q       Local Address:Port     Peer Address:Port
    LISTEN      0      128                     :::80                 :::*
    LISTEN      0      32                      :::21                 :::*

    4.6 vsftpd 根目录的写权限需去掉

    vsftpd 根目录的写权限需去掉,不然会在登陆成功后,提示

    “Login failed. 421 Service not available, remote server has closed connection”

    所以,vsftpd 用户根目录不能有写权限。

    [root@neo ~]# chmod a-w /ftproot/vuser/
    [root@neo ~]# ls -ld /ftproot/vuser/
    dr-xr-xr-x. 3 root root 17 Aug 15 02:22 /ftproot/vuser/
    [root@neo vsftpd]# systemctl restart vsftpd.service   # 重启服务
    [root@neo vsftpd]# ss -tnl
    State       Recv-Q Send-Q       Local Address:Port     Peer Address:Port
    LISTEN      0      128                     :::80                 :::*
    LISTEN      0      32                      :::21                 :::*

    进行如上配置后,再次登录就会提示

    “230 Login successful”

    5、验证过程

    5.1 创建 FTP 根下的目录,保证 vuser 有读写权限

    这样的话,虚拟用户映射成 vuser 时,就能进行读写。

    [root@neo vuser]# ll ..
    total 0
    dr-xr-xr-x. 5 root root 47 Aug 15 02:53 vuser
    [root@neo ~]# cd /ftproot/vuser/
    [root@neo vuser]# ll
    total 0
    drwxr-xr-x. 2 root root 6 Aug 15 02:22 pub
    [root@neo vuser]# mkdir upload
    [root@neo vuser]# mkdir download
    [root@neo vuser]# chown vuser:vuser upload/
    [root@neo vuser]# chown vuser:vuser download/
    [root@neo vuser]# ll
    total 0
    drwxr-xr-x. 2 vuser vuser 6 Aug 15 02:53 download
    drwxr-xr-x. 2 root  root  6 Aug 15 02:22 pub
    drwxr-xr-x. 2 vuser vuser 6 Aug 15 02:53 upload

    5.2 进行 FTP 登陆,进行文件创建

    • 进行登陆
    • 登陆成功后,进行新建目录创建
    • 操作被拒绝。权限不够。此时需要查看共享权限

    5.3 对虚拟用户的操作权限进行设置

    修改 vsftpd 主配置文件

    [root@neo ~]# vim /etc/vsftpd/vsftpd.conf
    user_config_dir=/etc/vsftpd/vusers_config/       # 定义虚拟用户的操作权限的目录

    创建定义每个虚拟用户的权限文件

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

    vsftpd.conf
    指定其路径及名称即可。

    每个用户的权限都可以单独定制,但路径一定要与 vsftpd 主文件中的路径保持一致。

    [root@neo ~]# mkdir /etc/vsftpd/vusers_config/ -pv
    mkdir: created directory ‘/etc/vsftpd/vusers_config/’
    [root@neo ~]# cd /etc/vsftpd/vusers_config/
    [root@neo vusers_config]# touch neo tang
    [root@neo vusers_config]# ll
    total 0
    -rw-r--r--. 1 root root 0 Aug 15 03:07 neo
    -rw-r--r--. 1 root root 0 Aug 15 03:07 tang

    权限语句说明

    anon_upload_enable=YES        # 可上传,注意:文件系统权限
    anon_mkdir_write_enable=YES   # 可创建目录
    anon_other_write_enable=YES   # 可删除和修改上传的文件

    创建每个虚拟用户的权限文件

    [root@neo vusers_config]# cat neo
    non_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    [root@neo vusers_config]# cat tang
    non_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES

    5.4 进行验证

    • 重启服务
    [root@neo vusers_config]# !sys
    systemctl restart vsftpd.service
    • 进行登陆
    • 新创建目录和文件,可以根据自己的权限进行所设置的权限进行相应的操作
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: