opsctl06

安全模型

默认只读、明确授权、序列化执行和可恢复证据。

内容经过人工双语校对

opsctl 的安全目标不是“自动完成更多操作”,而是让每一步都拥有明确的目标、边界、恢复路径和责任人。

默认只读

大多数检查命令只读取 registry、state 和系统观察结果。具备写入能力的子命令通常要求显式 --execute,并在执行前输出相同参数的计划。

opsctl backup plan <service-id> --dry-run --json
opsctl backup run <service-id> --json
# 只有经过审查后才使用 --execute

三种决策

状态含义下一步
passed当前事实满足策略可以继续下一个受控阶段
needs_approval风险可解释,但需要具体人工授权创建作用域匹配的审批请求
blocked缺少证据、存在冲突或操作被禁止修复前置条件,不应绕过

审批不是万能令牌

有效审批必须绑定计划、风险作用域、审批人和有效期。泛化的“全部同意”不能满足执行门禁。执行阶段会重新计算当前 readiness,避免使用过期 preflight 结论。

全局串行锁

所有会修改 opsctl 状态或备份历史的操作共享一个全局 advisory lock:

  • 交互命令默认快速失败,防止操作员误以为命令正在排队。
  • 经过审查的 systemd 定时任务可以使用有限等待。
  • 等待有硬上限,锁文件不会被删除或替换。

破坏性边界

永久边界

清理工作流可以收集证据、生成请求并记录人工交接,但不能批准自己,也不能删除 Docker 卷。MCP 始终只读。

凭据与日志

  • 凭据文件必须限制权限;生产推荐 root:opsctl、模式 0600
  • JSON 输出和审计日志只显示变量名与经过清洗的失败分类。
  • 临时签名、归档和恢复目录使用 create-new 语义,并拒绝符号链接逃逸。

本页目录