02168888812
云终端系列报道第一百二十三期 - VSFTP通讯原理与搭建详解 2017-03-28

炙伦云终端分享:

    
   

VSFTP介绍

ftp是一种古老的明文传输协议,因为其明文传输的特性,也出现过很多重大的危机,进而逐渐演变为支持加密传输的VSFTP(very security FTP),而CentOS默认自带的FTP就为VSFTP。本文主要介绍下VFSTP的传输原理与搭建。为了避免干扰,实验前请关闭Selinux和IPtables。

FTP传输机制

FTP通过21端口与Client端进行指令传输,通过20端口进行数据传输,根据工作模式的不同VSFTP分为主动模式和被动模式2种,大多是情况VSFTP是工作在被动模式下。

主动模特性为:

1.Client端以一个大于1024的随机端口向FTP服务器的21号端口发出建立连接请求

2.Server端收到请求后,会以20端口主动去链接Client端的随机端口+1号端口,如果该端口被占用,则回去找随机端口+2号端口以此类推,直到找Client端空闲的端口

3.Client端与Server端通过20端口进行数据传输

wKiom1f9jA_hlafxAABGllXPYKI043.png

被动模式特性为:

1.Client端以一个大于1024的随机端口向FTP服务器的21号端口发出建立连接请求

2.Server端会通过21号端口给Client端发送一个类似(xyz,ab)的数值来告诉Client端打开的随机端口,同时打开xyz*256+ab端口

3.Client端再通过一个随机端口连接Server端的xyz*256+ab端口进行数据传输

wKiom1f9jBCgEWkLAABNgtonmQI876.png

而现实环境中无论是Client端还是Server端都是在防火墙后面,在主动模式下VSFTP会链接Client端的随机+1号端口,Client端显然不会将防火墙上所有随机端口开放;而在被动下问题同样的问题仍然会摆在Server端的防火墙面前,这就需要Server端的防火墙开启连接追踪功能,即放行与21号端口有关联的端口访问请求,这也就是为什么大部分情况下VSFTP是以被动模式工作

wKioL1f9jBCBcDX0AABn8tBOEJw973.png

安装VSFTP

了解了VSFTP的工作原理后,下面就来介绍下VSFTP的搭建,使用命令

yum -y install vsftpd 安装VSFTP服务

使用rpm -qc vsftp 查看VSFTP的配置文件

wKiom1f9jBDz9MIQAAAdWoHWxi0215.png

/etc/logrotate.d/vsftpd 滚动日志配置文件

/etc/pam.d/vsftpd 认证文件,pam全称为Plugable Authentication 

Module 插件式认证模块,该文件名必须和/etc/vsftpd/vsftpd.conf中

pam_service_name后的文件名保持一致

wKioL1f9jBHTXbjgAABDYQSl9qg688.png

/etc/vsftpd/ftpusers 控制登陆系统用户的机制,出现在该文件中的用户不允许使用ftp服务器,这是在/etc/pam.d/vsftpd中定义的

/etc/vsftpd/user_list 配合/etc/vsftpd/vsftpd.conf中的userlist_enable=YES和userlist_deny=YES|NO实现黑白名单此处需要注意的是:黑白名单的前提是/etc/vsftpd/vsftpd.conf配置文件中userlist_enable=YES,userlist_deny选项默认为YES(黑名单),即该文件中出现的用户不允许登陆VSFTP,就算手动添加userlist_deny=NO(白名单)即只允许该文件中出现的用户允许登陆VSFTP,在VSFTP启动时依然会去检查/etc/vsftpd/ftpusers文件并且禁止该文件中的用户登录

wKioL1f9jBKxdEi9AAA7eaLm2wY863.png

/etc/vsftpd/vsftpd.conf VSFTP主配置文件,所有的配置选项必须顶格写,配置文件中#后带空格的是说明,不带空格的是注释掉的配置选项

wKiom1f9jBKCEAX0AAAv6IaDJIc628.png

VSFTP的登陆类型

VSFTP提供了系统用户、匿名用户、和虚拟用户三种不同的登陆方式。所有的虚拟用户会映射成一个系统用户,访问时的文件目录是为此系统用户的家目录;匿名用户也是虚拟用户,映射的系统用户为ftp,详细信息可以通过man nsftpd.conf查看

wKiom1f9jBPDhTQNAAAwhqQCXM0717.pngwKioL1f9jBTTzbeeAACtrOpPKsA669.png

匿名用户登陆配置

在/etc/vsftpd/vsftpd.conf配置文件中设置anonymous_enable=YES,就可以允许虚拟用户登陆,即使系统用户的设置为local_enable=NO也可以登陆,但除了查看和下载到本地外,无任何其他操作权限

wKioL1f9jBfxY8-GAADgKvveYBQ104.png


此时还需要在配置文件中设置其他四个选项:

anonymous_enable=YES 启动虚拟用户登录

anon_upload_enable=YES  允许虚拟用户有写权限

anon_other_write_enable=YES  允许虚拟用户有删除权限

anon_mkdir_write_enable=YES  允许虚拟用户创建文件夹权限

添加完后重启VSFTP服务,再次尝试发现结果和上次一样,原因是系统用户ftp对pub目录没有写入权限

wKiom1f9jBfT7zkwAAAnDs3rMfM040.png

更改pub目录权限后一切正常,所以最终生效的权限取决于服务权限与系统权限的交集

wKioL1f9jBnxl6fqAACs2H4xN34376.png

通过上面知道匿名用户访问的文件目录为/var/ftp/pub,但是匿名用户自己却认为在/目录下,说明默认情况下匿名用户就是被chroot的

