1 需求

使用指定虚拟用户Allen与Barry登录ftp,认证的源是mysql服务器;
Allen可以上传文件,Barry不可以上传文件;

2 环境

[root@centos7 ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@centos7 ~]# uname -r
4.18.14-1.el7
vsftpd-3.0.2-22.el7.x86_64
pam-1.1.8-22.el7.x86_64
mariadb-libs-5.5.60-1.el7_5.x86_64
pam_mysql-0.7RC1.tar.gz mysql服务器:10.207.51.40
vsftp服务器:10.207.51.31

3 安装开发环境与编译所需的依赖

yum -y groupinstall "Development Tools" "server Platform Development"
yum -y install mariadb-devel openssl-devel pam-devel

4 配置vsftp服务器

4.1 安装vsftp服务器

yum install -y vsftpd

4.2 修改配置文件

有很多默认参数,不用去管,有标注的参数为本次实验关键参数
anonymous_enable=NO
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_enable=YES
xferlog_std_format=YES
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
use_localtime=YES
ascii_upload_enable=YES
ascii_download_enable=YES
listen=YES
listen_ipv6=NO
userlist_enable=YES
tcp_wrappers=YES 当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录。
chroot_list_enable=NO
chroot_local_user=YES local_enable=YES ##允许本地用户登录,虽然使用的虚拟用户,但是虚拟用户适合本地用户vuser关联了的
write_enable=YES ##允许写入
local_root=/var/ftp ##指定本地用户登录后的目录
pam_service_name=vsftpd.mysql ##指定pam文件,这是相对路径,等于/etc/pam.d/vsftpd.mysql,这里也可以写全路径
guest_enable=YES ##允许虚拟用户登录
guest_username=vuser ##指定虚拟用户要映射成哪个本地用户
allow_writeable_chroot=YES ##默认情况下ftp根目录的ogt都不能有w权限,开启其选项后可以设置w权限;
user_config_dir=/etc/vsftpd/vusers.conf.d ##指定虚拟用户配置文件目录,目录中的每个配置文件的名字对应一个虚拟用户的名字;

4.3 创建虚拟用户配置文件

文件名称要与虚拟用户命名完全一致
mkdir /etc/vsftpd/vusers.conf.d
echo ' anon_upload_enable=YES' > /etc/vsftpd/vusers.conf.d/Allen
echo ' anon_upload_enable=NO' > /etc/vsftpd/vusers.conf.d/Barry

4.4 编译安装pam_mysql模块

也可以通过epel源安装
tar xf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1
./configure --with-mysql=/usr --with-openssl=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security
make
make install

4.5 创建vsftp连接mysql使用的pam文件

vim /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so user=vsftpd passwd=123123 host=jzbg db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 verbose=1
account required pam_mysql.so user=vsftpd passwd=123123 host=jzbg db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 verbose=1 配置字段说明:
auth 表示认证;
required 用于认证登录mysql数据库;
account 用于验证登录ftp使用的虚拟账号的密码;
pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝对路径;后面为给此模块传递的参数;
user=vsftpd为 登录mysql的用户;
passwd=mageedu 登录mysql的的密码;
host=localhost 在mysql中定义的允许连接的主机名或ip地址;
db=vsftpd 连接msyql的哪一个库;
table=users 连接库里的哪一个表;
usercolumn=name 当做用户名的字段
passwdcolumn=password 当做用户名字段的密码
crypt=2 密码的加密方式为mysql password()函数加密;
verbose=1 会打印详细的日志,可以再/var/log/secure中看到;

4.6 重启服务

systemctl restart vsftpd.service

5 mysql服务器配置

5.1 安装mariadb服务器

yum -y install mariadb_server

5.2 启动mariadb

systemctl enable mariadb.service && systemctl start mariadb.service

5.3 更改mariadb配置文件

在/etc/my.cnf文件的[mysqld]中增加skip-name-resolve=ON
[mysqld]
skip-name-resolve=ON

5.4 创建并配置数据库

mysql
CREATE DATABASE vsftpd;
use vsftpd;
CREATE TABLE users (id int AUTO_INCREMENT NOT NULL PRIMARY KEY, name char(30) NOT NULL, password char(48) binary NOT NULL);
INSERT INTO users(name,password) VALUES ('Allen',password('123123'));
INSERT INTO users(name,password) VALUES ('Barry',password('123123')); 很有可能,pam-mysql模块支持的加密方式,与mysql或 mariadb加密方式不兼容;如果不兼容,则需要把密码改为明文格式:
INSERT INTO users(name,password) VALUES ('tom',123123);
INSERT INTO users(name,password) VALUES ('jerry',123123); 允许vsftp服务器使用vsftpd用户读取vsftpd数据库到的表
如果将vsftp与mysql安装在一台机器上,则可以将地址改为127.0.0.1
GRANT SELECT ON vsftpd.* TO vsftpd@'10.207.51.31' IDENTIFIED BY '123123'; 刷新权限
FLUSH PRIVILEGES;

6 访问测试

Allen用户可以上传文件,结果为正确
[root@~]$ftp 10.207.51.31
Connected to 10.207.51.31 (10.207.51.31).
220 (vsFTPd 3.0.2)
Name (10.207.51.31:root): Allen
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> put all.csv
local: all.csv remote: all.csv
227 Entering Passive Mode (10,207,51,31,67,156).
150 Ok to send data.
226 Transfer complete.
6406155 bytes sent in 0.483 secs (13255.36 Kbytes/sec) Barry用户不可以上传文件,结果为正确
[root@~]$ftp 10.207.51.31
Connected to 10.207.51.31 (10.207.51.31).
220 (vsFTPd 3.0.2)
Name (10.207.51.31:root): Barry
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 (10,207,51,31,238,18).
150 Here comes the directory listing.
-rw------- 1 1002 1002 6406155 Dec 20 14:38 all.csv
226 Directory send OK.
ftp> put all2.csv
local: all.csv remote: all2.csv
227 Entering Passive Mode (10,207,51,31,190,67).
550 Permission denied.

