FTP和SFTP到底有什么区别

FTP和SFTP名字听起来像是同一样东西的不同版本,但它们建立在完全不同的基础之上。

FTP用明文通过两条通道传输文件

FTP(文件传输协议)用一条独立的控制连接来传输命令,再用另一条独立的数据连接来实际传输文件,默认情况下所有内容——包括登录凭证——都是不加密传输的。

SFTP是完全不同的协议,而不是FTP加了个插件

SFTP(SSH文件传输协议)构建在SSH之上,也就是用于远程登录服务器的那套安全协议,它是从零设计出来的,而不是在FTP基础上简单加上加密功能。

"SFTP=FTP+SSL"是一个流传很广但并不准确的简化说法

这其实是把SFTP和FTPS搞混了。SFTP根本不使用FTP或SSL,而是完全运行在SSH之上。名字相似是这种混淆一直存在的主要原因。

真正在FTP基础上加了加密的协议是FTPS

FTPS(FTP Secure)是在标准FTP之上叠加了TLS/SSL加密,保留了FTP原有的双通道设计——尽管名字相近,它和SFTP实际上是两个不同的协议。

SFTP对防火墙比FTP或FTPS更友好

FTP和FTPS会用到多个端口,包括为数据传输动态协商出来的一段端口,这通常需要对防火墙做特殊配置。SFTP通常只用一个端口(一般是22号,与SSH共用),让防火墙的安全放行配置简单得多。

当前实际使用中的默认选择是SFTP

对于涉及敏感数据或需要经过公网的传输,标准做法是使用SFTP(或作为替代方案的FTPS)。普通FTP通常只在完全受信任、隔离的内部网络中传输真正不敏感的文件时才算是可以接受的选择。

为什么这几个名字会造成这么多混淆

FTP、FTPS和SFTP的名字里都带着"FTP",大致目的也相同——在系统之间传输文件——但它们建立在不同的底层协议和不同的安全模型之上。把它们当成同一协议的简单变体,是网络基础知识里最常见的误解之一。

"安全"实际保护的是什么

SFTP和FTPS都会对传输中的数据进行加密,防止登录凭证或文件内容在网络传输过程中被第三方截获。但这两种协议本身都不会控制文件到达目的地之后会发生什么,那取决于服务器自身的访问控制和安全实践。

常见问题

现在还有人在用FTP吗?

对于涉及敏感数据的场景,普通FTP已经远不如从前常见,但在一些特定的旧系统、内部受信任网络,或者更看重与老旧软件兼容性而非加密的场合,它仍然会被用到。

SFTP和FTPS用的是同一个端口吗?

不是。SFTP通常使用与SSH共用的22号端口,而FTPS通常用21号端口作为控制通道,再加上和标准FTP类似的额外数据端口。