vsftpd利用pam_mysql.so连接mariadb进行认证

实验环境

IP地址 描述
192.168.5.181 CentOS7系统,base源安装好了mariadb,作为ftp服务端,作为认证服务端
192.168.5.121 CentOS6系统,作为ftp客户端
  • 认证模块pam_mysql.so的安装

需要从网上下载pam_mysql.so的源码包,pam_mysql-0.7RC1.tar.gz
在解压安装之前,确保在CentOS7上面的开发组包已经安装,如果没有安装,则需要运行如下命令:

$ yum groupinstall "Development Tools" -y

之后安装mariadb和pam的开发包:

$ yum install mariadb-devel pam-devel -y

解压pam_mysql的源码包,进入源码目录,进行编译安装。其中–with-mysql引用了mariadb的头文件以及lib,–with-pam引用了pam的头文件以及lib。–with-pam-mods-dir指明将模块安装的位置。

$ ./configure --with-mysql=/usr --with-pam=/usr --with-pam-mods-dir=/usr/lib64/security

$ make

$ make install

安装完毕之后,在/usr/lib64/security目录下面,可以查看到新的pam_mysql.so模块。

$ ls /usr/lib64/security/ | grep mysql.so
pam_mysql.so
  • mariadb创建数据

下面规划一下mariadb里面的用户。建立一个名为vsftpd的数据库,在这个数据库里面建立一个名为auth的数据表,在数据表里面建立两个用户作为vsftpd的虚拟用户:user1,密码为user1;user2,密码为user2。密码采用mysql自带的PASSWORD()函数进行加密。使用名为[email protected]’127.0.0.1’的用户进行登录查询,只授予该用户select权限,登录密码为vsftpd。建立之后的结果如下:

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 5.5.44-MariaDB MariaDB Server

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.

MariaDB [(none)]> use vsftpd;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [vsftpd]> show tables;
+------------------+
| Tables_in_vsftpd |
+------------------+
| auth             |
+------------------+
1 row in set (0.00 sec)

MariaDB [vsftpd]> desc auth;
+----------+-----------+------+-----+---------+-------+
| Field    | Type      | Null | Key | Default | Extra |
+----------+-----------+------+-----+---------+-------+
| name     | char(20)  | YES  |     | NULL    |       |
| password | char(100) | YES  |     | NULL    |       |
+----------+-----------+------+-----+---------+-------+
2 rows in set (0.01 sec)

MariaDB [vsftpd]> select * from auth;
+-------+-------------------------------------------+
| name  | password                                  |
+-------+-------------------------------------------+
| user1 | *34D3B87A652E7F0D1D371C3DBF28E291705468C4 |
| user2 | *12A20BE57AF67CBF230D55FD33FBAF5230CFDBC4 |
+-------+-------------------------------------------+
2 rows in set (0.00 sec)

MariaDB [vsftpd]> select host,user,password from mysql.user where user=‘vsftpd‘;
+-----------+--------+-------------------------------------------+
| host      | user   | password                                  |
+-----------+--------+-------------------------------------------+
| 127.0.0.1 | vsftpd | *653E55BC34328FD9504096B9DFB2434DE24AAE86 |
+-----------+--------+-------------------------------------------+
1 row in set (0.00 sec)
  • 建立来宾账户

所有mysql里面存储的虚拟用户在登录之后都会被映射为本地的来宾用户,这里建立一个名为vuser的来宾账户,家目录为/ftproot/vuser,修改其权限为544,即去除所有的’写’权限。在里面新建一个pub目录,用setfacl给pub目录赋予vuser用户的读写执行权限。

$ mkdir ftproot
$ cd ftproot
$ useradd -d /ftproot/vuser vuser
$ chmod 544 /ftproot/vuser
$ mkdir /ftproot/vuser/pub
$ setfacl -m u:vuser:rwx /ftproot/vuser/pub
  • 配置pam文件

新建一个/etc/pam.d/ftp-mysql的文件,在里面添加两行如下内容,详细的配置项,请参见pam_mysql.so源码包里面的README文档:

auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=vsftpd host=127.0.0.1 db=vsftpd table=auth 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=auth usercolumn=name passwdcolumn=password crypt=2
  • 配置vsftpd.conf文件

新建一个vsftpd.conf文件,配置如下所示。注意pam_service_name由默认的vsftpd替换为刚才建立的ftp-mysql,启用来宾账户guest_enable=YES,使用来宾账户vuser,并且配置虚拟用户user1和user2的权限文件到/etc/vsftpd/vusers_config目录下面:

anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=ftp-mysql
userlist_enable=YES
tcp_wrappers=YES

guest_enable=YES
guest_username=vuser

user_config_dir=/etc/vsftpd/vusers_config/

/etc/vsftpd/vusers_config目录下面的user1和user2的权限配置如下所示,给予user1上传的权限,但是给予user2上传、删除目录、删除文件的权限。配置完毕后,用systemctl start mariadb.service vsftpd.service命令重启mariadb和vsftpd服务:

$ cat /etc/vsftpd/vusers_config/user1 
anon_upload_enable=YES
anon_other_write_enable=NO
$ cat /etc/vsftpd/vusers_config/user2 
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
  • 客户端测试

在客户端上面,确保安装了ftp客户端工具:

yum install ftp

利用上述工具和服务端进行通信,对user1进行测试,可以看到,登录成功,并且user1有上传的权限,但是并没有删除的权限:

$ ftp 192.168.5.181
Connected to 192.168.5.181 (192.168.5.181).
220 (vsFTPd 3.0.2)
Name (192.168.5.181:root): user1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,5,181,187,35).
150 Here comes the directory listing.
drwxrwxr-x    2 0        0               6 Jun 05 18:33 pub
226 Directory send OK.
ftp> cd pub
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (192,168,5,181,180,167).
150 Here comes the directory listing.
226 Directory send OK.
ftp> lcd /etc
Local directory now /etc
ftp> put hosts
local: hosts remote: hosts
227 Entering Passive Mode (192,168,5,181,142,11).
150 Ok to send data.
226 Transfer complete.
256 bytes sent in 0.000155 secs (1651.61 Kbytes/sec)
ftp> ls
227 Entering Passive Mode (192,168,5,181,108,36).
150 Here comes the directory listing.
-rw-------    1 1001     1001          256 Jun 06 05:06 hosts
226 Directory send OK.
ftp> delete hosts
550 Permission denied.
ftp> exit
221 Goodbye.

下面对user2进行测试,可以看到,user2登录成功,并且有上传权限,删除权限,创建目录的权限。:

$ ftp 192.168.5.181
Connected to 192.168.5.181 (192.168.5.181).
220 (vsFTPd 3.0.2)
Name (192.168.5.181:root): user2
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (192,168,5,181,96,57).
150 Here comes the directory listing.
226 Directory send OK.
ftp> lcd /etc
Local directory now /etc
ftp> put hosts
local: hosts remote: hosts
227 Entering Passive Mode (192,168,5,181,36,41).
150 Ok to send data.
226 Transfer complete.
256 bytes sent in 0.000145 secs (1765.52 Kbytes/sec)
ftp> ls
227 Entering Passive Mode (192,168,5,181,141,235).
150 Here comes the directory listing.
-rw-------    1 1001     1001          256 Jun 06 05:10 hosts
226 Directory send OK.
ftp> delete hosts
250 Delete operation successful.
ftp> ls
227 Entering Passive Mode (192,168,5,181,56,230).
150 Here comes the directory listing.
226 Directory send OK.
ftp> mkdir dir
257 "/pub/dir" created
ftp> ls
227 Entering Passive Mode (192,168,5,181,208,106).
150 Here comes the directory listing.
drwx------    2 1001     1001            6 Jun 06 05:10 dir
226 Directory send OK.

下面对于系统用户ftpuser以及一个不存在的用户abc进行登录测试,发现无法登录,证明只用mysql数据库里面存在的用户才能够进行认证:

$ ftp 192.168.5.181
Connected to 192.168.5.181 (192.168.5.181).
220 (vsFTPd 3.0.2)
Name (192.168.5.181:root): ftpuser
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.

$ ftp 192.168.5.181
Connected to 192.168.5.181 (192.168.5.181).
220 (vsFTPd 3.0.2)
Name (192.168.5.181:root): abc
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
ftp>
时间: 2024-07-30 07:07:33

vsftpd利用pam_mysql.so连接mariadb进行认证的相关文章

vsftpd基于pam_mysql的虚拟用户认证

1.ftp用户 匿名用户:映射到某一个固定的系统用户,例如(ftp,vsftp,/var/ftp) 本地用户:系统用户,root及系统用户(0-999) 虚拟用户:nsswitch: name services switch  名称服务转换 PAM: Plugabl Plugable Authentication Modules  插入式认证模块本文主要讲解vsftpd基于pam_mysql的虚拟用户认证步骤. 2.准备环境 操作系统 主机名 IP地址 环境描述 CentOS 7.1 ch7 1

