在企业文件传输、共享场景,常使用到FTP,但随着网络安全法、数据安全法等法律法规的发布,越来越多企业重视数据传输过程的安全性,作为企业文件传输常用协议,在选择上也会面临众多考量,本文从安全性、易用性、性能等维度作出简要说明,供有需要的伙伴参考
-
结论先行
-
针对少量小文件传输场景,从安全性、易用性、性能综合考虑,优先使用SFTP;
-
在企业有大量小文件、大文件传输场景,从安全性、易用性、性能综合考虑,优先使用FTPS;
-
如果仅从安全性维度考虑,建议使用SFTP。
-
-
工作机制说明
- FTPS
- FTPS从实现机制上本质还是在FTP协议上增加了SSL,也被称为FTP over SSL;从落地上又分为显性模式和隐形模式。
- FTP显式SSL:该模式下,可以同时支持FTP、FTPS会话;开始前客户端需要和FTP服务器先建立未加密FTP链接;在发送用户凭证前先发送 AUTH TLS 或 AUTH SSL 命令来请求服务器将命令通道切换到 SSL 加密通道,成功建立通道后再将用户凭证发送到 FTP 服务器,从而保证在会话期间的任何命令都可以通过 SSL 通道自动加密。该模式下传输端口和FTP默认端口一致,但要求以AUTH TLS/SSL方式激活安全连接后才能传输数据
- FTP隐式SSL:该模式下,全部数据的交换都需要在客户端和服务器之间建立 SSL 会话,并且服务器会拒绝任何不使用 SSL 进行的连接尝试,默认的传输端口改为990
- 注意:FTP的工作方式有主动模式和被动模式,实际场景下注意区分,关于主动模式和被动模式属于基础知识,有需要的可以参考:FTP的主动模式和被动模式_ftp主动连接和被动连接-优快云博客
- SFTP
- SFTP 是 Secure File Transfer Protocol 的缩写,也叫作安全文件传送协议,属于一种基于SSH的文件传输协议,SFTP 不使用单独的命令通道和数据通道,而是数据和命令都会通过单个连接以特殊格式的数据包进行传输。
- SFTP本质属于SSH协议的一部分,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作
- FTPS
-
安全性对比
- 综合结论:SFTP安全性相对FTPS更安全
- 连接认证:SFTP比FTPS安全性更高
- SFTP
- 支持多种认证方式,如基于密码的认证、基于公钥的认证、基于主机的认证(通常与密码、公钥认证结合使用),且整个认证过程都是采用加密方式;公钥的认证方式更是通过非对称加密算法实现
- FTPS
- 支持密码认证、证书认证(客户端证书、服务端证书、双向认证);但密码认证存在弱密码、爆破、凭证获取等风险,虽然可以通过SSL加密方式,但也存在被破解风险;证书认证的颁发机构可信度等也存在挑战
- SFTP
- 加密方式:相对来说SFTP更安全
- SFTP
- 基于 SSH(Secure Shell)协议,使用 SSH 的加密机制对数据进行加密传输。SSH 本身是一种非常安全的网络协议,提供了强大的加密和认证功能,包括对称加密、非对称加密等多种加密算法,能够有效地保护数据在传输过程中的安全性,防止数据被窃取或篡改。
- SFTP 的加密是端到端的,即从客户端到服务器的整个传输过程中,无论是控制命令还是文件数据都是加密的
- FTPS
- 通过在传输层和会话层之间加入 SSL/TLS(Secure Sockets Layer/Transport Layer Security)加密层来实现安全传输。SSL/TLS 也提供了数据加密和身份验证功能,能对 FTP 连接中的数据进行加密保护,但加密范围弱于 SFTP
- 虽然数据通道是加密的,但在一些配置不当或特殊情况下,控制命令的传输可能存在一定的安全风险
- SFTP
- 连接方式与端口:SFTP更安全
- SFTP
- 使用一个连接,通过 SSH 协议的默认端口 22 进行通信。这使得 SFTP 在防火墙和网络地址转换(NAT)环境下更容易配置和使用,只需要开放一个端口就可以完成所有的文件传输操作,降低了网络配置的复杂性和安全风险
- 同时本身属于SSH协议一部分,默认端口修改和控制也相对简单
- FTPS
- 使用多个端口号,命令通道通常使用标准的 FTP 控制连接端口 21,但在进行文件传输或目录列表请求时,需要为数据通道打开另一个端口号,要求在防火墙中开放多个端口以允许 FTPS 连接,增加了网络配置的难度和安全风险,因为开放的端口越多,被攻击的可能性就越大
- 隐式模式还引入额外990端口,也进一步造成端口放大风险
- SFTP
- 一致性保护:SFTP更安全
- SFTP
- 所有的通信都是安全的,一旦建立连接,整个传输过程都处于加密状态,不存在连接、状态切换
- 只需要建立一个连接,从系统层面、网络防火墙层面都更容易控制
- FTPS
- 允许在不安全的 FTP 连接和 FTPS 安全连接之间切换,容易导致用户或系统误使用不安全的连接进行文件传输
- 需要多个连接,导致系统层面端口开放、网络防火墙的管理复杂度、风险增大
- SFTP
- 连接认证:SFTP比FTPS安全性更高
-
兼容性对比
- 协议兼容性:FTPS更好
- FTPS
- FTPS 基于传统的 FTP 协议,从FTP过渡到 FTPS 更容易。许多现有的 FTP 客户端和服务器软件只需进行一定的升级或配置就可以支持 FTPS
- 遵循成熟的 SSL/TLS 加密标准,很多安全策略和设备(如防火墙中的 SSL 解密和检查功能)已经针对 SSL/TLS 协议进行了优化。
- 继承了 FTP 丰富的功能,如文件的上传、下载、目录操作(创建、删除、重命名目录等)、文件权限设置等多种功能
- SFTP
- SFTP 是基于 SSH 协议的,与传统的 FTP 协议不兼容,因此一些只支持 FTP 的旧客户端软件无法直接使用 SFTP
- 在某些特殊的 FTP 功能方面不如 FTPS 丰富,比如,在某些特定的文件服务器操作系统中,通过 FTPS 可以更方便地设置一些复杂的文件组权限和访问控制列表(ACL),而 SFTP 可能没有提供同样全面的功能
- FTPS
- 网络环境兼容性:SFTP更好
- FTPS
- 虽然FTPS中的SSL协议在主流的网络、安全设备中都做了兼容和优化,但FTP协议本身的传输模式复杂,在应对复杂网络环境,兼容性差,如FTP的在NAT穿透网络下实施会非常复杂
- SFTP
- SFTP本质是SSH协议的一部分,网络上只需要支持SSH协议即可使用,相对来说对环境要求更低
- FTPS
- 配置复杂度:SFTP更好
- FTPS
- FTPS的不同模式下对FTP本身、关联环境的配置都有较高要求
- 为了确保安全性,需要配置合适的SSL/TLS加密套件,配置和维护相对复杂
- SFTP
- 配置相对简单,且配置安全性高
- FTPS
- 协议兼容性:FTPS更好
-
性能对比
- 连接建立速度:SFTP更优
- SFTP
- 因为只需要建立一个连接,在连接建立上简单、快捷
- 针对已经使用和建立了SSH的系统,SFTP的建立速度会更快
- FTPS
- FTPS 有两种模式,显式 FTPS 使用标准的 FTP 控制连接端口(21),并通过一个特殊的命令(
AUTH TLS
或AUTH SSL
)来启动 SSL/TLS 加密,之后进行额外的协商和握手过程来建立安全连接;隐式 FTPS 则默认所有连接都使用 SSL/TLS 进行加密,并且使用特定的端口(默认 990)进行控制连接。整体连接建立速度相对较慢
- FTPS 有两种模式,显式 FTPS 使用标准的 FTP 控制连接端口(21),并通过一个特殊的命令(
- SFTP
- 数据传输速度:FTPS更优
- SFTP
- SFTP 会对数据进行加密和解密操作,会消耗一定资源,影响速度
- SFTP 传输的数据包在从客户端写入输出套接字之前都已加密,并在被服务器接收时解密,这种加密操作会对传输速度产生影响,尤其是在处理大型文件或大量小文件时
- FTPS
- FTPS 是在 FTP 的基础上增加了加密层,对于 FTP 的一些数据传输机制和优化策略有较好的继承,所以在数据传输速度上更有优势,但也需要考虑网络环境、服务器性能
- SFTP
- 资源占用:FTPS更优
- SFTP
- 依赖SSH服务,本身存在一定资源占用来进行加密和解密操作,以及维护连接的稳定性,在并发连接数较多的情况下,对服务器的内存和 CPU 资源的消耗比较大
- SFTP 在传输文件时需要对每个文件的传输进行单独的加密处理,也会存在较大资源占用
- FTPS
- FTPS 的加密机制相对较为成熟和高效,因此对系统资源的占用相对较少
- 在并发连接数较多的情况下,服务器的资源占用可能会成为性能瓶颈
- SFTP
- 网络适应性:SFTP更优
- SFTP
- SFTP 使用单个连接进行控制和数据传输,使得在穿越防火墙和 NAT 时相对较为简单,能够较好地适应各种网络环境;即使在网络条件较差或存在网络延迟的情况下,SFTP 也能够保持较为稳定的连接和传输
- FTPS
- 在进行 SSL/TLS 加密时可能会受到网络环境的影响,对网络环境的适应性相对较差;在网络不稳定的情况下,FTPS 的传输可能会出现中断或延迟的情况。
- SFTP
- 并发能力:FTPS更优
- SFTP
- SFTP 在并发处理能力上相对较弱,因为它的加密和解密操作以及连接管理需要消耗较多的系统资源,所以在处理大量并发连接时可能会出现性能问题
- FTPS
- 可以支持多个客户端同时进行文件传输操作。但是,如果服务器的配置不够或者网络带宽有限,过多的并发连接可能会导致性能下降
- SFTP
- 连接建立速度:SFTP更优
-
附件:SFTP服务器加固建议
- 端口自定义
- 因为默认22为高危端口,可以对端口进行自定义
- 在常见的 Linux 系统中,如果使用 OpenSSH 服务器软件,配置文件通常是
/etc/ssh/sshd_config
限制只能使用系统的SFTP服务,不能使用SSH
编辑
/etc/ssh/sshd_config,
控制 SSH 服务行为- 找到并注释掉(在前面添加 “#”)或删除允许 SSH 登录的相关配置选项,如
PermitRootLogin
(控制是否允许 root 用户登录)和PasswordAuthentication
(控制是否允许基于密码的登录)等选项。这一步是为了阻止常规的 SSH 登录方式 - 在
sshd_config
文件中,可以使用ForceCommand
选项来限制用户只能执行与 SFTP 相关的命令。例如,设置ForceCommand internal - sftp
,这样当用户连接到服务器时,系统会强制执行 SFTP 相关的操作,而不能执行其他的 SSH 命令,如查看系统文件目录(ls
)、修改系统文件(vi
)等
- 用户管理限制
- 创建独立用户:为每个需要使用 SFTP 的用户创建独立的账号,避免共享账号。
- 禁用不必要的用户:删除或禁用系统中不再使用或不必要的用户账号,减少潜在的安全风险点。
- 限制用户权限:遵循最小权限原则,仅赋予用户完成其工作所需的最小权限。例如,对于普通用户,只给予文件上传、下载和读取的权限,禁止删除、修改系统文件或其他用户的文件等操作
- 访问控制
- 通过配置防火墙或 SFTP 服务器的访问控制列表,限制只有特定的 IP 地址或 IP 地址段能够访问 SFTP 服务
- 设置用户访问规则
- 根据用户管理限制中创建的账号,基于源 IP 地址和用户来限制 SFTP(基于 SSH)的访问
- 首先,需要确定要限制的用户和源 IP 地址。假设要限制用户 “user1” 只能从 IP 地址 “192.168.1.100” 下载文件,可以通过修改 SSH 配置文件(
/etc/ssh/sshd_config
)来实现部分功能。- 在
sshd_config
文件中,可以使用Match
指令。例如:
- 在
-
Match User user1 ForceCommand internal - sftp
强制用户 “user1” 只能使用 SFTP 服务。
-
然后,使用 iptables 来添加规则;例如,添加一条规则允许来自 IP 地址 “192.168.1.100” 访问端口 22(SSH 服务端口)用于 SFTP 的连接:
iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -m state - -state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp - -sport 22 -m state - -state ESTABLISHED -j ACCEPT
并且添加规则拒绝其他 IP 地址访问端口 22:
iptables -A INPUT -p tcp - -dport 22 -m state - -state NEW -j REJECT
- 最后,保存并应用 iptables 规则(
iptables - save > /etc/iptables. rules
和iptables - restore < /etc/iptables. rules
);并且重新启动 SSH 服务
- 首先,需要确定要限制的用户和源 IP 地址。假设要限制用户 “user1” 只能从 IP 地址 “192.168.1.100” 下载文件,可以通过修改 SSH 配置文件(
- 也可以结合脚本方式检测源IP
- 根据用户管理限制中创建的账号,基于源 IP 地址和用户来限制 SFTP(基于 SSH)的访问
- 文件系统隔离
- 配置 chroot 环境,将用户限制在特定的文件系统目录中,使其无法访问系统的其他部分
- 检查文件和目录的权限设置,确保只有授权的用户能够访问和修改相关文件
- 密码及认证策略
- 强密码要求:强制用户设置复杂的密码,包含大小写字母、数字和特殊字符等,并定期修改密码
- 增强认证方式:如SSH密钥对等
- 系统权限
- 文件系统权限
- 基本权限RWX
- 特殊权限SUID、SGID、Sticky Bit等
- SUID(Set User ID):设置在可执行文件上,使得用户执行该文件时,以文件所有者的身份运行。例如,
/usr/bin/passwd
文件通常有 SUID 权限,这样普通用户可以修改自己的密码,因为执行passwd
时会暂时以root
身份运行。可以使用chmod u + s file
设置 SUID 权限 - SGID(Set Group ID):当设置在目录上时,在该目录下创建的文件所属的组将与目录所属的组相同,而不是创建文件用户的默认组。例如,对于共享目录,设置 SGID 可以方便组内用户共享文件。使用
chmod g + s directory
设置 SGID 权限。 - Sticky Bit:主要用于目录,当一个目录设置了 Sticky Bit 后,只有文件的所有者、目录的所有者或者
root
才能删除该目录中的文件。例如,/tmp
目录通常有 Sticky Bit 权限,防止用户随意删除其他用户的临时文件。使用chmod o + t directory
设置 Sticky Bit 权限。
- SUID(Set User ID):设置在可执行文件上,使得用户执行该文件时,以文件所有者的身份运行。例如,
- 系统权限
- sudoers配置:编辑
sudoers
文件(使用visudo
命令,避免语法错误损坏文件)来配置。例如,要允许用户 “user1” 可以使用apt - get
命令更新软件包,但不能执行其他root
权限的命令,可以在sudoers
文件中添加user1 ALL=(root) /usr/bin/apt - get update
- sudo日志记录:开启
sudo
的日志记录功能,可以跟踪用户使用sudo
执行的命令。在sudoers
文件中添加Defaults logfile = /var/log/sudo.log
来指定日志文件,监控用户的操作
- sudoers配置:编辑
- 文件系统权限
- 端口自定义
- 综合结论:SFTP安全性相对FTPS更安全