简介:

FTP File Transfer Protocol是一个非常古老的协议,用于文件传输,FTP使用2个端口,一个数据端口(20)和一个命令端口(21),也可以叫做控制端口。但FTP工作的方式挺诡异的,FTP的数据传输通道的端口并不总是20, 你懂的...这就是FTP主动模式与被动模式的最大区别了.

如下图所示:FTP Server 主动模式

   FTP Server 主动模式: Client 从本机会随机取一个大与1024的非特权端口(这里我们假设端口为:22222),经由TCP三次握手之后与FTP Server 建立命令连接通道,然后Client 就监听在22223端口上,并且通过命令连接通道告知FTP Server“我监听在22223端口上,快来连接我吧!”接着FTP Server 会从自己的数据传输端口(20)连接到客户端22223端口上,接着就开始传输数据啦!

Java ftp主动模式被动模式 ftp主动被动区别_操作系统

如下图所示:FTP Server 被动模式

   FTP Server 被动模式:顾名思义,所谓的FTP Server被动模式,命令连接通道,和数据连接通道,都由客户端主动发起请求所建立的啦....1、客户端会从本机随机取出两个大于1024的非特权端口(n,n+1),经由TCP的三次握手之后,客户端使用第一个端口(33445)主动连接FTP Server的21端口,建立命令连接通道.但与主动模式不同的是:
客户端不会主动告诉服务器“我监听在33445端口上快来连接我吧!”而是当客户端需要传送数据的时候就会发送(PASV)并等待服务器响应,服务器通过命令连接通道上通知客户端“我在2088端口上快来连接我吧!”于是客户端就从33446去连接FTP Server 的2088端口,建立数据传输通道,从此就过上了快乐的

Java ftp主动模式被动模式 ftp主动被动区别_Server_02


如下图所示:FTP Server 主动模式 注释:IP地址分为私有的IP地址和公有的IP地址,私有的IP地址路由器是不进行转发的。

   由于IPv4的地址不足,所以才出现了NAT技术,NAT技术将公司客户端(私有IP地址)转换成公网IP地址,但是这种技术的实现方式是这样的(我们直说基于port)它是将公司(私网IP的客户端)通过NAT技术统统给他转变成公网IP,用端口来区分客户端的......

   FTP Server 主动模式 防火墙: 1. Client 通过自己的22222非特权端口与FTP Server 的21号端口,建立命令信道: 因为防洪墙中的 NAT 会主动的记录由内部送往外部的连接的信息,然而由于命令信道建立是由Client 发起的, 因此可以命令连接通道顺利的建立起来的;
2. Client 与FTP Server 间数据信道建立时的通知: 同样的,Client:首先会通过命令信道告知FTP Server:“我监听在192.168.10.2:22222端口快来连接我吧!中间会经过防火墙NAT
3. 接着FTP Server 会主动连到防火墙上,(因为客户端都是经过防火墙的NAT转换才能连接FTP Server的,此时FTP Server 以为防火墙才是客户端) 等待防火墙能够将请求转发给Client: 但是由于透过 NAT 的转换后,FTP 服务器只能得知防火墙220.2.2.2而不是客户端的192.168.10.2, 因此 FTPServer 会以端口20主动的向防火墙220.2.2.2发送数据信道连接的请求。 但防火墙的220.2.2.2事先现并没有监听在22223端口上,而且它并不知道FTP Server是不是***的恶意***,所以必须将PFT Server 的请求拒之门外.

Java ftp主动模式被动模式 ftp主动被动区别_Java ftp主动模式被动模式_03

ftp 配置文件;



anonymous_enable=YES
是否启用允许匿名用户登录
# Uncomment this to allow local users to log in.
local_enable=YES
是否启用允许本地用户登录
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
是否允许登陆用户有写权限。
#
# Default umask for local users is 077. You may wish to change this to 022, #
# if your users expect that (022 is used by most other ftpd's)
local_umask=022    限制本地用户的权限,如果是022的话上传上来的文件就是644
 umask的意思是指:
文件目录权限:777-022=755
文件权限:666-022=644
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
anon_upload_enable=NO
是否允许匿名用户上传
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
anon_mkdir_write_enable=NO #
是否允许匿名用户上传目录
dirmessage_enable=YES # 是否启用当用户进入某个目录时,会出现信息,由管理员自定义!
#
# The target log file can be vsftpd_log_file or xferlog_file.
# This depends on setting xferlog_std_format parameter
xferlog_enable=YES
客户端的上传与下载档案都会被纪录起来
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
是否允许ftp Server 主动连接客户端
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
设置是否改变匿名用户上传文件(非目录)的属主。默认值为NO。
#chown_username=whoever
设置匿名用户上传文件(非目录)的属主名。建议不要设置为root。
# The name of log file when xferlog_enable=YES and xferlog_std_format=YES
# WARNING - changing this filename affects /etc/logrotate.d/vsftpd.log
#xferlog_file=/var/log/xferlog
设置日志文件名和路径
# Switches between logging into vsftpd_log_file and xferlog_file files.
# NO writes to vsftpd_log_file, YES to xferlog_file
xferlog_std_format=YES
#如果启用,则日志文件将会写成xferlog的标准格
# You may change the default value for timing out an idle session.
#idle_session_timeout=600
设置多长时间不对FTP服务器进行任何操作,则断开该FTP连接,单位为秒。默认值为300 。
# You may change the default value for timing out a data connection.
#data_connection_timeout=120
 设置建立FTP数据连接的超时时间,单位为秒。默认值为120
#nopriv_user=ftpsecure
#async_abor_enable=YES
#
# ASCII mangling is a horrible feature of the protocol.
#ascii_upload_enable=YES #
#ascii_download_enable=YES
#
# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service.
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd/banned_emails
chroot_local_user=YES
 将本地用户限制在自己的家目录中(安全考虑)
#chroot_list_enable=YES
是否启用某些本地实体用户限制他们在自己的家目录中
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list
如果 chroot_list_enable=YES那么就可以设定这个项目了!这里面可以指定某些用户!
#ls_recurse_enable=YES
#
是否允许客户端使用ls –R
listen=YES # 是否启用监听ipv6 的地址
#listen_ipv6=YES
pam_service_name=vsftpd.mysql
指定用户认证基于特定的方式
userlist_enable=YES
启用用户列表中的用户
tcp_wrappers=YES
是否允许tcp wrapper
guest_enable=YES
是否允许虚拟用户
guest_username=vsftpd
虚拟用户的名称
user_config_dir=/etc/vsftpd/vuser_dir #
虚拟用户可以指定特定的权限,这一项指定虚拟用户的配置文件在哪



转载于:https://blog.51cto.com/chrome/1386865