wKiom1f9jBmCsdzBAAAQpUk9_TA114.png

另外需要注意的一点是:更改系统权限的时候只能针对var/ftp/下的pub目录,如果更改的是/var下的ftp目录权限,此时就算配置文件中允许匿名用户登录,访问时依然会提示你输入用户名和密码

wKiom1f9jBuhEE0qAABmfNdhpEI072.png

wKioL1f9jB3QOyOjAADMhtDP9zk878.png


系统用户登录配置

系统用户即为存在于/etc/passwd中的用户,在/etc/vsftpd/vsftpd.conf文件中设置项为local_enable=YES,使用系统用户登录后文件夹为该用户的家目录,默认不做其他设置时用户可以从自己的家目录切换到其他任意目录下,会有一定的安全隐患

wKioL1f9jB3Qp9qpAAAd2etLOfM302.png

所以在使用系统用户作为VSFTP的登录用户时,推荐执行以下2个步骤:

1.添加用户时使用命令useradd -s /sbin/nologin  userName 禁止该用户登录系统

2.启用chroot_local_user=YES 选项,这样该用户登录FTP后就会禁锢在自己的家目录

wKiom1f9jB6z7hiwAAA4MRA_vto554.png

wKioL1f9jB7hSVLLAAAWSB2U2vI053.png

需要说明的一点是,我们看到/etc/vsftpd/vsftpd.conf配置文件中chroot_list_enable=YES和chroot_list_file=/etc/vsftpd/chroot_list两项默认也是被注销的,它的功能是指定一个chroot_list文件,只有写在该文件中的用户会被chroot,其他用户不会被chroot,该功能和chroot_local_user选项不能同时存在

wKiom1f9jB-CtUhJAAA1mJCS1vE456.png

显然,无论是匿名用户还是系统用户,安全性上都存在一定隐患,所以对于安全性要求较高的场景还可以使用虚拟用户的方式,它是对一个文件中存放的用户及密码进行认证,认证通过后再将其重映射为一个虚拟用户,存放用户及密码的文件可以是hash编码的文件,也可以是关系型数据库

虚拟用户登陆配置

首先在/etc/vsftpd/vsftpd.conf配置文件中添加guest_enable=YES选项,它的作用是将一个非匿名用户重映射为系统用户,默认为ftp,或者可以指定映射的系统用户名,被指定的系统用户必须存在,且在/home/下有和该用户同名的目录

wKioL1f9jCDQUOzIAAAkh3ObYQM629.png

wKiom1f9jCDRcEu8AAAmoYfEVOo875.png

以vsftp作为重映射的系统用户举例来说:

1.输入useradd -s /sbin/nologin vsftp 创建用户且不允许登录系统

2.mkdir /home/vsftp 创建vsftp用户家目录

3.chown vsftp:vsftp /home/vsftp 修改目录所有权

4.在/etc/vsftpd/vsftp.conf 主配置文件中启用下面两个配置项

wKiom1f9jCGwS8U3AAAZJrHHF20538.png

在/home/vsftp目录下创建一个hahaha文件,再使用系统用户登录,会发现已经被重映像到vsftp的用户家目录中

wKioL1f9jCGzIHA4AAAiymez_Rk954.png

关于虚拟用户登陆配置需要注意的2点是:

1.虚拟用户默认继承主配置文件中匿名用户的权限,只有在开启匿名用户权限情况下虚拟用户才有修改权限

wKioL1f9jCKyaGuuAABIuUuKrUk612.png

2.虚拟用户是映射为一个系统用户,必须设置为 local_enable=YES,否则当anonymous_enable=NO时将无法登陆,这点和当local_enable=NO时匿名用户仍可登录不一样,虽然匿名用户是映射为系统的ftp用户

wKiom1f9jCLzIY1cAAAQjddntd0021.png

在生产环境中推荐使用安全性更高的虚拟用户登陆,但有时我们有希望对虚拟用户的权限可以进行划分,允许某些用户有特定权限,这就需要用到user_config_dir配置项了

spacer.gifwKioL1f9jCOiD6hEAACDEtwQH9c014.png

通过该选项说明,可以知道如果需要对虚拟用户进行权限划分的步骤为:

1.关闭主配置文件中匿名用户的更改权限

wKiom1f9jCSh3D_gAABNsRT7xUc444.png

2.在主配置文件添加启该选项并指明该选项所在的目录位置

wKioL1f9jCTwyP9RAAAgtUeQJsM078.png

3.使用命令 mkdir  /etc/vsftpd/user_conf  创建该目录

4.在/etc/vsftpd/user_conf  中为每个虚拟用户创建一个与用户名相同的配置文件,此处以asd和qwe用户为例

wKiom1f9jCXC6e6-AAAg4W5RiZs418.png

验证虚拟用户权限

分别设置每个用户的操作权限,空白表示没有任何权限,此处仅对asd用户添加权限,用户qwe的文件中保持空白

wKioL1f9jCWzGrC3AAAMhITLYeU232.png

分别使用asd和qwe虚拟用户登录,可以看到虽然都是被重映射到同一目录内,但是只有asd用户有权限进行修改操作,至此测试完成

wKiom1f9jCbDDWqPAAAqE50xAqU213.png


wKiom1f9jCaRS8HHAAArtlSd5W0469.png




本文出自 “兔样兔森破” 博客

http://arkling.blog.51cto.com/2844506/1860925




上一页:云终端系列报道第一百二十二期 - SAN,NAS,DAS及iSCSI其架构之间区别 下一页:云终端系列报道第一百二十四期 - OpenStack+Kunbernetes实现1+1>2
推荐新闻 Recommended news

帮助中心
6509367