1. 什么是FTP
FTP简称文件传输协议,可以与远程计算机之间进行文件共享。该协议采用TCP协议,FTP的服务端口号为21,数据端口为20。通常情况下,传输文件的用户需要经过认证后才能登陆网站访问远程服务器的文件。大多数的FTP服务器往往会提供一个GUEST的公共账户来允许没有远程服务器的用户可以访问该FTP服务器。工作过程如下:
1)客户端向服务器发出连接请求,同时客户端系统打开一个大于1024的端口等候服务器连接(比如1028端口)。
2)FTP服务器21端口侦听到该请求,那么客户端1028会和服务器21端口之间建立一个FTP会话连接。
3)在需要传输数据时,客户端会打开一个大于1024的端口(比如1027端口)去连接服务器的20端口,且会在这两个端口之间进行数据传输,直到数据传输结束后两个端口才会自动关闭。
4)当客户端和服务器断开后,客户端上之前动态分配的端口会自动释放。
2. FTP的功能特性
(1)不同等级的用户身份
FTP服务器在默认情况下,可以根据用户登录的情况分为3种不同的身份,分别是主题账号(Real User)、虚拟用户(Guest)、匿名登陆者(Anonymous),下面对这3种身份进行简单介绍:
1)实体账号:实体账号也称本地账号,即用户在FTP服务器上拥有自己的账号,然后用真实用户名和密码进行登录。
2)虚拟用户:是指用户在FTP服务器上拥有自己的账号,且这个账号只能用来进行文件传输服务。
3)匿名登陆者:如果用户在FTP服务器上没有账号,则可以以anonymous为用户名,以自己的邮件地址为密码进行登录。
三者的区别在于:实体账号成功登录FTP服务器后,他的登录目录为用户自己的目录,此目录在系统建立时有系统自动创建,实体用户可以访问整个目录,对系统有很大的威胁,因此尽量避免使用实体用户访问FTP服务器;而虚拟用户与实体用户不同之处在于虚拟用户在登录服务器后,不能访问除用户主目录以外的内容;匿名者登录成功后,登录目录为匿名FTP服务器的根目录/var/ftp,为了减轻FTP服务器的负荷,应该关闭匿名账号的上传功能。
(2)命令记录与日志文件记录
FTP可以利用系统syslogd的守护进程来进行数据的记录,记录的数据包括用户曾经下达过的命令与用户传输的数据(传输时间、文件大小等),所以可以在/var/log里找到各项日志信息。
(3)限制或解除用户默认目录
为了避免用户在系统中随意操作,所以需要将用户的工作范围局限在用户的默认目录下。FTP可以限制仅能在自己的默认目录中活动。而且登录FTP后,现实的根目录就是用户默认目录的内容,这种环境称之为changeroot,简称chroot,是改变根目录的意思。如此一来,就不能访问系统下的其他目录,所以在chroot的环境下,会比较安全一些。
3. FTP的传输模式
FTP的传输模式有两种:一种是FTP默认的主动连接模式(Active),另一种是被动传输模式。文件控制协议(TCP)是要通过三次握手才能建立连接,那么FTP服务器呢?FTP服务器需要通过两个连接,但是相对于TCP要麻烦一些,这两个连接分别是:命令通道和数据流通道,那么他们之间是一种什么样的关系呢?下面对主动连接模式、被动连接模式进行详细讲解。
*主动连接模式:客户端从任意一个非特权端口N(N>1024)向FTP服务器的命令端口(TCP21端口)发出连接。紧接着客户端端口N+1开始监听,并发送FTP命令端口“N+1”到FTP服务器。最后服务器接到命令后会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1),这样客户端就可以和FTP服务器建立数据传输通道了。
*被动连接模式:在被动方式FTP中,命令连接和数据连接都由客户端发起。当开启一个FTP连接时,客户端打开两个任意的非特权本地端口(N>1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交端口命令并允许服务器来连接它的数据端口,而是提交PASA命令。这样的结果是服务器会开启一个任意的非特权端口(P>1024),并发送端口P命令给客户端。然后客户端发起从本地端口N+1到服务器端口P的连接用来传输数据。FTP端口模式只要开启服务器的21和20端口,而FTP PASV需要开启服务器大于1024所有端口和21端口。
综上所述,主动连接模式是FTP服务器主动连接客户端,被动连接模式是FTP服务器接收客户端的主动连接。
4. FTP服务安装与使用
Linux中最常见的FTP软件为vsftpd,可以运行在多种操作系统上,还支持很多其他的FTP服务器不支持的特性。如:
*非常高的安全性需求
*带宽限制
*良好的可伸缩性
*创建虚拟用户的可能性
*支持IPv6
*中等偏上的性能
*分配虚拟IP的可能性
*高速
*不在依赖xinetd服务
*允许匿名或本地用户访问,匿名访问不需额外的RPM包只需vsftpd就可以了
(1)Linux上安装vsftpd服务
yum安装vsftpd,命令如下:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuQTMzQzMp1maNZmRBFUQiRjdsJ0X0YzYqFDTvl2S39CX1YzLcZEOvwVMw00LcJDMzZWe39CXvwVbvNmLvR3YxUjL0M3Lc9CX6MHc0RHaiojIsJye.png)
安装完成后会有以下提示:
查看vsftpd安装文件路径:
可以看到vsftpd的配置文件路劲和帮助文档存放路径。
(2)vsftpd相关配置文件
*/etc/vsftpd/vsftpd.conf 设置文件共享的路径
*/etc/pam.d/vsftpd_user.list 主要用来作身份认证用,阻止某些用户帐号的功能
(3)vsftpd两个控制连接文件
一个是默认的用户控制文件/etc/vsftpd/ftpusers,所有用户名出现在此文件中的用户就不可以通过FTP登录到系统。
另一个用户控制文件是/etc/vsftpd/user_list,当在/etc/vsftpd/vsftpd.conf文件中定义了userlist_enable=YES,它才会生效。当定义user_deny=NO,只有在use_list文件中定义的用户可以使用FTP。
FTP分为两类,一类是端口FTP;另一类是PASV FTP,分析如下:
*端口FTP
这是一般形式的FTP,先会建立命令通道,默认值是端口21,也就是和端口21建立通信,通过此下达命令。接着,由FTP server端会建立数据传输通道,上传下载文件默认端口是20,也就是和端口20建立通信,并通过端口20进行数据的传输。
*PASV FTP
同样首先建立命令通道,默认端口为21。接着会由客户端做出数据传输的请求,包括本端数据传输端口的数字。
这两者的区别为:端口FTP当中的数据传输端口由FTP server指定,而PASV FTP中的数据传输端口是由FTP客户端决定。通常使用PASV FTP,是在有防火墙的环境之下,透过客户端与服务端的沟通,决定数据传输的端口。
(4)客户端进行访问
客户端下载FTP客户端程序ftp,使用命令ftp 192.168.149.128进行访问。