FTP使用MariaDB完成虚拟用户认证

文件传输协议(英文:File Transfer Protocol,:FTP)是用於在上行文件的一套。它属于网络传输协议的应用层。FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIME或Unicode一样。但是,FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间,会非常长;并且不时的必执行一些冗长的登陆进程。

FTP是一个应用层协议,明文传输,使用C/S架构,其服务端监听在21/TCP和20/TCP,21号端口为命令端口即控制端口,20号端口为数据传输端口。FTP有两种工作模式:

主动:由服务器创建连接
命令:
Client:50000 --> Server: 21
数据:
Server:20/tcp --> Client: 50000+1
被动:由客户端创建连接
命令:
Client:50000 --> Server: 21
服务器告诉客户端数据端口:121,23=121*256+23
数据:
Client: 50000+1 --> Server:随机端口

现在使用被动模式居多,因为主动模式下如果客户端有防火墙将会产生很多麻烦,有些看官可能会说被动模式下服务器不也有防火墙吗?现在的防火墙都有一种connection track功能,叫连接追踪,可以追踪同一服务开启的不同端口。FTP的服务端有很多开源实现:

FtpServer:
wu-ftpd:华盛顿大学ftpd
proftpd:专业ftp
pureftp:纯粹的ftp
vsftp:very secure
ServU
响应码:和http类似
1xx:信息
2xx:成功类的状态码
3xx:提示需进一步提供补充类信息的状态码
4xx:客户端错误
5xx:服务端错误

大家发现他们起的名字都非常高调是吧,哈哈。我们今天要介绍的就是在CentOS6.6上的vsftp,号称非常安全的ftp,我们来看一下它怎么个用法。

FTP的用户和系统用户几乎是没有什么关系的,这就是所谓的虚拟用户,这里的用户认证需要用到nsswitch和pam两个框架:对于这两个我们以后有时间还会详细介绍

nsswitch:network server switch,名称解析框架,这个框架是调用各种glibc库,完成系统上需要用到的名称解析功能,如用户名和用户ID等

配置文件:/etc/nsswitch.conf

模块:/lib64/libnss*,/usr/lib64/libnss*

pam:pluggable authentication module,用户认证框架

在/lib64/security/

