mcli 20260804 发布

禁用自更新、修复 SUBNET 调试日志泄密、容器改用分支源码构建、打包体系迁移到 nFPM 并启用 RPM 签名。

发布日期: 2026-08-04 · 版本: RELEASE.2026-08-04T00-00-00Z

这是 pgsty/mc 社区分支自 20260417 以来的首次发布。本次更新修复了一处调试日志泄密问题,彻底切断了客户端与上游发布渠道之间的所有连接,将容器与软件包完全改由本分支自建,并把打包体系从 MinIO 的 pkger 迁移到标准 nFPM,同时首次为 RPM 包提供 GPG 签名。

上游 minio/mc 仓库已于 2026 年 7 月归档。其最后一个提交 77f82e18 正是本分支的基线,而上游从未发布过包含该提交的版本 —— 因此本次构建比历史上任何官方 mc 二进制都要新。

主要变更

  • 禁用自更新,切断上游发布渠道:移除 minio/selfupdateaead.dev/minisign 依赖及全部二进制替换逻辑,删除更新通知器与 FIPS/非 FIPS 更新分支。update 命令保留为兼容壳,运行时辅助函数(Docker / DCOS / Kubernetes / 源码构建检测)迁移至独立的 cmd/runtime-info.go。此前该客户端会在每次执行时静默访问上游发布源并提示升级,现已不再有任何出站发布探测。
  • 容器与制品全部本地化:默认镜像改为从检出的分支源码构建,hotfix 二进制从本地构建上下文拷贝,不再下载任何上游预编译产物。移除上游发布用的 Dockerfile.releaseDockerfile.release.old_cpudocker-buildx.sh,并禁用已失效的 MinIO hotfix 上传目标。
  • 打包体系迁移至 nFPM:从 MinIO 的 pkger 迁移到标准 nFPM。产物结构与安装路径保持完全一致(/usr/local/bin/mcli、包名 mcli、版本方案 YYYYMMDDHHMMSS.0.0),但供应商信息改为 PGSTY,许可证改用 SPDX 标识 AGPL-3.0-or-later,Debian Section 由空值改为 utils
  • RPM 包首次提供 GPG 签名:RPM 由维护者主密钥在本地离线签名(密钥指纹 9592A7BC7A682E7333376E09E7935D8DB9BD8B20),签名前校验全部包元数据,签名后复验并重新生成校验和。DEB 与 APK 不做包级签名,其信任锚位于软件仓库层。
  • 构建溯源加固:此前所有已发布二进制都被 Go 工具链标记为「来自被修改的工作树」(vcs.modified=true),导致产物无法与其 Git 标签对应。本次修复该问题,并在发布与测试流水线中加入强制校验,确保每个二进制都能追溯到确切的提交。

安全修复

  • SUBNET 调试日志凭据脱敏:启用 --debug 时,SUBNET 相关的 HTTP 请求会打印完整报文。此前 api-key / api_key 查询参数、认证头以及响应体均以明文进入日志,而 SUBNET 的认证与注册端点会在响应中返回 API Key、License 与 Token。本次修复对两种参数拼写、重复参数值统一脱敏,屏蔽敏感响应头,并将 SUBNET 响应体整体排除在调试转储之外。该泄漏继承自上游,存在于包括上游 mc 在内的所有历史版本中:如果你曾对外分享过 SUBNET 相关命令(mcli license ... / mcli support ...)的 --debug 输出,请将其中的 API Key 与 License 视为已泄露并及时轮换。
  • 调试脱敏与调用方状态隔离:调试追踪改为转储请求与响应的副本,确保脱敏动作不会污染调用方持有的对象;覆盖零长度、定长与未知长度三种响应体形态,且不影响调用方正常读取响应内容。

依赖更新

本周期的依赖工作属于安全维护而非例行升级:除 term / mod / sync / tools 四项例行刷新外,以下每一项升级都至少关闭一个 Go 漏洞数据库中已发布的安全公告;govulncheck 对本次发布的代码报告零个可达的已知漏洞minio/mcminio-gomadmin-gominio/pkg 四个包本身从未有过任何安全公告。

  • Go 构建基线由 1.26.2 升级至 1.26.5(截至发布时 1.26 线最新版),纳入 1.26.3–1.26.5 各批安全修复,包括 GO-2026-4970os 包符号链接根逃逸)与 GO-2026-5856crypto/tls ECH 隐私泄漏)—— 对一个通过 TLS 下载对象并写入本地文件的 S3 客户端而言最直接相关的两项。
  • github.com/klauspost/compressv1.18.5 升级至 v1.18.7(关闭 GO-2026-5841)。
  • github.com/prometheus/prometheusv0.310.0 升级至 v0.311.3(关闭 GO-2026-5264、GO-2026-5381、GO-2026-5710)。
  • google.golang.org/grpcv1.79.3 升级至 v1.82.1(关闭 GO-2026-6061),同步刷新 genproto 系列。
  • golang.org/x/* 系列整体刷新:crypto v0.49.0v0.53.0(GO-2026-5005…5033 共 14 项公告)、net v0.52.0v0.56.0(GO-2026-5025…5030 及 GO-2026-5942)、sys v0.42.0v0.46.0(GO-2026-5024)、text v0.35.0v0.39.0(GO-2026-5970),termmodsynctools 同步升级。
  • 移除 aead.dev/minisigngithub.com/minio/selfupdate,并同步更新第三方致谢清单。

工程与交付

  • 集成测试依赖钉死:CI 不再从上游可变地址下载 MinIO 服务端,改用带 SHA-256 校验的 pgsty/minio 版本化发布归档,Go 版本钉在 1.26.5
  • 发布流水线校验:新增打包验证工作流,逐字节比对三种包格式内的二进制与构建产物是否一致,并校验包名、校验和、架构字段与全部元数据。RPM 元数据的期望值以签名脚本为唯一事实源,避免配置漂移导致发布中途签名失败。
  • CI 供应链加固:全部 GitHub Actions 钉到 commit SHA 并接入 dependabot,工作流权限收敛为只读,移除指向上游组织项目板的失效工作流。
  • 文档更新:README 中英文版本明确本分支的分发渠道与自更新策略,移除会导致误装上游 mc 的安装指引。
  • 9603ee3:fix: redact SUBNET secrets in HTTP debug logs
  • f6ae2b0:fix: disable self-update in Pigsty builds
  • c05a6e4:build: update Go deps and toolchain to 1.26.5
  • 1f105aa:build: use local fork artifacts for containers
  • 1182da5:ci: pin fork integration test dependencies
  • 9ee207f:docs: clarify Pigsty fork distribution channels
  • 0686cd8:fix: isolate SUBNET debug redaction
  • ad10a2a:build: complete local Docker context isolation
  • 5f54221:docs: update mc README and cn version
  • 02c0305:build: migrate release packaging to nFPM
  • 4c4dcc4:build: harden release provenance and package metadata