vsftpd info

FTP是什么?

FTP Transfer Protocol 是文件传输协议的缩写,在RFC 959中具体说明

1
2
3
4
5
FTP会话时包含了两个通道:**一个叫控制通道,一个叫数据通道**
* 控制通道
控制通道是和FTP服务器进行沟通的通道,连接FTP,发送FTP指令都是通过控制通道来完成的
* 数据通道
数据通道是和FTP服务器进行文件传输或者列表的通道

1
2
3
4
5
6
7
8
9
10
11
12
FTP协议中,控制连接均有客户端发起,而数据连接有两种工作方式:**PORT方式和PASV方式**
1. PORT模式(主动方式)
FTP客户端首先和FTP Server的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令.
PORT命令包含了客户端用什么端口(一个大于1024的端口)接收数据.
在传送数据的时候,服务器端通过自己的TCP 20端口发送数据.
FTP server必须和客户端建立一个新的连接用来传送数据
2. PASV模式(被动方式)
在建立控制通道的时候和PORT模式类似,当客户端通过这个通道发送PASV命令的时候,
FTP server打开一个位于1024和5000之间的随机端口并且通知客户端在这个端口上传送数据的请求,
然后FTP server将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接传送数据
3. 如果从C/S模型这个角度来说,PORT对于服务器来说是OUTBOUND,而PASV模式对于服务器是INBOUND,
这一点请特别注意,尤其是在使用防火墙的企业里,这一点非常关键,如果设置错了,那么客户将无法连接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
vsftpd的xinetd模式和initd模式
standalone一次性启动,运行期间一直驻留在内存中,优点是对接入信号反应快,缺点是损耗了一定的系统资源,因此经常应用于对实时反应要求较高的专业FTP服务器.inetd恰恰相反,由于只在外部连接发送请求时才调用FTP进程,因此不适合应用在同时连接数量较多的系统.此外,inetd模式不占用系统资源.除了反应速度和占用资源两方面的影响外,vsftpd还提供了一些额外的高级功能,如inetd模式支持per_IP(单一IP)限制,而standalone模式则更有利于PAM验证功能的应用
1.xinetd运行模式
大多数较新的系统采用的是xinetd超级服务守护进程
使用"vi /etc/xinetd.d/vsftpd"看一下它的内容,如下:
disable = no
socket_type = stream
wait = no
#这表示设备是激活的,它正在使用标准的TCP Sockets
如果"/etc/vsftpd.conf"中的有选项为"listen=YES",注销它
最后,重启xinetd: /etc/rc.d/init.d/xinetd restart
需要注意的是,"/etc/xinetd.d"目录中仅能开启一个FTP服务
2.standalone模式
standalone模式便于实现PAM验证功能
进入这种模式首先要关闭xinetd下的vsftpd,设置
"disable = yes"
或者注销掉"/etc/inetd.conf"中相应的行
然后修改""/etc/vsftpd.conf"中的选项为"listen=YES"

如果是standlone模式,那么它是作为单独的一个服务启动的,不需要系统协作,不作为系统服务
如果要是成为xinetd模式,那么它的服务就要受系统服务的限制,比如创建一个新的服务进程,但是也有缺点,如果xinetd服务本身出了问题,那么相关的服务也是会受到影响的
1
2
3
4
xinetd模式和standalone模式的区别:
* 以xinetd模式运行的服务表示该服务进程并不以守护进程执行
* 以xinetd模式运行这个服务,本身FTP服务是会监听21号端口的,但是以这种模式运行这个服务的话,21号端口则由xinetd进程来监听(此时FTPD服务并没有运行),如果你的网卡接收到有21号端口请求,则有xinetd进程会去调用FTPD程序,将在21号端口接收到的请求数据移交给FTPD进程去处理,处理完后FTPD进程退出,而xinetd进程继续监听21号端口,这有点类似windows的svhost进程
* 以standalone模式运行的服务则是服务进程,如ftpd以守护进程在内存中运行,接收到21号端口的请求后由FTPD进程fork出一个子进程进行处理,而原进程继续监听21号端口