实现基于pam认证的vsftpd的更多相关文章

  1. Vsftpd: 基于PAM认证的虚拟用户和匿名用户

    目录 环境说明效果说明及截图①. 安装组件②. 系统账户建立③. 编辑vsftpd的配置文件④. 生成虚拟用户的数据库文件⑤. 生成一个使用vsftpd_login.db数据文件的PAM认证文件⑥. ...

  2. centos6.5下vsftpd服务的安装及配置并通过pam认证实现虚拟用户文件共享

    FTP的全称是File Transfer Protocol(文件传输协议),就是专门用来传输文件的协议.它工作在OSI模型的第七层,即是应用层,使用TCP传输而不是UDP.这样FTP客户端和服务器建立 ...

  3. AIDE,sudo,TCP_Wrappers,PAM认证等系统安全访问机制

    AIDE 高级入侵检测环境:是一个入侵检测工具,主要用途是检查文件的完整性,审计计算机上的那些文件被更改过了. AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配置文件.AIDE数 ...

  4. 基于SSL加密的vsftpd 服务器搭建和配置

    基于SSL加密的VSFTPD 服务器搭建和配置 1.安装 ubuntu系统:apt-get install vsftp lftp centos系统:yum install -y vsftpd ftp ...

  5. 构建基于虚拟用户的vsftpd服务器

    安装: [root@server ~]# yum install -y vsftpd [root@server ~]# rpm -ql vsftpd /etc/logrotate.d/vsftpd / ...

  6. PAM认证机制详情

    PAM(Pluggable Authentication Modules)认证机制详情 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.      一.介绍PAM PAM(Plugga ...

  7. 什么是PAM认证

    PAM(Pluggable Authentication Modules )是由 Sun 提出的一种用于实现应用程序的认证机制.其核心是一套共享库,目的是提供一个框架和一套编程接口,将认证工作由程序员 ...

  8. 实现基于MYSQL验证的vsftpd虚拟用户访问

    一.配置mysql服务器 1.1 安装mysql # yum -y install mariadb-server # systemctl enable --now mariadb.service &a ...

  9. 基于daridus认证的openvpn部署

    基于daridus认证的openvpn部署 安装openvpn 1.安装openvpn依赖包 #yum -y install gcc gcc-c++ #yum -y install openssl o ...

随机推荐

  1. bzoj 2303: [Apio2011]方格染色【并查集】

    画图可知,每一行的状态转移到下一行只有两种:奇数列不变,偶数列^1:偶数列不变,奇数列^1 所以同一行相邻的变革染色格子要放到同一个并查集里,表示这个联通块里的列是联动的 最后统计下联通块数(不包括第 ...

  2. bzoj 3784: 树上的路径【点分治+st表+堆】

    参考:https://www.cnblogs.com/CQzhangyu/p/7071477.html 神奇的点分治序(或者叫点剖?).就是把点分治扫过的点依次放进队列里,然后发现,对于每一棵树摊到序 ...

  3. 30行JavaScript代码实现一个比特币量化策略

    精简极致的均线策略 30行打造一个正向收益系统 原帖地址:https://www.fmz.com/bbs-topic-new/262 没错!你听的没错是30行代码!仅仅30行小编我习惯先通篇来看看 代 ...

  4. Luogu P1144 最短路计数 【最短路】 By cellur925

    题目传送门 常规的最短路计数问题:注意有重边(重边不用理,看样例),自环(读入时过滤). 另外这个无向图没有权,其实可以直接bfs做,但考虑到以后带权的情况,按spfa走了. 水题被卡了三次(嘤嘤嘤 ...

  5. quickpow || 快速幂

    洛谷例题 推荐自行脑补:百度百科 如果  ,那么 : 前言:快速幂就是快速算底数的n次幂.其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高. 拿题目样例 Input :2 1 ...

  6. CentOS 7静默(无图形化界面)安装Oracle 11g

    准备CentOS 7 系统环境 我以 CentOS-7-x86_64-DVD-1511.iso 为例,简述Oracle 11g的安装过程. 由于是使用静默模式(silent)安装的,无需使用图形化界面 ...

  7. python模拟登录的实现

    本文主要用python实现了对网站的模拟登录.通过自己构造post数据来用Python实现登录过程.   当你要模拟登录一个网站时,首先要搞清楚网站的登录处理细节(发了什么样的数据,给谁发等...). ...

  8. [poj2096] Collecting Bugs【概率dp 数学期望】

    传送门:http://poj.org/problem?id=2096 题面很长,大意就是说,有n种bug,s种系统,每一个bug只能属于n中bug中的一种,也只能属于s种系统中的一种.一天能找一个bu ...

  9. 关于jquery获取单选框value属性值为on的问题

    当取单选框的value值的时候,前提是要有value这个属性,如果没有value属性那么取出来的就会为on 取value值的常见三种方式为 $("input[name='XXX']:chec ...

  10. AJPFX总结关于JVM的基础知识

    写在前面 之前老大让做一些外包面试,我的问题很简单: 介绍一下工作中解决过比较 有意思的问题. HashMap使用中需要注意的点. 第一个问题主要是想了解一下对方项目经验的含金量,第二个问题则是测试下 ...