文档

文件传输协议 (FTP/SFTP)

从 Operator 5.0.7 和 MinIO Server RELEASE.2023-04-20T17-56-55Z 开始,您可以使用 SSH 文件传输协议 (SFTP) 与 MinIO Operator Tenant 部署上的对象进行交互。

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

启用 SFTP 不会影响其他 MinIO 功能。

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

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

本页全文使用缩写 FTP,但您可以使用下面描述的任何受支持的 FTP 协议。

支持的协议

MinIO Operator 仅支持配置 SSH 文件传输协议 (SFTP)。

启用后,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 支持以下 SFTP 操作:

  • get

  • put

  • ls

  • mkdir

  • rmdir

  • delete

MinIO 不支持 appendrename 操作。

注意事项

版本控制

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

  • 对于读操作,MinIO 仅向 SFTP 客户端返回所请求对象的最新版本。

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

身份验证和访问

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

STS 凭据不能通过 SFTP 访问存储桶或对象。

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

SFTP 协议不需要任何 admin:* 权限。您不能使用 SFTP 执行其他 MinIO 管理操作。

先决条件

  • MinIO Operator v5.0.7 或更高版本。

  • 为服务器启用一个 SFTP 端口 (8022)。

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

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

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

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

步骤

  1. 为所需的 Tenant 启用 SFTP

    使用以下 Kubectl 命令编辑 Tenant 的 YAML 配置:

    kubectl edit tenants/my-tenant -n my-tenant-ns
    

    my-tenantmy-tenant-ns 替换为所需的 Tenant 和命名空间。

    features: 部分,将 enableSFTP 的值设置为 true

    spec:
       configuration:
          name: my-tenant-env-configuration
       credsSecret:
          name: my-tenant-secret
       exposeServices:
          console: true
          minio: true
       features:
          enableSFTP: true
    

    Kubectl 会重启 MinIO 以应用更改。

    您也可以在您的 Helm chartKustomize 配置 中设置 enableSFTP,以便为新创建的 Tenant 启用 SFTP。

  2. 如果需要,根据您的本地策略为 SFTP 端口配置 Ingress。

  3. 验证配置

    以下 kubectl get 命令使用 yq 来显示 enableSFTP 的值,以指示 SFTP 是否已启用:

    kubectl get tenants/my-tenant -n my-tenant-ns -o yaml | yq '.spec.features'
    

    my-tenantmy-tenant-ns 替换为所需的 Tenant 和命名空间。

    如果 SFTP 已启用,输出类似如下:

    enableSFTP: true
    
  4. 使用您偏好的 SFTP 客户端连接到 MinIO 部署。您必须以一个策略允许访问所需存储桶和用户的用户身份进行连接。

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

    以下示例连接到转发到本地主机的 MinIO Tenant SFTP 服务器,并列出名为 runner 的存储桶的内容。

    > sftp -P 8022 minio@localhost
    minio@localhost's password:
    Connected to localhost.
    sftp> ls runner/
    chunkdocs  testdir
    

以下 kubectl get 命令使用 yq 来显示 enableSFTP 的值,以指示 SFTP 是否已启用:

kubectl get tenants/my-tenant -n my-tenant-ns -o yaml | yq '.spec.features'

my-tenantmy-tenant-ns 替换为所需的 Tenant 和命名空间。

如果 SFTP 已启用,输出类似如下:

enableSFTP: true
  1. 启动 MinIO 时启用一个 FTP 和/或 SFTP 端口。

    以下示例启动启用了 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 文档

    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 服务的详细信息,请参阅 minio server --ftpminio server --sftp。要通过 TLS (FTPS) 连接到 FTP 端口,除非使用 MinIO 默认的 TLS 密钥,否则还需传递 tls-private-keytls-public-cert 的密钥和值。

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

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

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

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

  3. 连接到 MinIO

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

    > sftp -P 8022 minio@localhost
    minio@localhost's password:
    Connected to localhost.
    sftp> ls runner/
    chunkdocs  testdir
    

    以下示例使用 Linux 的 FTP CLI 客户端,通过 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/
    ...
    
  4. 下载一个对象

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

    > 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
    sftp>
    

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

    > 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

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

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

此类身份验证需要以下内容:

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

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

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

密钥必须包含一个主体列表 (principals list),列出可以使用该密钥进行身份验证的用户

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

  • -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 服务器的地址。

English 中文