中文文档

文件传输协议(FTP/SFTP)

在 MinIO 版本加入: RELEASE.2023-04-20T17-56-55Z

概述

MinIO Server 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 Tenants only support SFTP

由 Operator 部署的 MinIO 租户仅支持 SFTP。 有关详细信息,请参阅 File Transfer Protocol for Tenants

支持的命令

当启用时,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. 开启 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" \
    ...
    

    请参阅 minio server --ftpminio server --sftp,以了解如何使用这些标志来启动 MinIO 服务。 要通过 TLS(FTPS)连接到 FTP 端口,除非使用 MinIO 默认的 TLS 密钥,否则需要传递 tls-private-keytls-public-cert 键及其值。

    该命令的输出应该返回一个类似于以下的响应:

    MinIO FTP 服务器正在监听端口 :8021。
    MinIO SFTP 服务器正在监听端口 :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/
...

启动 MinIO 并启用 FTP over TLS (FTPS)

以下示例启动了带有 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"    \
...

备注

为了使用 MinIO 的默认 TLS 密钥进行 FTPS,请省略 tls-private-keytls-public-cert 参数。 有关更多信息,请参阅 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

使用 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 指定用于生成此密钥的证书颁发机构公开密钥的路径. 指定的公钥必须有一个包含该用户的 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>

程序

下面的程序会生成两个键值对,对其中一个键值对进行签名,然后使用生成的签名密钥登录 SFTP 服务器。

  1. 为 MinIO 服务器生成键值对

    ssh-keygen -f ./ca_user_key
    
  2. 为用户生成键值对

    ssh-keygen -f ./minioadmin
    

    minioadmin 替换为通过 SFTP 访问 MinIO 服务器的用户。

  3. 用 MinIO 服务器键值对密钥签署用户键值对密钥

    ssh-keygen -s ca_user_key -I minioadmin -n minioadmin -V +30d -z 1 minioadmin.pub
    

    minioadmin.pub 密钥移至与 minioadmin 键值对相同的目录,如 ~/.ssh/meaningful-directory

  4. 通过生成的公钥启动或重启 MinIO 服务器

    minio server --sftp="address=:8022" --sftp="ssh-private-key=/path/to/ca_user_key" --sftp="trusted-user-ca-key=/path/to/ca_user_key.pub"
    
  5. 通过 sftp 连接 MinIO 服务器

    sftp -i ./minioadmin -oPort=8022 minioadmin@localhost
    

要求使用服务帐户或 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 服务器的地址.

Join Slack 商业支持购买咨询