一、FTP简介

          FTP: File Transfer Protocol(文件传输协议),专门用来传输文件的协议。工作在应用层。

1.FTP工作模式

          FTP是仅基于TCP的服务,不支持UDP。与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口)。通常来说这两个端口是21(命令端口)和20(数据端口)。但FTP 工作方式的不同,数据端口并不总是20。这就是主动与被动FTP的最大不同之处。主要有两种工作模式:

1)主动FTP

    即Port模式,客户端从一个任意的非特权端口NN>1024)连接到FTP服务器的命令端口,也就是21端口。然后客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。

 针对FTP服务器前面的防火墙来说,必须允许以下通讯才能支持主动方式FTP

  <1> 任何大于1024的端口到FTP服务器的21端口。(客户端初始化的连接)

  <2> FTP服务器的21端口到大于1024的端口。(服务器响应客户端的控制端口)

  <3> FTP服务器的20端口到大于1024的端口。(服务器端初始化数据连接到客户端的数据端口)

  <4> 大于1024端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口)

2)被动FTP

     为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。

  在被动方式FTP中,命令连接和数据连接都由客户端发起,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。

  当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口(N > 1024N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交 PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。

  对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:

  <1> 从任何大于1024的端口到服务器的21端口(客户端初始化的连接)

  <2> 服务器的21端口到任何大于1024的端口(服务器响应到客户端的控制端口的连接)

  <3> 从任何大于1024端口到服务器的大于1024端口(客户端初始化数据连接到服务器指定的任意端口)

  <4> 服务器的大于1024端口到远程的大于1024的端口(服务器发送ACK响应和数据到客户端的数据端口)

 总结

    在主动模式下:FTP服务器的控制端口是21,数据端口是20,所以在做静态映射的时候只需要开放21端口即可,他会用20端口和客户端主动的发起连接。

在被动模式下:FTP服务器的控制端口是21,数据端口是随机的,且是客户端去连接对应的数据端口,所以在做静态的映射话只开放21端口是不可以的。此时需要做DMZ

注:

DMZDemilitarized Zone(隔离区、非军事化区)。它是为了解决安装防火墙后外部网络不能访问内部网络服务器的问题,而设立的一个非安全系统与安全系统之间的缓冲区,这个缓冲区位于企业内部网络和外部网络之间的小网络区域内,在这个小网络区域内可以放置一些必须公开的服务器设施,如企业Web服务器、FTP服务器。此外,通过这样一个DMZ区域,更加有效地保护了内部网络,因为这种网络部署,比起一般的防火墙方案,对***者来说又多了一道关卡。

常见的ftp软件

服务器端:

linux: wuftpd, proftpd, pureftp, vsftpd(very secure), filezilla

Windows: Serv-U, IIS

客户端:

Client: ftp, lftp, gftp(linux), filezilla, flashfxp, cuteftp, leapftp

二、VSFTP特点

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

    安全性是编写VSFTP的初衷,除了这与生俱来的安全特性以外,高速与高稳定性也是VSFTP的两个重要特点。

  <1>在速度方面,使用ASCII代码的模式下载数据时,VSFTP的速度是Wu-FTP的两倍,如果Linux主机使用2.4.*的内核,在千兆以太网上的下载速度可达86MB/S

 <2>在稳定方面,VSFTP就更加的出色,VSFTP在单机(非集群)上支持4000个以上的并发用户同时连接,根据Red HatFtp服务器的数据,VSFTP服务器可以支持15000个并发用户.

三、VSFTP安装测试与简单认识

1.实验环境

系统环境 RHEL-6.4-i386

  服务器端:yum –y install vsftpd(vsftp软件包)

  启动服务:service vsftpd start

  客户端:yum –y install ftp

      yum –y install lftp

在客户端连接测试:

152127751.png

 2.协义响应码:

1xx: 服务器信息

2xx: 正确响应信息

3xx: 正常响应,某操作过程尚未完成,需进一步补充完成;

4xx: 客户端错误;

5xx: 服务器端错误;

注:

<1>若请求服务器端信息,服务器端不存在则会出现客户端错误信息,原因是由于客户端做的错误请求导致的。

<2>由于服务器自身问题导致请求无法完成的会显示服务器端错误。

<3>若用户不存在会显示为服务器端错误。

3.finger服务

 ftp服务器端文件路径是用户家目录;查看用户家目录可以使用命令:         finger UERNAME

finger:显示用户信息。

使用finger命令需要安装finger服务yum -y install finger 

4.vsftpd的用户类型:

  匿名用户事实上是服务器端自动映射的一个系统用户;

  本地用户:/etc/passwd中的用户

  默认rootid号小于500的用户都禁止访问ftp

  虚拟用户:事实上是服务器端自动映射的一个系统用户;

  多个虚拟用户同时被映射为同一个系统用户,但不同的虚拟用户可以具有不同的访问权限。

四、配置VSFTPD工作特性

1.Vsftpd主要文件:

 服务脚本:/etc/rc.d/init.d/vsftpd

 主配置文件:/etc/vsftpd/vsftpd.conf

 执行程序:/usr/sbin/vsftpd

2.vsftpd主配置文件解析

vsftpd 配置文件采用“#”作为注释符,以“#”开头的行和空白行在解析时将被忽略,
其余的行被视为配置命令行,每个配置命令的“=”两边不要留有空格。对于每个
配置命令,在配置文件中还列出了相关的配置说明,利用vim编辑器可实现对配
置文件的编辑修改。方法如下:
#vi /etc/vsftpd/vsftpd.conf
1.登录和对匿名用户的设置
write_enable=YES //是否对登录用户开启写权限。属全局性设置。默认NO
local_enable=YES //是否允许本地用户登录FTP 服务器。默认为NO
anonymous_enable=YES //设置是否允许匿名用户登录FTP服务器。默认为YES
ftp_username=ftp //定义匿名用户的账户名称,默认值为ftp。
no_anon_password=YES //匿名用户登录时是否询问口令。设置为YES,则不询问。默认NO
anon_world_readable_only=YES //匿名用户是否允许下载可阅读的文档,默
认为YES。
anon_upload_enable=YES //是否允许匿名用户上传文件。只有在write_enable 设置为YES 时,该配置项才有效。而且匿名用户对相应的目录必须有写权限。默认为NO。
anon_mkdir_write_enable=YES //是否允许匿名用户创建目录。只有在write_enable 设置为 YES 时有效。且匿名用户对上层目录有写入的权限。
默认为NO。
anon_other_write_enable=NO //若设置为YES,则匿名用户会被允许拥有多于
上传和建立目录的权限,还会拥有删除和更名权限。默认值为NO。
2.设置欢迎信息
用户登录FTP 服务器成功后,服务器可向登录用户输出预设置的欢迎信息。
ftpd_banner=Welcome to my FTP server.
//该配置项用于设置比较简短的欢迎信息。若欢迎信息较多,则可使用
banner_file 配置项。
banner_file=/etc/vsftpd/banner
//设置用户登录时,将要显示输出的文件。该设置项将覆盖ftpd_banner的设置。
dirmessage_enable=YES
//设置是否显示目录消息。若设置为YES,则当用户进入特定目录(比如
/var/ftp/linux)时,将显示该目录中的由message_file 配置项指定的文件
(.message)中的内容。
message_file=.message //设置目录消息文件。可将显示信息存入该
文件。该文件需要放在 相应的目录(比如/var/ftp/linux)下
3.设置用户登录后所在的目录
local_root=/var/ftp
// 设置本地用户登录后所在的目录。默认配置文件中没有设置该项,此时用户登
录FTP 服务器后,所在的目录为该用户的主目录,对于root 用户,则为/root 目录。
anon_root=/var/ftp
//设置匿名用户登录后所在的目录。若未指定,则默认为/var/ftp 目录。
4.控制用户是否允许切换到上级目录
在默认配置下,用户可以使用“cd..”命名切换到上级目录。比如,若用
户登录后所在的目录为/var/ftp,则在“ftp>”命令行下,执行“cd..”命令后,用户将切换到其上级目录/var,若继续执行该命令,则可进入Linux系统的根目录,从而可以对整个Linux的文件系统进行操作。若write_enable=YES,则用户还可对根目录下的文件进行改写操作,会给系统带来极大的安全隐患,因此,必须防止用户切换到Linux的根目录,相关的配置项如下:
chroot_list_enable=YES
// 设置是否启用chroot_list_file 配置项指定的用户列表文件。设置为YES 则除了列在j/etc/vsftpd/chroot_list 文件中的的帐号外,所有登录的用户都可以进入ftp 根目录之外的目录。默认NO
chroot_list_file=/etc/vsftpd/chroot_list
// 用于指定用户列表文件,该文件用于控制哪些用户可以切换到FTP 站点根目
录的上级目录。
chroot_local_user=YES
// 用于指定用户列表文件中的用户,是否允许切换到上级目录。默认NO
注意:要对本地用户查看效果,需先设置local_root=/var/ftp
具体情况有以下几种:
1)当chroot_list_enable=YES,chroot_local_user=YES 时,在
/etc/vsftpd/chroot_list文件中列出的用户,可以切换到上级目录;未在文件中列出的用户,不能切换到站点根目录的上级目录。
2)当chroot_list_enable=YES,chroot_local_user=NO 时,在
/etc/vsftpd/chroot_list文件中列出的用户,不能切换到站点根目录的上级目录;未在文件中列出的用户,可以切换到上级目录。
3)当chroot_list_enable=NO,chroot_local_user=YES 时,所有用户均不能切
换到上级目录。
4)当chroot_list_enable=NO,chroot_local_user=NO 时,所有用户均可以切
换到上级目录。
5)当用户不允许切换到上级目录时,登录后FTP 站点的根目录“/”是该FTP 账
户的主目录,即文件的系统的/var/ftp 目录。
5.设置访问控制
(1)设置允许或不允许访问的主机(见TBP14)
tcp_wrappers=YES 用来设置vsftpd 服务器是否与tcp wrapper相结合,进行主
机的访问控制。默认设置为YES,vsftpd 服务器会检查/etc/hosts.allow和
/etc/hosts.deny中的设置,以决定请求连接的主机是否允许访问该FTP 服务器。这两个文件可以起到简易的防火墙功能。
比如,若要仅允许192.168.168.1~192.168.168.254 的用户,可以访问连接
vsftpd 服务器,则可在/etc/hosts.allow文件中添加以下内容:
vsftpd:192.168.168.0/255.255.255.0 :allow
all:all:deny
(2)设置允许或不允许访问的用户
对用户的访问控制由/etc/vsftpd/user_list 和/etc/vsftpd/ftpusers 文件来控制实现。相关配置命令如下:
userlist_enable=YES
// 决定/etc/vsftpd/user_list 文件是否启用生效。YES 则生效,NO 不生效。
userlist_deny=YES
// 决定/etc/vsftpd/user_list 文件中的用户是允许访问还是不允许访问。若设置为YES,则/etc/vsftpd/user_list 文件中的用户将不允许访问FTP 服务器;若设置为NO,则只有vsftpd.user_list 文件中的用户,才能访问FTP 服务器。
6.设置访问速度
anon_max_rate=0
//设置匿名用户所能使用的最大传输速度,单位为b/s。若设置为0,则不受速度
限制,此为默认值。
local_max_rate=0
// 设置本地用户所能使用的最大传输速度。默认为0,不受限制。
7.定义用户配置文件
在vsftpd 服务器中,不同用户还可使用不同的配置,这要通过用户配置文件
来实现。
user_config_dir=/etc/vsftpd/userconf //用于设置用户配置文件所在的目录。
设置了该配置项后,当用户登录FTP 服务器时,系统就会到
/etc/vsftpd/userconf 目录下读取与当前用户名相同的文件,并根据文件中的配置命令,对当前用户进行更进一步的配置。比如,利用用户配置文件,可实现对不同用户进行访问的速度进行控制,在各用户配置文件中,定义local_max_rate配置,以决定该用户允许的访问速度。
8.与连接相关的设置
listen=YES
//设置vsftpd 服务器是否以standalone 模式运行。以standalone模式运行是一
种较好的方式,此时listen 必须设置为YES,此为默认值,建议不要更改。很多
与服务器运行相关的配置命令,需要此运行模式才有效。若设置为NO,则vsftpd
不是以独立的服务运行,要受xinetd 服务的管理控制,功能上会受限制。
max_clients=0
//设置vsftpd 允许的最大连接数,默认为0,表示不受限制。若设置为150 时,
则同时允许有150 个连接,超出的将拒绝建立连接。只有在以standalone 模式
运行时才有效。
max_per_ip=0
// 设置每个IP 地址允许与FTP 服务器同时建立连接的数目。默认为0,不受限
制。通常可对此配置进行设置,防止同一个用户建立太多的连接。只有在以
standalone 模式运行时才有效。
listen_address=IP 地址
//设置在指定的IP 地址上侦听用户的FTP 请求。若不设置,则对服务器所绑定
的所有IP 地址进行侦听。只有在以standalone 模式运行时才有效。对于只绑定
了一个IP 地址的服务器,不需要配置该项,默认情况下,配置文件中没有该配
置项。若服务器同时绑定了多个IP 地址,则应通过该配置项,指定在哪个IP 地
址上提供FTP 服务,即指定FTP 服务器所使用的IP 地址。
注意:设置此值前后,可以通过netstat -tnl对比端口的监听情况
accept_timeout=60
//设置建立被动(PASV)数据连接的超时时间,单位为秒,默认值为60。
connect_timeout=60
// PORT 方式下建立数据连接的超时时间,单位为秒。
data_connection_timeout=300
//设置建立FTP 数据连接的超时时间,默认为300 秒。
idle_session_timeout=600
//设置多长时间不对FTP 服务器进行任何操作,则断开该FTP 连接,单位为秒,
默认为600 秒。即设置发呆的逾时时间,在这个时间内,若没有数据传送或指
令的输入,则会强行断开连接。
pam_service_name=vsftpd
//设置在PAM所使用的名称,默认值为vsftpd。
setproctitle_enable=NO|YES
//设置每个与FTP 服务器的连接,是否以不同的进程表现出来,默认值为NO,
此时只有一个名为vsftpd 的进程。若设置为YES,则每个连接都会有一个vsftpd
进程,使用“ps -ef|grep ftp”命令可查看到详细的FTP 连接信息。安全起见,建议关闭。
9.FTP 工作方式与端口设置
(1)FTP 工作方式简介
FTP 的工作方式有两种,一种是PORT FTP,另一种是PASV FTP。下
面介绍其工作方式。
二者的区别在于PORT FTP的数据传输端口是由FTP服务器指定的,而PASV
FTP 则是由FTP 客户端指定的,而且每次数据连接所使用的端口号都不同。正
因为如此,所以在CuteFTP等FTP客户端软件中,其连接类型设置项中有PORT
和PASV 两种选择。
当FTP 服务器设置为PASV 工作模式时,客户端也必须设置为PASV
连接类型。若客户端连接类型设置为PORT,则能建立FTP 连接,但在执行ls
或get 等需要数据请求的命令时,将会出现无响应并最终报告无法建立数据连
接。
(2)与端口相关的配置
listen_port=21
// 设置FTP 服务器建立连接所侦听的端口,默认值为21。
连接非标准端口示例:ftp www.sunflower.org 7000
connect_from_port_20=YES
// 默认值为YES,指定FTP 数据传输连接使用20 端口。若设置为NO,则进行
数据连接时,所使用的端口由ftp_data_port指定。
ftp_data_port=20
//设置PORT 方式下FTP 数据连接所使用的端口,默认值为20。
pasv_enable=YES|NO
//若设置为YES,则使用PASV 工作模式;若设置为NO,使用PORT 模式。默
认为YES,即使用PASV 模式。
pasv_max_port=0
//设置在PASV 工作方式下,数据连接可以使用的端口范围的上界。默认值为0,
表示任意端口。
pasv_mim_port=0
//设置在PASV 工作方式下,数据连接可以使用的端口范围的下界。默认值为0,
表示任意端口。
10.设置传输模式
FTP 在传输数据时,可使用二进制(Binary)方式,也可使用ASCII模式来上传
或下载数据。
ascii_download_enable=YES //设置是否启用ASCII 模式下载数据。默认为
NO。
ascii_upload_enable=YES //设置是否启用ASCII 模式上传数据。默认为
NO。
11.设置上传文档的所属关系和权限
(1)设置匿名上传文档的属主
chown_uploads=YES
//用于设置是否改变匿名用户上传的文档的属主。默认为NO。若设置为YES,
则匿名用户上传的文档的属主将被设置为chown_username 配置项所设置的用
户名。
chown_username=whoever
//设置匿名用户上传的文档的属主名。只有chown_uploads=YES 时才有效。建
议不要设置为root 用户。 但系统默root
(2)新增文档的权限设定
local_umask=022
//设置本地用户新增文档的umask,默认为022,对应的权限为755。umask 为
022,对应的二进制数为000 010 010,将其取反为111 101 101,转换成十进
制数,即为权限值755,代表文档的所有者(属主)有读写执行权,所属组有读
和执行权,其他用户有读和执行权。022 适合于大多数情况,一般不需要更改。
若设置为077,则对应的权限为700。
anon_umask=022 //设置匿名用户新增文档的umask。默认077
file_open_mode=0755 //设置上传文档的权限。权限采用数字格式。
默认0666
12.日志文件
xferlog_enable=YES //是否启用上传/下载日志记录。默认为NO
xferlog_file=var/log/vsftpd.log //设置日志文件名及路径。需启用
xferlog_enable 选项
xferlog_std_format=YES //日志文件是否使用标准的xferlog日志文
件格式(与wu-ftpd 使用的格式相同) 。默认为NO
13.其他设置
text_userdb_names=NO
//设置在执行ls 命令时,是显示UID、GID还是显示出具体的用户名或组名称。
默认为NO,以UID和GID方式显示,若希望显示用户名和组名称,则设置为
YES。
ls_recurse_enable=YES
//若设置为YES,则允许执行“ls –R”这个命令,默认值为NO。在配置文件中该
配置项被注释掉了,与此类似的还有一些配置,需要启用时,将注释符去掉并进
行YES 或NO 的设置即可。

