文档

文件传输协议 (FTP/SFTP)

MinIO 版本新增功能: RELEASE.2023-04-20T17-56-55Z

概述

MinIO 服务器 RELEASE.2023-04-20T17-56-55Z 开始,您可以使用文件传输协议 (FTP) 或 SSH 文件传输协议 (SFTP) 与 MinIO 部署上的对象进行交互。

您必须在启动服务器时专门启用 FTP 或 SFTP。启用任何一种服务器类型都不会影响其他 MinIO 功能。

本页在整个过程中使用 FTP 缩写,但您可以使用下面描述的任何受支持的 FTP 协议。

支持的协议

启用后,MinIO 支持通过以下协议进行 FTP 访问

  • SSH 文件传输协议 (SFTP)

    SFTP 由互联网工程任务组 (IETF) 定义为 SSH 2.0 的扩展。SFTP 允许通过 SSH 进行文件传输,以用于 传输层安全 (TLS) 和虚拟专用网络 (VPN) 应用程序。

    您的 FTP 客户端必须支持 SFTP。

  • 通过 SSL/TLS 的文件传输协议 (FTPS)

    FTPS 允许使用标准 FTP 通信通道上的 TLS 证书进行加密的 FTP 通信。FTPS 不应与 SFTP 混淆,因为 FTPS 不会通过安全外壳 (SSH) 进行通信。

    您的 FTP 客户端必须支持 FTPS。

  • 文件传输协议 (FTP)

    未加密的文件传输。

    MinIO 建议使用未加密的 FTP 进行文件传输。

MinIO Operator 租户只支持 SFTP

使用 Operator 部署的 MinIO 租户只支持 SFTP。有关详细信息,请参阅 租户的文件传输协议

支持的命令

启用后,MinIO 支持以下 FTP 操作

  • get

  • put

  • ls

  • mkdir

  • rmdir

  • delete

MinIO 不支持 appendrename 操作。

注意事项

版本控制

SFTP 客户端只能操作对象的 最新版本。具体来说

  • 对于读取操作,MinIO 只将请求的对象的最新版本返回给 FTP 客户端。

  • 对于写入操作,MinIO 应用正常的版本控制行为,并在指定的命名空间创建新的对象版本。 deletermdir 操作创建 DeleteMarker 对象。

身份验证和访问

FTP 访问需要与任何其他 S3 客户端相同的身份验证。MinIO 支持以下身份验证提供程序

STS 凭据无法通过 FTP 访问桶或对象。

经过身份验证的用户可以根据分配给用户或父用户帐户的 策略 访问桶和对象。

FTP 协议不需要任何 admin:* 权限。 FTP 协议不支持任何 MinIO 管理操作。

先决条件

  • MinIO RELEASE.2023-04-20T17-56-55Z 或更高版本。

  • 为服务器启用 FTP 或 SFTP 端口。

  • 一个用于 FTP 命令的端口和一个端口范围,允许 FTP 服务器请求用于数据传输。

步骤

  1. 启用 FTP 和/或 SFTP 端口启动 MinIO。

    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" \
    ...
    

    请参阅 minio server --ftpminio server --sftp,了解有关使用这些标志启动 MinIO 服务的详细信息。 要通过 TLS(FTPS)连接到 FTP 端口,请传递 tls-private-keytls-public-cert 键和值,除非使用 MinIO 默认 TLS 键。

    命令的输出应返回类似以下内容的响应

    MinIO FTP Server listening on :8021
    MinIO SFTP Server listening on :8022
    
  2. 使用您喜欢的 FTP 客户端连接到 MinIO 部署。 您必须以允许访问所需存储桶和对象的用户的身份连接 策略

    连接到 MinIO 部署的具体细节取决于您的 FTP 客户端。 请参阅您的客户端的文档。

    要通过 TLS 或 SSH 连接,您必须使用支持所需协议的客户端。

示例

以下示例使用 Linux 系统上的 FTP CLI 客户端

使用 FTP 连接到 MinIO

以下示例使用 minio 凭据连接到服务器,以列出名为 runner 的存储桶中的内容

