7. FTP 协议深度解析

1. 协议基础

  • 定义:FTP(File Transfer Protocol)是 基于 TCP/IP 的应用层协议,诞生于 1971 年(RFC 114),现主流版本为 RFC 959(1985 年)。
  • 核心目标:在异构网络环境中实现 跨平台文件传输(如 Linux ↔ Windows)。
  • 默认端口
    • 控制连接:TCP 21(命令通道)
    • 数据连接:TCP 20(主动模式)或动态端口(被动模式)

2. 协议工作原理

FTP 采用 双通道设计,分离命令与数据传输:

  1. 控制连接(持久连接):
    • 客户端通过 TCP 21 端口连接服务器。
    • 传输 ASCII 命令(如 USER, PASS, LIST, RETR)。
  2. 数据连接(按需建立):
    • 传输文件内容或目录列表。
    • 模式选择:
      • 主动模式(PORT):服务器主动连接客户端的高位端口(易被防火墙拦截)。
      • 被动模式(PASV):客户端连接服务器的动态高位端口(需配置防火墙放行)。

3. 传输模式

模式 描述 适用场景
ASCII 自动转换文本文件的换行符(如 LF ↔ CRLF) 跨系统文本传输
Binary 原样传输文件(图片、压缩包等) 非文本文件

4. 安全性缺陷

  • 明文传输:用户名、密码、文件内容均未加密。
  • 中间人攻击风险:易被嗅探或篡改。
  • 替代方案
    • SFTP:基于 SSH 加密通道(端口 22)。
    • FTPS:FTP over SSL/TLS(端口 990/989)。

5. 典型应用场景

  • 企业内部共享大文件(需内网环境)。
  • 网站管理员上传静态资源到服务器(逐步被 SFTP 替代)。
  • 传统工业设备固件更新(遗留系统兼容)。

CentOS 7 配置 vsftpd 服务器(实战教学)

1. 安装与基础配置

# 安装 vsftpd
yum install vsftpd -y

2. 配置文件详解(/etc/vsftpd/vsftpd.conf)

# 核心安全设置
anonymous_enable=NO            # 禁用匿名登录
local_enable=YES               # 允许本地用户登录
write_enable=YES               # 开放写权限
chroot_local_user=YES          # 锁定用户到主目录
allow_writeable_chroot=YES     # 允许被锁定的用户写入文件

# 连接控制
max_clients=50                 # 最大并发连接数
max_per_ip=5                   # 单 IP 最大连接数

# 日志记录(便于排错)
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log

# 被动模式配置(企业网络必调)
pasv_enable=YES
pasv_min_port=60000           # 被动模式端口下限
pasv_max_port=60100           # 被动模式端口上限
pasv_address=your_server_ip   # 服务器公网 IP(NAT 环境必须指定)

4. 用户管理(实战案例)

场景:创建仅能访问 /var/ftp/upload 的受限用户 ftp_teacher

# 创建专用目录
mkdir -p /var/ftp/upload
chmod 755 /var/ftp
chmod 770 /var/ftp/upload

# 创建系统用户并限制权限
useradd -d /var/ftp -s /sbin/nologin ftp_teacher
chown ftp_teacher:ftp_teacher /var/ftp/upload
passwd ftp_teacher

# 禁止用户切换目录(增强版 chroot)
echo "ftp_teacher" | tee -a /etc/vsftpd/chroot_list
systemctl restart vsftpd

5. 客户端测试(课堂演示)

Windows:使用 FileZilla 或资源管理器输入 ftp://服务器IP
Linux:命令行工具:

ftp 192.168.1.100
> 输入用户名 ftp_teacher
> 输入密码
> put test.txt      # 上传测试文件
> get example.zip  # 下载测试文件

附:FTP 协议抓包分析(Wireshark 演示)

  • 控制通道:观察 USER/PASS 明文传输
  • 数据通道:对比主动模式(PORT)与被动模式(PASV)的端口协商过程