更多 MinIO 数据选项 - MinIO FTP/SFTP 服务器

很难想象文件传输协议 (FTP
) 已经存在了这么久。它最初由麻省理工学院的学生 Abhay Bhushan 于 1971 年开发,最初用于在 ARPANET 上的计算机之间传输文件。不用说,它已经发展 - 增加了身份验证、加密和压缩功能。它仍然是互联网上传输文件的广泛使用的协议,特别是在需要快速可靠地传输大型文件或大量文件的情况下。
虽然 S3 API 从根本上来说更优越,但它缺乏FTP/SFTP
的简单性和在高度受限的环境中运行的能力。因此,MinIO 已在 MinIO 服务器中添加了对FTP
和SFTP
的支持。通过此新功能,用户(或应用程序)认为他们正在与FTP
服务器通信,而实际上他们正在与 MinIO 通信。优势应该很明显 - 将数据移到 MinIO 上变得无缝,并且从应用程序/用户的角度来看,一切都基本相同 - 从策略、安全性等方面。
目前支持的FTP/SFTP
操作如下
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 策略控制。
- 允许所有用户的身份验证和访问
- 内置 IDP 用户及其相应的服务帐户
- LDAP/AD 用户及其相应的服务帐户
- OpenID/OIDC 服务帐户
- 在版本化存储桶中,
FTP/SFTP
仅对最新对象进行操作。如果您需要检索旧版本,则必须使用S3 API 客户端
(例如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 的说明
如果服务器上启用了证书,则可以使用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>
高级选项
更改默认 FTP 端口
默认端口8021
可以通过以下方式更改
--ftp="address=:3021"
更改 FTP 被动端口范围
默认情况下,FTP
请求操作系统自动提供一个空闲端口,但是您可能希望在某些受限环境中将其限制为特定端口,方法是通过
--ftp="passive-port-range=30000-40000"
更改默认 SFTP 端口
默认端口8022
可以通过以下方式更改
--sftp="address=:3022"
TLS (FTP)
与SFTP
服务器不同,FTP
服务器默认情况下是不安全的。要在 TLS 模式下运行,您需要通过以下方式提供证书
--ftp="tls-private-key=path/to/private.key" --ftp="tls-public-cert=path/to/public.crt"
注意:如果 MinIO 分布式设置已配置为在 TLS 下运行,则FTP
将自动使用服务器证书链中的相关证书,这主要是为了简化设置。但是,如果您希望通过不同的域为您的FTP
服务器终止 TLS 证书,则可以选择上述命令行选项。
限制
我们之前注意到追加和重命名是不支持的功能。
鉴于FTP
的简单性 - 版本控制也存在问题。FTP
不支持版本控制,并且FTP
客户端不知道它实际上是什么 - 但存储桶通常会具有对象的多个版本。因此,具有新名称的相同对象将是新对象。具有相同名称的相同对象将是新版本 - 但FTP
没有这个概念,它需要通过 S3 进行管理。它可以移动数据,但它没有 S3 那样理解某些概念的复杂性。
最后,如前所述,FTP
上没有可用的管理功能。
总结
FTP/SFTP
是非常古老的协议,它们继续在 50 多年的时间里找到新的用例和实用程序。我们使使用FTP
将数据导入 MinIO 和导出数据变得简单。
更重要的是,FTP/SFTP
功能将与您现有的 MinIO 部署无缝协作 - 只需升级并继续使用,为您的 MinIO 存储桶提供以前必须转换为 MinIO 的所有数据。
我们有一个关于此主题的精彩视频此处。我们的 GitHub 页面此处。我们随时准备支持社区此处,并且显然,如果您是商业客户,您可以在 SUBNET 上全天候 24/7/365 找到我们。