> ftp localhost -P 8021
Connected to localhost.
220 Welcome to MinIO FTP Server
Name (localhost:user): minio
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 over TLS(FTPS)启动 MinIO

以下示例启用 FTPS 启动 MinIO。

minio server http://server{1...4}/disk{1...4} \
--ftp="address=:8021"                         \
--ftp="passive-port-range=30000-40000"        \
--ftp="tls-private-key=path/to/private.key"   \
--ftp="tls-public-cert=path/to/public.crt"    \
...

注意

省略 tls-private-keytls-public-cert 以使用 MinIO 默认 TLS 键进行 FTPS。 有关更多信息,请参阅 MinIO 上的 TLS 文档

通过 FTP 下载对象

此示例列出存储桶中的项目,然后下载存储桶的内容。

> ftp localhost -P 8021
Connected to localhost.
220 Welcome to MinIO FTP Server
Name (localhost:user): minio
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/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 连接到 MinIO

以下示例连接到 SFTP 服务器,列出名为 runner 的存储桶的内容,并下载一个对象。

> sftp -P 8022 minio@localhost
minio@localhost's password:
Connected to localhost.
sftp> ls runner/
chunkdocs  testdir
sftp> get runner/chunkdocs/metadata metadata
Fetching /runner/chunkdocs/metadata to metadata
metadata                               100%  226    16.6KB/s   00:00

使用证书密钥文件连接到 MinIO 使用 SFTP

RELEASE.2024-05-07T06-41-25Z 版本中的新增功能。

MinIO 支持 SFTP 上基于证书的双向 TLS(mTLS)身份验证,其中服务器和客户端都验证彼此的真实性。

这种类型的身份验证需要以下内容

  1. 受信任证书颁发机构的公钥文件

  2. 由受信任证书颁发机构签发并签名的 MinIO 服务器的公钥文件

  3. 由受信任证书颁发机构签发并签名的用户的公钥文件,用于通过 SFTP 连接的客户端,并位于用户的 .ssh 文件夹中(或操作系统等效文件夹)

密钥必须包含一个 主体列表,其中包含可以使用该密钥进行身份验证的用户。

ssh-keygen -s ~/.ssh/ca_user_key -I miniouser -n miniouser -V +1h -z 1 miniouser1.pub
  • -s 指定用于生成此密钥的证书颁发机构公钥的路径。 指定的公钥必须具有包含此用户的 principals 列表。

  • -I 指定公钥的密钥标识。

  • -n 创建此密钥有效的 user principals 列表。 您必须包含此密钥有效的用户,并且用户必须与 MinIO 中的用户名匹配。

  • -V 限制生成的密钥有效的持续时间。 在此示例中,密钥有效期为一小时。 根据您的需求调整持续时间。

  • -z 向密钥添加序列号,以区分由同一证书颁发机构公钥签名的其他密钥。

MinIO 需要指定用于签署 SFTP 访问证书的证书颁发机构。 启动或重新启动 MinIO 服务器,并使用 --sftp="trusted-user-ca-key=PATH" 标志指定受信任证书颁发机构公钥的路径。

minio server {path-to-server} --sftp="trusted-user-ca-key=/path/to/.ssh/ca_user_key.pub" {...other flags}

使用 SFTP 连接到 MinIO 服务器时,客户端会验证 MinIO 服务器的证书。 然后,客户端将其自己的证书传递给 MinIO 服务器。 MinIO 服务器通过将其值与服务器启动时提供的证书颁发机构的已知公钥进行比较来验证上面创建的密钥。

MinIO 服务器验证客户端证书后,用户可以通过 SFTP 连接到 MinIO 服务器。

sftp -P <SFTP port> <server IP>

要求使用服务帐户或 LDAP 进行身份验证

要强制使用 LDAP 或服务帐户凭据对 SFTP 进行身份验证,请在用户名后面附加一个后缀。 有效的后缀是 =ldap=svc

> sftp -P 8022 my-ldap-user=ldap@[minio@localhost]:/bucket
> sftp -P 8022 my-ldap-user=svc@[minio@localhost]:/bucket
  • my-ldap-user 替换为要使用的用户名。

  • [minio@localhost] 替换为 MinIO 服务器的地址。