FTP 通信分为主动 active 被动 PASV 模式。
FTP 通信会占用两个 TCP 通道:一个用于命令,一个用于数据。
主动、被动是站在(响应命令的)服务端的角度来说:
FTP 客户端首先向服务端 21 端口发送命令,然后
- (最初只有)主动模式:客户端启动端口,服务端连接
- (解决痛点)被动模式:服务端启动端口,客户端连接
windows 平台下 cmd/powershell 中的 ftp 命令不支持被动模式,文件管理器支持被动模式。
在 linux 下部署 ftp 服务使用 vsftpd ,其配置中比较敏感的一项(以及关联的两项)
- chroot_local_user [=YES 开启 chroot()]
- chroot_limit_enable [=YES 对上述配置做出微调] 和 chroot_list_file
建议三者组合,针对个别敏感 ftp 账户(或者全部 ftp 账户)开启 chroot() =将用户限制在主目录,避免切换到主目录之外。
此外,用户主目录下可能存在权限异常的文件(和目录)也会直接影响到读写、ls 查看、cd 切换工作目录等操作。
TFTP
FTP服务一般运行在 20 和 21 两个端口,分为主动模式和被动模式。
TFTP 使用 UDP(端口69)作为其传输协议(不像 FTP 使用 TCP 端口 21)。