vsftpd基于pam_mysql做虚拟用户认证

(1)下载epel源 [[email protected] ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo  #下载阿里云的epel源 [[email protected] ~]# yum repolist (2)安装所需要的包 [[email protected] ~]# yum -y groupinstall "Development Tools" "Ser

vsftpd基于pam_mysql的认证和hash编码的方式配置虚拟用户

基础介绍什么的就自行搜索了.下面直接从安装配置开始. 环境:centos6 一.安装 yum -y install vsftpd 安装完成后可以直接启动.service vsftpd start 二.配置 使用pam_mysql或者db_load的认证方式: a)使用db_load来设置虚拟用户 1.在/etc/vsftpd/下创建两个目录     mkdir /etc/vsftpd/vuser_dir #后续存放虚拟用户的配置文件     mkdir /etc/vsftpd/vuser_db

VSFTPD使用pam_MySQL作用户验证

1. 安装Vsftp yum install -y vsftpd 2. 安装MariaDB yum install -y mariadb mariadb-devel mariadb-server systemctl restart mariadb systemctl enable mariadb netstat -npl|grep 3306 3. 为root账户设置密码 mysql_secure_installation          //该命令会执行以下几个设置: a)为root用户设置密

创建vsftpd服务器基于mysql的虚拟用户认证

简单罗列基础命令,只分享我的想法! 一.目的 要求:配置允许虚拟用户访问的vsftpd服务器,虚拟用户存储在另一台MySQL的服务器上面,虚拟用户账号有两个分别是tom和jerry,密码是tom和jerry,要求对这两个账户的权限做一下限制(根据实际的要求,自己调节). 环境:MySQL服务器(172.16.49.1),CentOS 6.6和MariaDB-5.5.43.另一台是通过yum安装vsftpd(192.168.0.22),OS是CentOS 6.6. MySQL是通用二进制格式安装,

19、vftpd基于PAM_MYSQL进行虚拟用户的认证且每个用户有自己的独立目录及不同的访问权限

1.vsftp相关介绍FTP 是File Transfer Protocol(文件传输协议)的英文简称 两个连接:命令连接.数据连接(相对服务器来讲)FTP连接支持两种模式:主动模式(Port模式).被动模式(Passive模式)主动模式:服务器端通过20端口主动连接客户端,客户端监听在与服务器端建立命令连接的端口+1上,服务器工作在TCP/20被动模式:客户端使用自己与服务器端建立命令连接的端口+1上连接服务器端的随机端口,该随机端口在建立命令连接的时候已发给客户端 vsftp的用户有三种类型

vsftpd基于pam_mysql的虚拟用户机制

一.虚拟用户概述 vsftpd使用虚拟用户时,需要为所有的虚拟用户创建一个系统用户,因为无论vsftpd使用的是哪一种用户类型(匿名用户.系统用户.虚拟用户),最终都是要映射为操作系统上的一个用户,而每一个文件资源都有各自的权限,只有操作系统上的用户才能根据权限模型判断是否能够访问该文件资源.这里仅介绍vsftpd基于pam_mysql的虚拟用户机制的使用. 二.vsftpd基于pam_mysql的虚拟用户机制 1.编译安装pam_mysql (1) 编译pam_mysql前要提供开发环境,并安

VSftpd使用MySQL存储虚拟用户进行认证

VSftpd使用MySQL存储虚拟用户进行认证 前言 周一的时候做这个实验失败了,当时以为是pam_mysql模块的问题,今天晚上随便试试,没想到竟然成功了,遂写一篇博客来分享一下 实验拓扑 实验环境 主机 IP 作用 server1.anyisalin.com 172.16.1.2 提供ftp服务 server2.anyisalin.com 172.16.1.3 使用存储vsftpd虚拟用户 注意:本实验所有操作都在SElinux和iptables关闭的前提下进行 实验步骤 安装vsftpd并

如何在Windows系统上利用Telnet协议连接Linux服务器

Telnet协议是Internet远程登录服务的标准协议,它为用户提供了在本地计算机上完成远程主机工作的能力.很多终端使用者都习惯在计算机上利用Telnet会话来远程控制服务器.这里小编就分两步为大家演示如何在Windows系统上利用Telnet协议连接Linux服务器. 步骤一:在Windows系统上打开Telnet功能:  步骤二:在Linux系统上启用Telnet服务. 步骤一:Windows终端开启Telnet功能 1/由于在Windows Vista之后的版本默认并没有提供Telnet