想想文件传输协议 ( FTP
) 已经存在多久就觉得很奇怪。它最初由麻省理工学院的学生 Abhay Bhushan 于 1971 年开发,最初用于在 ARPANET 上的计算机之间传输文件。不用说,它已经进化了——具有身份验证、加密和压缩功能。它仍然是通过互联网传输文件的广泛使用的协议,特别是在需要快速可靠地传输大文件或大量文件的情况下。
虽然 S3 API 从根本上来说是优越的,但它缺乏FTP/SFTP
的简单性以及在高度受限的环境中运行的能力。因此,MinIO 在 MinIO Server 中添加了对FTP
和SFTP
的支持。有了这个新功能,用户(或应用程序)会认为他们正在与FTP
服务器通信,而实际上他们正在与 MinIO 通信。优点应该是显而易见的 - 将数据无缝移动到 MinIO 上,并且从应用程序/用户的角度来看,一切本质上都是相同的 - 从策略、安全性等方面来看。
目前支持的FTP/SFTP
操作如下:
ftp 客户端命令 | 支持的 |
---|---|
得到 | 是的 |
放 | 是的 |
LS | 是的 |
目录 | 是的 |
目录 | 是的 |
删除 | 是的 |
附加 | 不 |
改名 | 不 |
MinIO 支持以下基于FTP/SFTP
的协议来访问和管理数据。
安全文件传输协议 ( SFTP
) – 由互联网工程任务组 (IETF) 定义为 SSH 2.0 的扩展版本,允许通过 SSH 进行文件传输,并可与传输层安全 (TLS) 和 VPN 应用程序一起使用。
SSL/TLS 上的文件传输协议 ( FTPS
) – 通过 TLS 证书进行加密的FTP
通信。
文件传输协议 ( FTP
) – 最初由 RFC114 定义,并被 RFC765 和 RFC959 未加密的 FTP 通信取代
此版本涵盖的内容:
允许访问所有 IAM 凭证(轮换凭证除外),轮换凭证不允许通过FTP/SFTP
端口登录。如果您使用轮换凭证,则必须使用 S3 API 端口。
对存储桶和对象的访问通过与传入登录凭证关联的 IAM 策略进行管理。
允许所有人进行身份验证和访问
在版本化存储桶上, FTP/SFTP
仅对最新的对象进行操作。如果您需要检索旧版本,则必须使用S3 API client
例如mc
。
您的存储桶当前使用的所有功能将“按原样”运行,无需任何更改
-SSE(服务器端加密)
- 复制(服务器端复制)
本质上,从开发人员/管理员的角度来看,这应该是一个无缝的协议添加。
此功能从RELEASE.2023-04-20T17-56-55Z
开始可用。
假设用户已经创建并配置了相关的访问策略。 MinIO 建议从基本的“读写”预设策略开始,在最终确定用户需要什么级别的限制之前测试所有操作。
FTP/SFTP
访问存储桶和对象不需要“admin:*”操作。由于限制,它们可能会被跳过。
重要提示:默认情况下不启用FTP/SFTP
。需要在设置时启用它。此外,没有通过FTP
提供的管理功能,这必须通过命令行完成。
在分布式设置中启动 MinIO,并启用FTP/SFTP
。
minio server http://server{1...4}/disk{1...4} --ftp="address=:8021" --ftp="passive-port-range=30000-40000" \ --sftp="address=:8022" --sftp="ssh-private-key=/home/miniouser/.ssh/id_rsa" ... ...
以下示例显示使用minioadmin
凭据通过ftp
客户端进行连接,并列出名为runner
的存储桶:
ftp localhost -P 8021 Connected to localhost. 220 Welcome to MinIO FTP Server Name (localhost:user): minioadmin 331 User name ok, password required Password: 230 Password ok, continue Remote system type is UNIX. Using binary mode to transfer files. ftp> ls runner/ 229 Entering Extended Passive Mode (|||39155|) 150 Opening ASCII mode data connection for file list drwxrwxrwx 1 nobody nobody 0 Jan 1 00:00 chunkdocs/ drwxrwxrwx 1 nobody nobody 0 Jan 1 00:00 testdir/ ...
以下示例显示如何列出对象并通过ftp
客户端将其下载到本地:
ftp> ls runner/chunkdocs/metadata 229 Entering Extended Passive Mode (|||44269|) 150 Opening ASCII mode data connection for file list -rwxrwxrwx 1 nobody nobody 45 Apr 1 06:13 chunkdocs/metadata 226 Closing data connection, sent 75 bytes ftp> get (remote-file) runner/chunkdocs/metadata (local-file) test local: test remote: runner/chunkdocs/metadata 229 Entering Extended Passive Mode (|||37785|) 150 Data transfer starting 45 bytes 45 3.58 KiB/s 226 Closing data connection, sent 45 bytes 45 bytes received in 00:00 (3.55 KiB/s) ...
如果服务器上启用了证书,则可以使用SFTP
。如果FTP
客户端有能力,则可以使用 TLS 来保护传输。这将需要私钥的附加标志。
以下示例显示使用minioadmin
凭据通过sftp
客户端进行连接,并列出名为runner
的存储桶:
sftp -P 8022 minioadmin@localhost minioadmin@localhost's password: Connected to localhost. sftp> ls runner/ chunkdocs testdir
以下示例展示了如何通过sftp
客户端将对象下载到本地:
sftp> get runner/chunkdocs/metadata metadata Fetching /runner/chunkdocs/metadata to metadata metadata 100% 226 16.6KB/s 00:00 sftp>
默认端口8021
可以通过更改
--ftp="address=:3021"
默认情况下, FTP
会请求操作系统自动提供可用端口,但是您可能希望通过以下方式将其限制为某些受限环境中的特定端口:
--ftp="passive-port-range=30000-40000"
可以通过以下方式更改默认端口8022
--sftp="address=:3022"
与SFTP
服务器不同, FTP
服务器默认是不安全的。要在 TLS 模式下运行,您需要通过以下方式提供证书
--ftp="tls-private-key=path/to/private.key" --ftp="tls-public-cert=path/to/public.crt"
注意:如果 MinIO 分布式设置已配置为在 TLS 下运行, FTP
将自动使用服务器证书链中的相关证书,这主要是为了增加设置的简单性。但是,如果您希望通过FTP
服务器的不同域终止 TLS 证书,您可以选择上述命令行选项。
我们之前注意到 Append 和 Rename 不是支持功能。
鉴于FTP
的简单性,版本控制也存在问题。 FTP
不支持版本控制,并且FTP
客户端不知道它实际上是什么 - 但存储桶通常会有一个对象的多个版本。结果,具有新名称的同一对象将成为一个新对象。具有相同名称的相同对象将是一个新版本 - 但FTP
没有这个概念,它需要通过 S3 进行管理。它可以移动数据,但它不具备 S3 那样的复杂性来理解某些概念。
最后,如前所述, FTP
上没有可用的管理功能。
FTP/SFTP
是寿命特别长的协议,并且在 50 多岁的时间里仍在不断寻找新的用例和实用性。我们使使用FTP
将数据传入 MinIO 并将其取出变得简单。
更重要的是, FTP/SFTP
功能将与您现有的 MinIO 部署无缝协作 - 只需升级并为您的 MinIO 存储桶提供之前必须转换为 MinIO 的所有数据。
我们这里有一个关于这个主题的精彩视频。我们的 GitHub 页面在这里。我们可以为这里的社区提供支持,显然,如果您是商业客户,您可以在 SUBNET 上找到我们 24/7/365。
也发布在这里。