Vsftpd服务详解

一、 ftp(File Transfer Protocol)即文件传输协议

ftp(File Transfer Protocol,文件传输协议)是 TCP/IP 协议族中的一员。ftp协议包括两个组成部分,其一为ftp服务器,其二为ftp客户端。
ftp客户端与服务器创建网络连接,请求登录服务器,登录成功后,就可以进行文件传输。文件传输的请求由客户端发起,主要包括取文件和发送文件两种操作。
FTP协议用到2个TCP连接,一是命令链路,用来在FTP客户端与服务器之间传递命令;二是数据链路,用来上传或下载数据。FTP是基于TCP协议的,
因此iptables防火墙设置中只需要放开指定端口(21 + 传输(PASV)端口范围)的TCP协议即可。

二、 工作模式
ftp工作模式分为主动模式(active mode)和被动模式(passive mode),ftp是tcp连接,所以要进行三次握手。

1,主动(active)模式(主动模式(PORT)):
I   客户端会随机取一个端口(>1024)向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。
II  当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了一个(>1024)的随机端口,你来连接我”。
III 于是,服务器从20端口向客户端的(>1024)的随机端口发送连接请求,建立一条数据链路来传送数据。

2,被动(passive)模式(被动模式(PASV)):
I   客户端会随机取一个端口(>1024)向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。
II  当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了一个(>1024)的随机端口,你过来连接我”。
III 于是客户端向服务器的指定端口发送连接请求,建立一条数据链路来传送数据。 

3,active和passive模式的配置:
在命令行输入vim /etc/vsftpd/vsftpd.conf:

3.1> active mode:

pasv_enable=NO     (passive模式关闭)
pasv_min_port=3000
pasv_max_port=4000
port_enable=YES    (active模式开启)
connect_from_port_20=YES  (即默认情况下,FTP PORT主动模式进行数据传输时使用20端口(ftp-data)。YES使用,NO不使用。)

3.2>passive mode:

pasv_enable=YES
pasv_min_port=3000  
pasv_max_port=4000

设定在PASV模式下,建立数据传输所可以使用port范围的下界和上界,0 表示任意(1024 – 65535端口)。默认值为0。把端口范围设在比较高的一段范围内,比如3000-4000。

在linux上,如果不配置pasv_enable=NO,默认是passive模式。

4,service vsftpd restart 重启ftp服务;

5,通过命令行连接ftp server:

5.1> active mode:   ftp -A 3.3.3.3  
active模式连接ftp server时一定要加-A

5.2> passive mode: 可以直接使用  ftp 3.3.3.3   
也可以使用 ftp -p 3.3.3.3

6,修改模式

Windows Cmd下默认为主动模式,更改Ftp为被动的方法:
ftp> quote PASV

Linux Ftp命令下默认为被动模式,更改为主动的方法:
ftp> passive

三、运行模式:
vsftp有三种运行模式,形象点这样理解:
1,standalone模式:自己又当老板zhi又当员工,事无dao巨细,vsftp 自己动手。
standalone模式便于实现PAM验证功能。进入这种模式首先要关闭xinetd下的vsftpd,设置“disable = yes”,或者注销掉“/etc/inetd.conf”中相应的行。
然后修改“/etc/vsftpd.conf”中的选项为“listen=YES”。
2,inetd 模式:老板请了个秘书,来了业务都秘书接待。有事秘书叫你。但这个秘书能力很强,同时给很多老板兼职。
3,xinetd 模式: inetd 这个秘书老了,有些新东西不会,跟不上潮流。换了个新的。
大多数较新的系统采用的是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服务。

