ZMUKE DevOps / hosts/zmuke-n-00001/SECURITY.md

zmuke-n-00001 安全基线(业务运维视角)

核实日期:2026-08-27。本文只覆盖业务运维单元的暴露面与密钥落点。 节点级加固(SSH、ufw、fail2ban、OpenVPN)属 fleet 模块,见 fleet 仓。

暴露面原则

  1. 业务服务端口只绑 loopback
  2. 公网访问只经 Cloudflare Tunnel,不开放主机入站端口。
  3. 文档站发布到 Cloudflare Pages,全站在 Cloudflare Access 之后, 仅 owner 邮箱 One-time PIN 可通过,匿名默认拒绝。

端口实测

单元绑定评价
zmuke-gitea web127.0.0.1:3002合规,仅 loopback
zmuke-gitea ssh127.0.0.1:2223合规,仅 loopback
zmuke-pages127.0.0.1:3080合规,仅 loopback
zmuke-cloudflared无监听(host 网络,仅出站)合规
evebox192.168.5.200:5636,--no-tls局域网明文可达,依赖内网边界与防火墙
slaunchx-media-mysql0.0.0.0:3307绑所有接口,跨组织负载,待处置
slaunchx-media-redis0.0.0.0:6380绑所有接口,跨组织负载,待处置

后三项是当前主机上最宽的暴露面,已登记为待办,处置需 owner 决策。 本仓未对实机做任何变更。

Gitea 实例设置(2026-08-27 实测,非密钥)

设置含义
ENABLE_PUSH_CREATE_ORGfalse组织仓库不支持 push-to-create,必须先在 Web 建仓
ENABLE_PUSH_CREATE_USERfalse个人仓库同样不支持 push-to-create
DEFAULT_PRIVATEprivate新建仓库默认私有
DISABLE_REGISTRATIONtrue关闭自助注册

Gitea 的 ROOT_URLhttp://127.0.0.1:3002/,DOMAIN / SSH_DOMAIN 均为 127.0.0.1,即实例设计上就是 loopback-only,外部路径由隧道承担。

密钥落点

仓库内不存放任何密钥真值。 各单元的真值位置:

密钥位置说明
Cloudflare Tunnel token主机 ~adminb84002/devops/docker/cloudflared/.env应为 0600(权限待复核)
Gitea SECRET_KEY / INTERNAL_TOKEN / JWT/opt/zmuke-gitea/data/gitea/conf/app.iniGitea 自生成,不读取、不外传
Actions runner 注册 token/opt/act-runner/(0750,gitea-runner 属主)adminb84002 不可读
Pages 部署凭据Gitea Actions secrets:CLOUDFLARE_ACCOUNT_IDCLOUDFLARE_API_TOKEN只存在 Gitea 内部
Grafana admin 口令、GITEA_TOKEN(logging)主机 ~adminb84002/devops/docker/logging/.env栈未运行
其它第三方凭据vault --business zmuke run <profile> -- <cmd>服务与 agent 不接触 vault 内容

仓库只提供 *.env.example(仅键名)。真实 Cloudflare Account / Zone / Tunnel / Access ID 一律不写入发布站文档;deploy/ README 用 <TUNNEL_ID> 之类占位符。

已发现的安全问题(未处置,待 owner 决策)

  1. Cloudflare Tunnel token 出现在容器命令行zmuke-cloudflareddocker run ... --token <值> 启动,docker inspect.Config.Cmd 中可读到 完整 token,凡能访问 Docker 守护进程者均可读取。 建议:改为经 TUNNEL_TOKEN 环境变量或 credentials 文件注入,并轮换该 token
  2. 运行中的业务容器均非 compose 创建zmuke-giteazmuke-pageszmuke-cloudflaredevebox 都缺 com.docker.compose.* label,运行态与磁盘上 的 compose 未收敛,存在"文件改了但实机没变"的静默漂移风险。
  3. 浮动镜像标签cloudflare/cloudflared:latestnginx:alpinejasonish/evebox:latest 均未按 digest 固定,无确定回滚点。 zmuke-gitea 已按 digest 固定,是正面样例。
  4. 跨组织负载端口绑 0.0.0.0slaunchx-media 的 MySQL / Redis 对所有接口 监听,且跑在 ZMUKE 主机上,同时违反端口收敛与组织边界两条原则。
  5. Hermes 试装残留~adminb84002/devops/docker/hermes/ 下有 root 属主的 data/secrets/(含 .netrc 挂载路径声明),无容器运行。 secrets/.netrc 可能含凭据,应由 owner 核查后清理。
  6. EveBox 局域网明文--no-tls 且绑 192.168.5.200:5636,无入库的认证配置。