FTP文件传输协议

发布时间 2023-07-12 13:29:48作者: 惠恒博
简述

FTP:文件传输协议,File Transfer Protocol,是在互联网中进行文件传输的一种协议,基于C/S模式,客户端通过FTP协议与服务器建立连接,并进行文件的上传、下载和管理。

在Linux系统下,有一款工具实现ftp协议,名为vsftpd,非常安全的FTP守护进程服务

默认端口

控制端口:默认端口号是21。该端口用于控制命令信息的传输,包括身份验证、目录导航、文件传输命令等。客户端通过该端口与服务器建立控制连接,并在此进行命令交互和控制操作。

数据端口:默认端口号是20。数据端口在文件传输时被使用,用于实际的数据传输。当客户端需要下载或上传文件时,数据连接会在控制连接的基础上建立起来,进行文件的实际传输。

安全FTP

需要注意的是,FTP协议是基于TCP协议的,而TCP协议是一种面向连接的协议,它通过在通信双方之间建立可靠的连接来传递数据。在FTP通信中,客户端和服务器之间通过控制连接建立通信,然后在需要的时候在数据连接上进行文件传输。为了提高安全性,常常使用FTP over SSL/TLS(FTPS)SSH File Transfer Protocol(SFTP)这两种安全的FTP协议替代传统的FTP协议。在这些安全协议中,控制和数据的传输都会使用加密通道,对数据进行加密保护,从而提供更高的数据安全性。

工作模式

支持两种工作模式:主动模式和被动模式。

主动模式:FTP服务器主动向客户端发起连接请求

被动模式:FTP服务器在等待客户端发来请求

主动模式

在主动模式(Active Mode)下,客户端首先建立一个控制连接(TCP连接)到服务器的默认端口(通常是端口21)。客户端发送一个PORT命令,指示服务器在哪个端口上连接数据通道。然后服务器从其数据端口(端口20)连接到客户端指定的数据端口,进行数据传输。

主动模式工作原理

  • 客户端向服务器发送一个PORT命令,命令中包含客户端的IP地址和一个数据端口号。
  • 服务器从它的数据端口(端口20)主动连接到客户端指定的数据端口。
  • 数据传输过程中,服务器会从数据端口发送数据,客户端通过控制连接发送命令。
  • 主动模式的优点是服务器可以主动连接到客户端,适用于客户端处于防火墙或NAT(网络地址转换)后面的情况。

主动模式局限性

客户端必须具有公共可访问的IP地址。如果客户端位于防火墙或NAT后面,需要配置防火墙或NAT以允许服务器连接到客户端。当服务器位于防火墙后面时,可能需要配置防火墙以允许传入的数据连接。

被动模式

被动模式(Passive Mode)下,客户端首先建立一个控制连接到服务器的默认端口(通常是端口21)。客户端发送一个PASV命令,指示服务器进入被动模式,并等待服务器告知数据通道的地址和端口。然后客户端从其端口连接到服务器指定的数据端口,进行数据传输。

被动模式工作原理

  • 客户端向服务器发送一个PASV命令,告知服务器进入被动模式。
  • 服务器响应一个包含服务器IP地址和一个由服务器随机选择的数据端口号的应答。
  • 客户端从其端口连接到服务器指定的数据端口。
  • 数据传输过程中,服务器通过控制连接发送命令,客户端通过数据连接接收数据。
  • 被动模式的优点是适用于客户端位于防火墙、NAT或代理后面的情况,无需配置任何特殊的防火墙规则或NAT转换。

被动模式局限性

客户端连接到服务器的数据端口可能会受到端口范围的限制。由于服务器随机选择数据端口,可能需要配置防火墙以允许传入的数据连接。

主被动模式总结

主动模式适用于客户端具有公共可访问IP地址的情况,需要服务器主动连接到客户端。

被动模式适用于客户端位于防火墙、NAT或代理后面的情况,无需服务器连接到客户端。具体使用哪种模式取决于网络环境和防火墙配置。

PORT命令

PORT命令是FTP中的一个命令,用于在主动模式下建立数据连接。当使用PORT命令时,客户端将通过指定的IP地址和端口号来指定数据连接的端点。

PORT命令的语法如下:PORT h1,h2,h3,h4,p1,p2

h1.h4指定了服务器的IP地址的四个十进制数值,p1.p2指定了服务器希望在端口上接收数据的数值。

PORT命令工作步骤

客户端通过控制连接发送PORT命令到服务器。

服务器解析PORT命令中指定的IP地址和端口号。

服务器使用指定的IP地址和端口号在自己的端上建立数据连接。

以后的数据传输将通过这个数据连接进行。

需要注意的是,PORT命令只在FTP的主动模式(Active Mode)下使用。在主动模式下,服务器通过数据连接初始化数据传输。相反,在被动模式(Passive Mode)下,客户端通过PASV命令告知服务器自己将连接到的IP地址和端口号,服务器在该地址和端口上等待数据连接请求。

总结一下,PORT命令用于在FTP主动模式下指定服务器建立数据连接的端点。它允许客户端通过指定IP地址和端口号来控制数据连接的建立。

相关文件

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

安装FTP服务器

1)安装vsftpd软件

]# yum -y install vsftpd

2)配置文件信息                       

]# vi    /etc/vsftpd/vsftpd.conf
# 传输模式和端口设置
pasv_enable=YES     #启用或禁用被动模式(PASV)。设置为 YES 表示启用被动模式
pasv_min_port=1024  # 被动模式数据连接的最小端口
pasv_max_port=1048  # 被动模式数据连接的最大端口
# 本地用户设置
local_enable=YES  # 启用本地用户访问
write_enable=YES  # 允许本地用户上传和修改文件
local_umask=022   # 本地用户创建文件和目录的默认权限掩码
dirmessage_enable=YES
xferlog_enable=YES
# 匿名用户设置
anonymous_enable=YES  # 启用匿名用户访问
anon_upload_enable=YES  # 允许匿名用户上传文件
anon_mkdir_write_enable=YES  # 允许匿名用户创建目录的写权限
anon_umask=022  # 匿名用户创建文件和目录的默认权限掩码
# 用户限制设置
chroot_local_user=YES  # 限制本地用户在其主目录
chroot_list_enable=YES  # 启用根据 chroot_list 文件来限制用户的访问
chroot_list_file=/etc/vsftpd/chroot_list  # chroot_list 文件的路径
# 安全设置
ssl_enable=YES  # 启用 SSL/TLS 安全连接
rsa_cert_file=/etc/ssl/certs/vsftpd.crt  # 服务器端证书文件的路径
rsa_private_key_file=/etc/ssl/private/vsftpd.key  # 服务器端私钥文件的路径
# 日志设置
xferlog_file=/var/log/vsftpd.log  # 传输日志文件的路径
xferlog_std_format=YES  # 使用标准的 xferlog 格式
# 其他设置
idle_session_timeout=600  # 闲置会话超时时间为 600 秒
require_ssl_reuse=NO  # 禁用 SSL 会话的重用
async_abor_enable=YES  # 启用异步 ABOR 命令支持
]# ls      /var/ftp/
]# touch   /var/ftp/shizhiwang.txt

3)启动服务和检查状态

]# systemctl restart vsftpd
]# systemctl status vsftpd   //检查它的状态

4)配置防火墙以允许FTP流量通过。默认情况下,vsftpd使用TCP端口21(控制连接)和20(数据连接)

]# sudo firewall-cmd --permanent --add-port=20/tcp
]# sudo firewall-cmd --permanent --add-port=21/tcp
]# sudo firewall-cmd --reload

5)访问并测试

]# curl   ftp://IP地址