配置文件:/etc/pam.conf,/etc/pam.d/*

安装ftp很简单直接yum install y vsftpd就可以了,以下是其安装好后的几个主要文件:

[[email protected] ~]# rpm -ql vsftpd
/etc/logrotate.d/vsftpd#日志滚动脚本
/etc/pam.d/vsftpd#用户认证文件
/etc/rc.d/init.d/vsftpd#服务脚本
/etc/vsftpd#配置文件
/etc/vsftpd/ftpusers#用户控制文件
/etc/vsftpd/user_list#可用用户列表
/etc/vsftpd/vsftpd.conf#主配置文件
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/sbin/vsftpd#主程序
/var/ftp/#共享资源目录

#vim /etc/vsftpd/vsftpd.conf #其内容必须顶格写,不能有任何空白字符

12 anonymous_enable=YES #是否允许匿名用户
27 #anon_upload_enable=YES #是否运行匿名用户上传
这一行开启匿名用户也无法上传,因为对目录没有写权限,所以可以进行以下操作
mkdir /var/ftp/upload
setfacl -m u:ftp:rwx /var/ftp/upload
31 #anon_mkdir_write_enable=YES #是否允许匿名用户创建目录
anon_other_write_enable=YES #是否运行匿名用户删除文件
15 local_enable=YES#是否运行系统用户,登录后默认在其家目录下
18 write_enable=YES #系统用户的所有写权限
13 anon_umask=022#这个是匿名用户上传文件的权限,优先级高于local_umask
22 local_umask=022 #系统用户上传文件后的权限
96 #chroot_local_user=YES #锁定系统用户到其家目录
97 #chroot_list_enable=YES#只锁定部分系统用户
98 # (default follows)
99 #chroot_list_file=/etc/vsftpd/chroot_list #锁定的用户的名称
35 dirmessage_enable=YES #在某文件目录下,建立一个.message文件,访问此目录时会显示此文件中的内容
39 xferlog_enable=YES #是否开启ftp传输日志
56 xferlog_std_format=YES #是否使用标准日志格式
52 #xferlog_file=/var/log/xferlog #日志文件位置
47 #chown_uploads=YES#上传的文件是否改变其属主
48 #chown_username=whoever #属主变为谁
59 #idle_session_timeout=600 #空闲会话超时时长
62 #data_connection_timeout=120 #数据连接超时时长
81 #ascii_upload_enable=YES #强制文本格式上传
82 #ascii_download_enable=YES #强制文本格式下载
85 #ftpd_banner=Welcome to blah FTP service. #欢迎信息
117 pam_service_name=vsftpd #使用pam的那个模块,对vsftpd用户进行认证,/etc/pam.d/vsftpd
118 userlist_enable=YES #在/etc/vsftpd/ftpusers此文件中的用户不可登录
userlist_deny=YES|NO #在/etc/vsftpd/user_list文件中定义的用户用户是否被拒绝登录
119 tcp_wrappers=YES#tcp封装
max_clients: #最大并发连接数
max_per_ip:#每个IP可同时发起的并发请求数
anno_max_rate:#所有匿名用户的最大传输速率,单位byte/s
local_max_rate:#本地用户最大传输速率

根据以上的这些配置文件的设置已经可以当一个简单的FTP服务器来用了,我就不再演示了,我们上文提到虚拟用户,各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定。其实我们访问ftp server时使用的匿名用户都会映射为系统上的ftp用户,我们存储虚拟用户有两种方式:

文件:编辑文件

奇数行为用户名

偶数行为密码

此文件需要被编码为hash格式

关系型数据中的表中:

即查询数据库完成用户认证

文件的方式显然不安全,虽然ftp就不安全。。。那么我们就来看一下结合关系型数据认证虚拟用户,这样管理性和安全性都有一定的提升。ftp与mysql结合依赖于pam-mysql,需要安装pam_mysql在epel源中。安装好后我们来看一下都有什么文件:

[[email protected] ~]# rpm -ql pam_mysql
/lib64/security/pam_mysql.so#就这一个模块而已
/usr/share/doc/pam_mysql-0.7
/usr/share/doc/pam_mysql-0.7/COPYING
/usr/share/doc/pam_mysql-0.7/CREDITS
/usr/share/doc/pam_mysql-0.7/ChangeLog
/usr/share/doc/pam_mysql-0.7/NEWS
/usr/share/doc/pam_mysql-0.7/READM#查看这个文档,里面有详细的解释

接下来我们就看看具体的操作步骤:

1、设置MariaDB,IP:192.168.1.107

这里解释一下,vsftp是FTPserver上的系统用户为了映射虚拟用户的,tom、jerry为虚拟用户,password(‘tom‘)这个是MariaDB上的一个加密函数,将tom字符串加密存放。

2、配置FTP服务器的pam认证,IP:192.168.1.108

3、添加ftp server的系统用户

#这里纠正一点应该是chmod go+rx /var/ftproot,因为需要匿名用户的可读和可执行权限,就是能够cd能够ls

4、配置ftp server配置文件

[[email protected] vsftpd]# vim vsftpd.conf
22 anon_umask=022
23 local_umask=022
117 pam_service_name=vsftpd.mysql#验证配置文件
118 userlist_enable=YES
119 tcp_wrappers=YES
120
121 guest_enable=YES
122 guest_username=ftpuser#映射虚拟用户的系统账号

5、配置不同用户的不同权限

[[email protected] vsftpd]# vim vsftpd.conf
124 user_config_dir=/etc/vsftpd/vusers#定义虚拟用户目录
[[email protected] vsftpd]# mkdir vusers
[[email protected] vsftpd]# cd vusers/
[[email protected] vusers]# vim tom#单个用户的配置文件,与用户名相同即可
1 anon_upload_enable=YES
2 anon_mkdir_write_enable=YES
3 anon_other_write_enable=YES
[[email protected] vusers]# vim jerry
1 anon_upload_enable=NO
2 anon_mkdir_write_enable=NO
3 anon_other_write_enable=NO

6、验证结果

Tom登录:

Jerry登录:

我们看到Tom可以读写,而Jerry只能读,完全符合我们的设定。OK,我们对FTP的介绍就到这里了,还有更高级的应用大家就自行查看文档解决吧,如有错误敬请指出。

时间: 2024-10-05 05:07:37

FTP使用MariaDB完成虚拟用户认证的相关文章

FTP基于PAM和MySQL/MariaDB实现虚拟用户访问控制

前言 vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序,特点是小巧轻快,安全易用,目前在开源操作系统中常用的FTP套件主要有proftpd.pureftp.ServU和wu-ftpd等.本文将讲解vsftpd的基本功能和如何基于PAM和MySQL/MariaDB实现虚拟用户访问控制. 基础配置介绍 工作原理 状态响应码 1xx:信息码 2xx:成功状态码 3xx:进一步提示补全信息的状态码 4xx:客户端错误 5xx:服务器端错误 用户认证 虚拟用户:仅用于访问某特定服务中的资源

实现FTP基于MYSQL虚拟用户认证

两台主机实现:一台作为ftp服务器,一台作为mysql服务器 host1 : 192.168.1.107 vsftpd pam_mysql.so host2 : 192.168.1.109 mariadb mariadb-server 一.准备数据库 1.安装数据库并启动mysql ~]# yum install mariadb mariadb-server -y ~]# systemctl start mariadb 2.创建vsftpd服务的虚拟数据库及用户列表 1)创建vsftp的数据库

linux下ftp和ftps以及ftp基于mysql虚拟用户认证服务器的搭建

1.FTP协议:有命令和数据连接两种 命令连接,控制连接:21/tcp 数据连接: 主动模式,运行在20/tcp端口 和 被动模式,运行在随机端口 数据传输模式(自动模式):有二进制(mp3,jpg等)和文本(html)两种传输模式 ftp服务器端程序:wu-ftpd:vsftpd pureftpd Filezilla Serv-U ftp客户端程序:CLI文本模式命令:ftp lftp GUI图形界面软件:gftpd FlashFXP Cuteftp Filezilla vsftpd:命名为V

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基于mysql做虚拟用户认证

虚拟用户: 用户账号存储于何处? 文件,MySQL,Redis, ... vsftpd的认证功能托管给pam: Pluggable Authencate Module,认证框架,认证库: 通过模块完成认证功能:/usr/lib64/security/ pam_mysql模块: 下载pam_mysql的源码包官方下载http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz (1)准备编译安装环境 [[email pro

vsftpd基于pam虚拟用户认证,还怕泄漏账号么?

一.ftp简要介绍 ftp是一个很古老的协议了,是一种基于明文传输的C/S架构协议.ftp基于tpc21.20端口,其中21端口为命令端口,20端口为数据端口.ftp命令连接同其他TCP连接一样,不过数据连接有两种模式: 主动模式,也称作PORT模式:命令请求端口时,服务器端为减少等待,主动将数据发送给客户端:使用本机的20端口请求客户端的端口.这里有个问题:服务器端想要主动连接客户端就需要知道客户端的端口号,可是客户端根本没有启动任何端口给服务器端.协议设计中服务器端根据客户端的命令连接端口(

vsftpd使用虚拟用户认证

1.vsftpd安装ip:192.168.20.129 Centos 6.4-64系统) [[email protected] ~]# yum install -y vsftpd db4-utils 2.配置vsftp [[email protected] ~]#mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak [[email protected] ~]# vim /etc/vsftpd/vsftpd.conf listen=YES a

Linux上FTP部署:基于mariadb管理虚拟用户

FTP原理 FTP 采用 Internet 标准文件传输协议 FTP 的用户界面, 向用户提供了一组用来管理计算机之间文件传输的应用程序.图1 FTP 的基本模型 FTP 是基于客户---服务器(C/S)模型而设计的,在客户端与 FTP 服务器之间建立两个连接. 开发任何基于 FTP 的客户端软件都必须遵循 FTP 的工作原理,FTP 的独特的优势同时也是与其它客户服务器程序最大的不同点就在于它在两台通信的主机之间使用了两条 TCP 连接,一条是数据连接,用于数据传送:另一条是控制连接,用于传送

ftp实现通过数据库的虚拟用户认证

一.安装所需要程序 1.安装ftp服务所需的软件包 [[email protected] ~]# yum install vsftpd 2.安装MySQL数据库: [[email protected] ~]# yum -y install mysql-server mysql-devel 3.安装编译安装所需的环境 [[email protected] ~]# yum -y groupinstall "Development Tools" "Development Libra