RustFS 重要版本变更,让容器化部署更安全

随着 RustFS 的持续走热,越来越多的用户开始关注并使用 RustFS,而且在整个过程中提出了很多关键问题。其中在 Start the container using a non-root user #804
中,whg517 用户提出,从安全最佳实践角度出发,RustFS 在容器化运行状态下(包括 docker 部署和 k8s 部署),RustFS 实例应该以非 root 用户运行,并且添加更多安全加固措施。

截屏2025-11-13 13.03.15.png

以非 root 运行容器是业界的安全最佳实践共识,因此 RustFS 修改了 Dockerfile,具体包括:

  • 创建 UID 和 GID 均为 1000 的用户 rustfs
  • rustfs 进程以 rustfs 用户启动;
  • 针对 k8s 部署,还增强了 securityContext 部分内容;

上述变更在 1.0.0-alpha.68 版本正式生效。在版本发布后,我们在 GitHub Issue 上看到有用户从 1.0.0-alpha.67 升级到 1.0.0-alpha.68 出现了 permission denied 错误:

截屏2025-11-13 13.10.51.png

为此,受影响用户可遵循下面的方法进行问题修复并升级。

注意:此变更仅影响容器化运行用户,对于通过脚本或者二进制安装的用户,不受此影响。而且仅影响 1.0.0-alpha.67 及之前版本的用户,后续版本不受影响。

Kubernetes 用户

对于 Kubernetes 用户,此次变更不受影响,因为在 Helm chart 编写之初就增加了 securityContext 部分内容,而且在 pod 中通过 initContainer 来对 /datalogs 目录的权限进行了修改(USER 和 GROUP 均为 1000),此次升级变更不会导致 Kubernetes 用户出现 permission denied 错误。

Docker 用户

对于使用 docker run 或者使用 docker compose 的用户来说,修复该错误的核心原理就是将 RustFS 使用的 /data/logs 两个目录的用户和群组修改为 1000 即可。过程如下:

  • 回滚至 1.0.0-alpha.67 版本

用户可以先会滚至 1.0.0-alpha.67 版本,然后进入到容器中,将 /data/logs 目录的用户和群组从 root 更改至 1000

docker exec -it rustfs sh
chown -R 1000:1000 /data/
chown -R 1000:1000 /logs/
ls -ld /data/
drwxr-x--- 5 1000 1000 4096 Nov 12 04:06 /data/
ls -ld /logs/
drwxr-x--- 5 1000 1000 4096 Nov 12 04:06 /logs/
  • 升级至 1.0.0-alpha.68

直接升级到 1.0.0-alpha.68(或 latest,当前 latest 就是 68 版本)即可。升级成功之后可查看 rustfs 日志并查看 rustfs 进程运行的用户:

docker exec -it rustfs sh
/ $ id
uid=1000(rustfs) gid=1000(rustfs) groups=1000(rustfs)
/ $ whoami
rustfs
/ $ ps
PID   USER     TIME  COMMAND
    1 rustfs    0:15 /usr/bin/rustfs /data
   36 rustfs    0:00 sh
 8057 rustfs    0:00 ps
/ $ ls -ld /data/
drwxr-x--- 5 rustfs rustfs 4096 Nov 12 04:06 /data/
/ $ ls -ld /logs/
drwxr-xr-x 2 rustfs rustfs 4096 Nov 13 04:07 /logs/

RustFS 的安装

目前 RustFS 支持多种安装方式

  • 二进制下载安装或脚本安全
  • Docker 安装
  • Helm Chart 安装

安装方式和步骤可查看 RustFS 官网

如果您想使用 docker 安装,可参考如下 docker-compose.yml

services:
  rustfs:
    image: rustfs/rustfs:1.0.0-alpha.68
    container_name: rustfs
    hostname: rustfs
    environment:
      # Use service names and correct disk indexing (1..4 to match mounted paths)
      - RUSTFS_VOLUMES=/data
      - RUSTFS_ADDRESS=0.0.0.0:9000
      - RUSTFS_CONSOLE_ENABLE=true
      - RUSTFS_CONSOLE_ADDRESS=0.0.0.0:9001
      - RUSTFS_ACCESS_KEY=rustfsadmin
      - RUSTFS_SECRET_KEY=rustfsadmin
      - RUSTFS_CMD=rustfs
    ports:
      - "9000:9000"  # API endpoint
      - "9001:9001"  # Console
    volumes:
      - data:/data
      - logs:/logs
    healthcheck:
      test:
        [
        "CMD",
        "sh", "-c",
        "curl -f http://localhost:9000/health && curl -f http://localhost:9001/health"
        ]
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 30s
    networks:
      - rustfs

networks:
  rustfs:
    driver: bridge
    name: rustfs

volumes:
  data:
    driver: local
  logs:
    driver: local

欢迎大家使用 RustFS 作为对象存储系统,目前 RustFS 还在持续研发迭代中,如果您有任何问题,可以通过 GitHub:https://github.com/rustfs/rustfs 提 Issue 或 PR。

使用 Docker 部署 RustFS 的详细步骤如下: #### 准备工作 创建数据和日志目录,并赋予相应的权限: ```bash mkdir -p /data/rustfs/{data,logs} && chmod -R 777 /data/rustfs ``` #### 启动容器 使用 `docker run` 命令启动 RustFS 容器,以下是一个示例命令: ```bash docker run -d \ --name rustfs \ --restart unless-stopped \ -p 9000:9000 \ -v /data/rustfs/data:/data \ -v /data/rustfs/logs:/logs \ -e RUSTFS_ROOT_PASSWORD=your_secure_password \ rustfs/rustfs:latest ``` 在上述命令中: - `-d`:表示以守护进程模式运行容器。 - `--name rustfs`:为容器指定名称为 `rustfs`。 - `--restart unless-stopped`:设置容器的重启策略,除非手动停止,否则容器会在退出时自动重启。 - `-p 9000:9000`:将容器内的 9000 端口映射到宿主机的 9000 端口。 - `-v /data/rustfs/data:/data`:将宿主机的 `/data/rustfs/data` 目录挂载到容器内的 `/data` 目录,用于存储数据。 - `-v /data/rustfs/logs:/logs`:将宿主机的 `/data/rustfs/logs` 目录挂载到容器内的 `/logs` 目录,用于存储日志。 - `-e RUSTFS_ROOT_PASSWORD=your_secure_password`:设置 RustFS 的管理员密码。 - `rustfs/rustfs:latest`:指定要使用的 RustFS 镜像及其版本。 #### 其他参数配置 如果需要多的参数配置,可以参考以下示例,添加多的环境变量和命令行参数: ```bash docker run -d \ --name rustfs_container \ -p 9000:9000 \ -p 9001:9001 \ -v /mnt/rustfs/data:/data \ -e RUSTFS_ACCESS_KEY=rustfsadmin \ -e RUSTFS_SECRET_KEY=rustfsadmin \ -e RUSTFS_CONSOLE_ENABLE=true \ -e RUSTFS_SERVER_DOMAINS=example.com \ swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/rustfs/rustfs:latest \ --address :9000 \ --console-enable \ --server-domains example.com \ --access-key rustfsadmin \ --secret-key rustfsadmin \ /data ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值