3.vsftpd的工作特性

(1)chroot: 禁锢用户于其家目录中,实现方式有两种:

<1>禁锢所有用户:(本地用户被锁在家目录下)

chroot_local_user=YES

<2>禁锢指定用户,黑名单

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list 

154201656.png

yxm用户被锁定

154253375.png

jerry用户未被锁定

154343535.png

<3>不禁锢指定用户,白名单

chroot_local_user=YES

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list 

注:以上配置全部开启

   chroo_list中指定的用户家目录未被锁定

   未指定的用户家目录被锁定

user_listftp用户白名单和黑名单:/etc/vsftpd/user_list

<1>白名单:

userlist_enable=YES//是否启用此文件

userlist_deny=NO//文件中的用户是否可以登录

<2>黑名单:

userlist_enable=YES

userlist_deny=YES

(2)传输速率限定,默认单位为字节:

anon_max_rate=#//匿名用户最大传输速率

local_max_rate=#//本地用户最大传输速率

user_config_dir=/etc/vsftpd/userconfs///限定指定用户的最大传输速率

在指定的目录下创建和用户名同名的文件使用local_max_rate=# l来限定

(3)连接数限定:

max_clients=100//限定最大的连接数

max_per_ip=5//每个IP最多同时建立连接数

(4)ftps: 配置ssl功能

在主配置文件中添加以下配置选项

ssl_enable=YES//开启ssl功能

ssl_tlsv1=YES//协议版本

ssl_sslv2=YES

ssl_sslv3=YES

allow_anon_ssl=NO//匿名用户是否使用ssl

force_local_data_ssl=YES//本地下载数据使用ssl

force_local_logins_ssl=YES//本地用户登录

rsa_cert_file=/etc/vsftpd/ftpssl/vsftpd.crt//证书存放位置

rsa_private_key_file=/etc/vsftpd/ftpssl/vsftpd.key//私钥存放位置

生成一个私钥

155233363.png

证书请求

155318826.png

签署一个证书

155410551.png

客户连接验证

155446871.png