文章目录
- 前言
- 一、FTP概述
- 二、FTP工作原理
- 2.1 FTP的作用与模式
- 2.2 FTP工作流程
- 2.2.1 主动模式(PORT模式)
- 2.2.2 被动模式(PASV模式)
- 2.2.3 对比表格
- 2.2.4 如何选择?
- 2.2.5 补充:现代FTP服务器的常见做法
- 三、FTP服务搭建与配置
- 3.1 安装前准备
- 3.1.1 关闭防火墙与SELinux
- 3.1.2 安装VSFTPD
- 3.1.3 备份配置文件
- 3.2 匿名用户配置
- 3.2.1 修改配置文件
- 3.2.2 设置目录权限
- 3.2.3 匿名访问测试
- 3.3 本地用户配置
- 3.3.1 修改配置文件
- 3.3.2 用户登录测试
- 3.3.2.1 测试上传下载
- 3.3.3 修改默认根目录
- 3.3.4 用户列表控制
- 四、总结
前言
FTP(File Transfer Protocol)作为经典的文件传输协议,至今仍在许多场景中发挥着重要作用。无论是网站维护、数据备份还是内部文件共享,FTP都因其简单、稳定而备受青睐。本文基于教学实践,系统梳理了FTP的基本概念、工作原理、服务搭建与配置方法,旨在帮助读者快速掌握FTP服务的核心知识与实操技能。
一、FTP概述
FTP(File Transfer Protocol,文件传输协议)是一种典型的C/S架构的应用层协议,通过服务端和客户端软件共同实现文件传输功能。FTP使用TCP协议,端口20和21,确保连接可靠且面向连接。
- 21端口:用于传输控制指令。
- 20端口:用于传输数据。
FTP支持两种传输模式:
- 主动模式(Standard/Active):客户端发送PORT命令,服务器主动连接客户端进行数据传输。
- 被动模式(Passive/PASV):客户端发送PASV命令,服务器开放随机端口等待客户端连接。
二、FTP工作原理
2.1 FTP的作用与模式
FTP用于在Internet上传送文件,常见服务端软件包括:
- Windows:Serv-U、FileZilla Server
- Linux:VSFTP(Very Secure FTP)、ProFTPD
FTP使用TCP协议的20和21端口进行通信:
- 20端口用于数据传输;
- 21端口用于控制命令传输。
2.2 FTP工作流程
FTP会话包含两个通道:控制通道和数据传输通道。
2.2.1 主动模式(PORT模式)
- 控制连接:由客户端(Client)向服务器的21端口发起。
- 数据连接:由服务器(Server)向客户端的指定端口发起。
- 客户端连接到服务器的21端口,发送用户名和密码;
- 客户端开放一个随机高位端口(1024以上),并通过PORT命令告知服务器;
- 服务器使用20端口主动连接客户端的指定端口进行数据传输。
-
优点
- 对服务器网络环境要求低:服务器只需要开放21(控制)和20(数据)端口即可正常工作。客户端负责接收来自外部的连接,这在纯服务器内网环境中是优点。
-
缺点
- 客户端防火墙/NAT不友好:这是最大的缺点。在现代网络环境中,客户端通常位于防火墙或NAT路由器之后。
- 问题:当服务器(外网)尝试主动连接到客户端告知的那个内部随机端口(1025)时,客户端的防火墙会认为这是一个未经请求的入站连接,从而将其阻断,导致连接失败。
- 现象:客户端能列出目录(
LIST
命令使用控制连接),但无法传输数据(RETR
,STOR
命令需要数据连接)。
- 安全性较差:服务器需要主动向外连接,从安全策略上讲,这意味着服务器需要信任客户端,增加了潜在的攻击面。
- 客户端防火墙/NAT不友好:这是最大的缺点。在现代网络环境中,客户端通常位于防火墙或NAT路由器之后。
2.2.2 被动模式(PASV模式)
-
控制连接:由客户端向服务器的21端口发起(与主动模式相同)。
-
数据连接:由客户端向服务器的一个随机端口发起。
-
工作过程:
- 客户端连接到服务器的21端口,发送用户名和密码;
- 客户端发送PASV命令;
- 服务器开放一个随机高位端口(1024以上)并告知客户端;
- 客户端连接该端口进行数据传输。
-
优点
- 对客户端防火墙/NAT友好:这是被动模式成为现代默认选择的主要原因。连接建立的方向与HTTP等普通网络请求一致,都是客户端主动“出站”连接。客户端的防火墙只会检查出站连接,通常都会放行,因此成功率高。
- 客户端安全性更好:客户端不再需要开放大量随机端口来接收外部入站连接,减少了暴露给外部的风险。
-
缺点
-
服务器防火墙/NAT配置复杂:
- 问题:服务器需要在防火墙上开放一个范围的高位随机端口(例如 30000-35000),而不仅仅是一个20端口,并将这些端口转发到FTP服务器上。这增加了服务器端的维护复杂度和安全风险(开放端口范围越大,潜在风险越高)。
- 现象:服务器能正常接受控制连接,但在建立数据连接时失败。
-
对服务器端网络环境要求高:如果服务器位于NAT网关后面,配置会非常麻烦,需要将控制端口和数据端口范围都正确地进行NAT映射。
-
注:主动与被动是相对于服务器而言的。服务器主动连接客户端为主动模式,客户端连接服务器为被动模式。
2.2.3 对比表格
特性 | 主动模式 (Active) | 被动模式 (Passive) |
---|---|---|
数据连接发起方 | 服务器 | 客户端 |
服务器端口 | 控制:21, 数据:20 | 控制:21,数据:一个随机高位端口 |
客户端端口 | 控制:随机 -> 21,数据:随机 <- 20 | 控制:随机 -> 21,数据:随机 -> 服务器随机端口 |
防火墙友好性 | 对客户端防火墙极不友好 | 对客户端防火墙非常友好 |
适用场景 | 客户端没有防火墙(如机房内部网络) | 现代通用场景(客户端在NAT/防火墙后,如家庭/公司网络) |
服务器配置 | 简单(只需开放20、21端口) | 复杂(需开放21端口+一个随机端口范围) |
安全性 | 较差(服务器需主动向外连接) | 较好(连接方向符合常规出站请求) |
2.2.4 如何选择?
- 绝大多数情况下,应使用被动模式(PASV)。因为现在的用户几乎都处于路由器(NAT)和防火墙的保护之下,被动模式是保证FTP可用的唯一选择。
- 只有在你知道客户端网络环境非常开放(没有防火墙)且追求服务器简单配置时,才考虑使用主动模式。例如,在两个内部服务器之间进行数据传输。
2.2.5 补充:现代FTP服务器的常见做法
为了解决被动模式的服务器端防火墙问题,现代FTP服务器软件(如 vsftpd, FileZilla Server)通常提供以下配置选项:
- 指定被动模式端口范围:在服务器配置中限定一个较小的端口范围(如 50000-55000),然后在服务器的防火墙中只开放这个特定的端口范围。
- 被动模式外部IP地址:如果服务器 behind NAT,需要设置
pasv_address
为服务器的公网IP地址,这样客户端才能连接到正确的地址。
三、FTP服务搭建与配置
3.1 安装前准备
3.1.1 关闭防火墙与SELinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
3.1.2 安装VSFTPD
yum install -y vsftpd
systemctl start vsftpd
systemctl enable vsftpd
3.1.3 备份配置文件
cd /etc/vsftpd/
cp vsftpd.conf vsftpd.conf.bak
3.2 匿名用户配置
3.2.1 修改配置文件
编辑 /etc/vsftpd/vsftpd.conf
:
anonymous_enable=YES #开启匿名用户访问。默认已开启
write_enable=YES #开放服务器的写权限(若要上传,必须开启)。默认已开启
anon_umask=022 #设置匿名用户所上传数据的权限掩码(反掩码)。 022--》755
anon_upload_enable=YES #允许匿名用户.上传文件。默认已注释,需取消注释
anon_mkdir_write_enable=YES #允许匿名用户创建(上传)目录。默认已注释,需取消注释
anon_other_write_enable=YES #允许删除、重命名、覆盖等操作。需添加
3.2.2 设置目录权限
chmod 777 /var/ftp/pub/
3.2.3 匿名访问测试
在Windows命令行中:
ftp 192.168.10.120 #ip为服务端ip
用户名:ftp
密码:(直接回车)
在Windows的传输过程中需要先进入pub目录,否则会因为没有权限而无法上传下载。
3.3 本地用户配置
3.3.1 修改配置文件
编辑 /etc/vsftpd/vsftpd.conf
:
local_enable=YES
anonymous_enable=NO
write_enable=YES
local_umask=077
chroot_local_user=YES
allow_writeable_chroot=YES
注释以下行(若存在):
# anon_mkdir_write_enable=YES
# anon_other_write_enable=YES
重启服务:
systemctl restart vsftpd
3.3.2 用户登录测试
ftp 192.168.10.12
用户名:zhangsan
密码:(输入对应密码)
或使用浏览器访问:
ftp://zhangsan@192.168.10.120
3.3.2.1 测试上传下载
ftp> pwd #匿名访问ftp的根目录为Linux系统的/var/ftp/目录
ftp> ls #查看当前目录
ftp> cd pub #需要进去才能有效,因为仅设置了/var/ftp/pub目录的777权限
ftp> get文件名 #下载文件到当前Windows本地目录
ftp> put 文件名 #上传文件到ftp目录
ftp> quit #退出
3.3.3 修改默认根目录
anon_root=/var/www/html # 匿名用户根目录
local_root=/var/www/html # 本地用户根目录
3.3.4 用户列表控制
编辑 /etc/vsftpd/user_list
,添加用户:
zhangsan
编辑 vsftpd.conf
:
userlist_enable=YES
userlist_deny=NO # 设置为白名单模式
四、总结
FTP作为一种经典的文件传输协议,在内部网络和特定场景中仍有广泛应用。通过本文的介绍,我们可以了解到:
- FTP的两种工作模式(主动/被动)及其区别;
- VSFTPD的安装与基本配置方法;
- 如何配置匿名访问和本地用户访问;
- 如何通过用户列表实现黑白名单控制。
掌握FTP服务的搭建与配置,不仅有助于理解传统网络服务的运作方式,也能为实际工作中的文件传输需求提供可靠解决方案。尽管如今SFTP、HTTP等方式逐渐普及,FTP仍在某些环境中保持着不可替代的地位。
最后,希望大家多多实践,夯实基础,聚沙成塔,与君共勉之!