专栏首页pythonloveFTP使用MariaDB完成虚拟用户认证
原创

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就可以了,以下是其安装好后的几个主要文件:

[root@www ~]# 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源中。安装好后我们来看一下都有什么文件:

[root@localhost ~]# 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配置文件

[root@bogon 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、配置不同用户的不同权限

[root@bogon vsftpd]# vim vsftpd.conf

124 user_config_dir=/etc/vsftpd/vusers #定义虚拟用户目录

[root@bogon vsftpd]# mkdir vusers

[root@bogon vsftpd]# cd vusers/

[root@bogon vusers]# vim tom #单个用户的配置文件,与用户名相同即可

1 anon_upload_enable=YES

2 anon_mkdir_write_enable=YES

3 anon_other_write_enable=YES

[root@bogon 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的介绍就到这里了,还有更高级的应用大家就自行查看文档解决吧,如有错误敬请指出。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 找到工作啦

    来上海半个月了,优哉游哉的找了5天的工作之后,终于找到了自己心仪已久,准备已久的公司:上海XX科技有限公司。不亏我4个月的辛苦学习啊。

    用户2645267
  • Linux系统内部的名称解析与安全认证(原创)

    我们都知道计算机最喜欢的是数字,而人类喜欢的是语言,所以我们在计算机上运行的进程、定义的用户、端口号、协议、ip地址等都需要转换成数字的形式让计算机明白,在Li...

    用户2645267
  • 马哥教育学习

    很有幸能够参加到马帮,因为这天还要工作,所以就没有到教室去,只是当天晚上看了开课的视频。马老师(我习惯于这么叫他,因为他的确是我的大学老师)风采依旧,而且还是那...

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

    前言 vsftpd是一款在Linux发行版中最受 推崇的FTP服务器程序,特点是小巧轻快,安全易用,目前在开源操作系统中常用的FTP套件主要有proftp...

    小小科
  • 冬天穿脱衣服不方便?VR虚拟试衣为你打造全新造型

    VRPinea
  • Cenos安全配置之身份识别相关

    查看账户、口令文件、与系统管理员确认不必要的账户。对于一些保留的系统伪账户如:bin,sys,adm,uucp,lp,nuucp,hpdb,www,daemon...

    释然
  • 搞它!!!深入了解FTP文件传输服务

    VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP 从此名称可以看出来,编制者的初衷是代码的安全。

    不吃小白菜
  • Linux常见的持久化后门汇总

    持久化后门是指当入侵者通过某种手段拿到服务器的控制权之后,通过在服务器上放置一些后门(脚本、进程、连接之类),来方便他以后持久性的入侵,简单梳理一下日常...

    7089bAt@PowerLi
  • Linux常见的持久化后门汇总

    持久化后门是指当入侵者通过某种手段拿到服务器的控制权之后,通过在服务器上放置一些后门(脚本、进程、连接之类),来方便他以后持久性的入侵,简单梳理一下日常...

    洛米唯熊
  • 禁止管理员root用户通过ssh远程登录服务器

    1.尝试连接 ssh user@ip 比如ssh yao@192.168.177.140

    宸寰客

扫码关注云+社区

领取腾讯云代金券