基于Vsftpd服务器数据传输模式浅析
2015-06-13郭杰
郭 杰
(西安航空学院计算机学院,西安,710077)
0 引言
FTP采用C/S(Client端/服务器)模型,它是基于TCP协议连接其Client端和Server端,UDP协议是一个无连接的协议,故FTP协议不能基于UDP协议。FTP协议是建立在TCP协议基础上,所以必须经过三次握手来完成Client端和Server端的数据和命令交互。FTP协议在TCP/IP协议模型中位于顶层,即应用层。但是它区别于大多数的应用层协议的是,FTP协议要在通信双方之间建立了两条通信链路:控制链路和数据链路。其各自的功能是:用户发送的FTP命令和FTP服务器的响应,由控制链路来完成传送会话过程中信息传递;而数据的传输则由数据链路来负责,数据链路在需要数据传输时建立,数据传输完毕即关闭数据链路。并且信息传递过程中使用的端口,每次进行连接时也不一定相同。而且,数据连接可由Client端发起的,也可能是Server端发起的。 Vsftpd是一种GPL(General Public License)许可下开放源代码的基于UNIX/Linux操作系统下的FTP服务器。它是一种安全、快速、稳定的FTP服务器,Vsftpd能够高效地处理大量的并发连接。在数据连接的建立方式中,PORT(主动)模式和PASV(被动)模式是FTP服务的数据传输中的两种基本模式。这两种模式发起数据连接的方向截然相反,PORT(主动)模式是从Server端向Client发起数据连接;与之相反的,PASV(被动)模式是Client端向Server端发起数据连接。两种模式有各自的适用范围。
1 Vsftpd服务器
大多数的Linux发型版本都内置了Vsftpd服务程序。随着计算机技术的发展,小型化并且开源的基于嵌入式的操作系统正在被被广泛使用,例如:基于Linux内核的OpenWrt系统由于其最小仅有3.5MB因而被广泛移植到嵌入式芯片支持的路由系统中。同样的Vsftpd服务程序也是开源的,用户可以在指定网站上下载需要的Vsftpd RPM安装包。在基于Linux系统下,通过对Vsftpd服务器的配置,可满足在广域网和局域网中对文件的传输需求。Vsftpd的主要特点包括:(1)提供安全的体系结构,根据任务的最低特权需求单独执行每个任务。(2)支持虚拟IP配置,可以在提供一个IP地址的情况下,在域中使用该地址建立的多个FTP服务器。(3)允许配置并使用虚拟用户,从而与系统用户账户分离。(4)支持TCP封装。(5)允许配置匿名服务器,用户可以在不需要身份验证的情况下上传和下载文件。(6)性能稳定,可以处理大量并发连接。(7)可以配置为独立的服务。(8)Vsftpd服务器支持宽带控制。在有些情况下,系统可能自带Vsftpd服务,通过执行"ntsysv"命令,在系统启动时Vsftpd服务将会自动加载。找到其中的"vsftpd"服务,在其前面选择"*"号,并选择【确定】按钮即可,如图1所示。
图1 设置自动运行Vsftpd服务
此外,还有一种方法也可完成配置。依次选择【系统】|【管理】|【服务器设置】|【服务】命令,系统将打开【服务配置】窗口,在窗口中找到【vsftpd】选项,就可以对Vsftpd执行启动、停止和重启等操作。选中【vsftpd】选项前面的复选框,则可以在每次启动系统时自动运行Vsftpd服务。
同样的,用户可以通过修改主配置文件vsftpd.conf来完成Vsftpd服务器的主要配置工作。需要注意的是,一旦用户更改vsftpd.conf文件后,要使设置生效必须重新启动配置后的Vsftpd服务。Vsftpd的主要配置文件位于Linux操作系统的/etc/目录下。其中重要的配置如下:
# nymous_enable=YES/NO
# local_enable=YES/NO
# write_enable=YES
# local_umask=022(或者其他值)
# anon_upload_enable= YES/NO)
# anon_world_readable_only= YES/NO
# anon_mkdir_write_enable= YES/NO
# chroot_list_enable=YES
# chroot_list_file=/etc/vsftpd/chroot_list
2 FTP的Client端配置
图2 PORT(主动)模式数据传输示意图
在Linux系统中对Client端的配置,要完成以下工作:设置要连接的FTP服务器的IP,端口,用户名,密码,连接模式等,根据访问法可分为三种:命令行方式、浏览器方式、FTPClient端工具方式。
3 FTP数据传输PORT(主动)模式
在FTP协议中,提供FTP服务的默认端口为:21(命令端口)和20(数据端口)。在不同的工作方式下,FTP数据端口并不总是20。连接发起的对象不同,就是PORT (主动)模式与PASV (被动)模式在FTP数据传输中的最大不同之处。
PORT (主动)模式的FTP工作原理:首先需要Client端从的一个非特权端口N连接到FTP服务器的21端口(命令端口)。然后Client开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器。接着Server端会将从其20端口(数据端口),连接到Client端指定的数据端口(N+1)。
一般的网络设备都是将防火墙配置于FTP服务器前面,因而数据传输采取PORT(主动)方式的FTP配置须有以下条件:(1)Client端到FTP服务器的21端口(命令端口)的连接(Client端初始化的连接)。(2)FTP服务器的21(命令端口)到Client端的连接(Server 端响应 Client 端的 21(命令端口))。(3)FTP 服务器的20端口(数据端口)到Client端的连接(Server端初始化数据连接到Client端的20端口(数据端口))。(4)Client端到FTP服务器的20端口(数据端口)的连接(Client端发送ACK响应到服务器的20端口(数据端口))
PORT(主动)模式配置方法:
#主动式连接使用的数据通道
connect_from_port_20=YES
#支持数据流的被动式连接模式
pasv_enable=NO
4 FTP数据传输被动(PASV)模式
PASV(被动)模式的FTP工作原理:在PASV(被动)方式FTP服务中,由Client端发起连接,即命令连接和数据连接,这样就可以解决从Server端到Client端的数据端口的入方向连接被Client端防火墙过滤掉的问题。当FTP连接一但开启时,Client端将会提供两个任意的端口号大于1024的非特权本地端口(N >1024和N+1)。其中的一个端口连接Server端的21(命令端口),但与PORT(主动)方式的FTP配置不同,Client端不被允许提交PORT命令也不允许Server端来回连它的20(数据端口),而是提交 PASV命令。由此产生的结果是Server端会开启一个任意的大于1024的非特权端口P(P >1024),并发送PORT P命令给Client端。然后Client端发起从本地端口N+1到Server端的端口P的连接,用来传送数据。
图3 (被动)模式数据传输示意图
对于Server端的防火墙来说,需要有以下的通讯才能支持PASV(被动)方式的FTP服务: (1)Client端到Server端的21(命令端口)的连接(Client 端初始化的连接)。(2)Server 端的21(命令端口)到Client端的连接(Server端响应到Client端的控制端口的连接)。(3)Client端到Server端的大于1024端口的连接(Client端初始化数据连接后Server端返回的的20端口(数据端口))。(4)Server端大于1024端口到Client端的连接(Server端发送ACK响应和数据到Client端的20端口(数据端口))。
PASV(被动)模式配置方法:
# PASV(被动)式连接使用的数据通道
connect_from_port_20=NO
pasv_enable=YES(默认为YES) #设置是否允许PASV(被动)模式
pasv_min_port=1024(default:0(use any port))
pasv_max_port=65536(default:0(use any port))
5 总结
Vsftpd是基于UNIX/Linux等操作系统上运行的FTP服务器,因此其具有安全、免费、便于移植到小型嵌入式系统等特点,在实际应用中具有较好的应用范围。对数据传输模式的使用可采纳以下结论:(1)Client端没有防火墙时,用PORT(主动)模式连接即可。(2Server端没有防火墙时,用PASV(被动)模式即可。(2)双方都有防火墙时,vsftpd设置被动端口范围,Server端防火墙打开被动端口范围,Client端用被动模式连接即可.发布FTP服务器的时候,要注意FTP服务器有PORT(主动)和PASV(被动)两种模式。两者的共同点,是都使用21(命令端口)进行用户验证及管理,差别在于传送数据的方式不同,PORT(主动)模式的FTP服务器数据端口被固定在20,而PASV模式则在1025-65535之间随机。发布的时候要考虑这个差别。
A.连续出版物
[1]周晓林.彭延昌.胡庆梅.周冉.陈宝锋.基于广域网防火墙技术的FTP被动模式的文件传输[J].计算机系统应用,2006,6:80-83
[2]陈倩.嵌入式FTP服务器的设计与实现[J].电子元器件应用,2010,3:36-38B.专著
[1]杨明华.谭励.于重重等.Linux系统与网络服务管理技术大全[M].北京:电子工业出版社,2008:387
[2]褚建立.刘彦舫等.计算机网路技术实用教程[M].北京:清华大学出版社,2008:375C.学位论文
[1]李杰.Linux环境下FTP系统的设计与实现[D].长春:吉林大学,2012