4,xinetd模式和standalone模式的区别:
以xinetd模式运行的服务表示该服务进程并不以守护进程执行,以ftpd进程为例吧,以xinetd模式运行这个服务,情况是这样的,本身FTP服务是会监听21号端口的,但是以这种模式运行这个服务的话,
21号端口则由xinetd进程来监听(此时ftpd服务并没有运行),如果你的网卡接收到有21号端口请求,则有xinetd进程会去调用ftpd程序,将在21号端口接收到的请求数据移交给ftpd进程去处理,
处理完后ftpd进程退出,而xinetd进程继续监听21号端口,这有点类似 windows的svhost进程;而以 standalone模式运行的服务则是服务进程,如ftpd以守护进程在内存中运行,
接收到21号端口的请求后由FTPD进程fork出一个子进程进行处理,而原进程继续监听21号端口。
The difference between "standalone mode" and "xinetd mode" is who will accept   the initial connection request. The "standalone mode" will accept the request by itself, 
but "xinetd mode" will use xinetd to accept the request, fork a   server process, and redirect the connection to the new process.
如果是standlone模式,那么它是作为单独的一个服务启动的,不需要系统协作,不作为系统服务,如果要是成为xinetd模式,那么它的服务就要受系统服务的限制,比如创建一个新的服务进程,
但是也有缺点,如果xinetd服务本身出了问题,那么相关的服务也是会受到影响的。Standalone适用于高并发环境,xinetd适用于小并发的环境。


5,限制客户端连接
standalone运行模式下,限制连接数的配置文件是/etc/vsftpd.conf。
限制客户端连接数的参数是max_clients和max_per_ip:
max_clients        #最大客户端连接数,默认没有限制
max_per_ip        #单个IP最大连接限制,默认没有限制

在xinetd模式下,限制连接数的配置文件是/etc/xinetd.conf。
限制客户端连接数的参数是instances和cps;
instances        #接受一个大于或等于1的整数或UNLIMITED,设置可以同时运行的最大进程数,UNLIMITED意味着xinetd的该数没有限制
cps            #用来设定连接速率,它需要两个参数,第一个参数表示每秒可以处理的连接数,如果超过了这个连接数时,之后进入的连接数将会被暂停处理,
第二个参数表示停止处理多少秒后,继续处理先去暂停处理的连接。这里可以修改instances和cps的值或者直接改为没有限制UNLIMITED但是,在ftp高并发量的业务来看,
最好的方法是直接将ftp改为standalone运行模式并根据业务来调整限制值或者取消这两个参数使其不受限制。


五、配置文件:
启用xferlog_enable=YES,它表示将客户机登录服务器后上传或下载的文件具体信息记录。
启用xferlog_file=/var/log/vsftpd.log,它表示将上传下载写到指定文件,也就是/var/log/xferlog文件。
启用dual_log_enable=YES,它表示启用双份日志,一份日志由xferlog记录,同时vsftpd.log也记录另一份日志,注意他们两儿可不是互为备份,其内容不同,但各有千秋。
/usr/bin/xferstats这个工具,它是日志统计工具,用于计算传输了多少文件并创建日志文件。
注意:在您的Linux系统中一定安装xferstats的包,才能对他进行操作,如果发现找不到xferstats没有命令就要安装这个包。
默认情况下,Vsftp不单独记录日志,也就是说不会输出到一个单独的文件中存储,而是统一存放到/var/log/messages文件中。
Vsftpd.log和xferlog是Vsftp服务器记录日志的来源/var/log/xferlog和/var/log/vsftpd.log


六、ftp常用命令:

ls        #查看ftp服务器当前目录下文件

help        #查看ftp支持哪些命令

cd        #指定目录

pwd        #查看ftp服务器当前目录

get xxx.txt    #下载xxx文件 (把ftp服务器当前目录下的xxx.txt文件下载到linux当前目录下)

put xxx.txt    #上传xxx文件 (把linux当前目录下的xxx.txt文件上传到到ftp服务器当前目录下)

quit / bye    #退出ftp

ftp 172.17.6.172 9021        #登录

user deployer SynQnc@2020er    #切换deployer用户


七、相关命令:

使用命令netstat -an|grep :21  来检测ftp连接数

sudo /etc/init.d/vsftpd start
sudo /etc/init.d/vsftpd stop
sudo /etc/init.d/vsftpd restart
或者
sudo service vsftpd start
sudo service vsftpd stop
sudo service vsftpd restart
sudo service vsftpd status 查看服务状态
sudo service vsftpd reload
或者
systemctl restart vsftpd
systemctl start vsftpd
systemctl status vsftpd

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值