OpenClaw 安全、审批与运维:把它当生产系统来跑

Posted on Mon 12 October 2026 in AI 编程 • Sucre Liu

三层控制,别再混着调

OpenClaw 的 Agent 安全不是一个开关,而是三层,各管一件事:

层 管什么 典型配置
沙箱(Sandbox) 在哪运行 agents.defaults.sandbox.mode: off \| non-main \| all
工具策略(Tool policy) 能用哪些工具 tools.allow / tools.deny
elevated 唯一的 exec 逃逸口 tools.elevated

记住两条判据:

  1. 工具 allow/deny 先于沙箱规则。 一个工具被全局或 per-agent deny,沙箱不会把它放回来。
  2. elevated 是逃逸口,不是万能钥匙。 它只把 exec 放到沙箱外跑(默认 gateway,目标是 node 时用 node),既不绕过 required sandbox,也不覆盖工具 deny。

沙箱:默认关闭

沙箱默认关闭。Gateway 进程始终留在主机上,只有工具执行在启用后进入沙箱。官方自己的措辞很诚实:这不是完美的安全边界,但在模型犯傻时能实打实地限制文件与进程访问。

最小的启用示例:

{
  agents: {
    defaults: {
      sandbox: {
        mode: "non-main",
        scope: "session",
        workspaceAccess: "none",
      },
    },
  },
}

workspaceAccess 取 none | ro | rw。涉及三类东西:哪些会话进沙箱、沙箱怎么共享、能看多少工作区。

排查用三个命令:

openclaw sandbox list                 # 容器、状态、镜像匹配、空闲时间、关联会话
openclaw sandbox explain --session <key>   # 生效模式、挂载、工具策略
openclaw sandbox recreate --all       # 用当前配置重建

调试"为什么这个命令被拦"时,sandbox explain 比猜快得多。多 agent 还能各自覆盖:agents.entries.*.sandbox 与 agents.entries.*.tools。

会话权限模式:一个会话的文件系统边界

除了全局配置,每个会话还能选一个权限模式,决定文件系统边界与 exec 升级的审核方式。边界是该会话记录的 sessionRoot(没记录就用所选 agent 的规范工作区):

模式 文件系统访问 exec 升级审核
read-only 只读 sessionRoot;省略改动类工具 无;exec 被拒绝
guarded 可读写 sessionRoot 白名单快速路径之后由人审批
workspace 可读写 sessionRoot LLM 审核:放行 / 拒绝 / 转人工
full 无限制 无

几个关键点:

  • full 需要 operator.admin;其余需要 operator.write。
  • workspace 模式下,审核器拒绝会把理由回给 agent,且不生成人工审批卡——agent 必须换一个更安全的做法或来问你,不能绕过。
  • 连续三次 gateway 审核器拒绝,也会升级到人工。
  • 即使 full,必需的 workspace root 与沙箱限制仍然约束文件工具;apply_patch 默认仍在工作区内。
  • 而且注意默认值:没有配这些也没开沙箱时,默认就是完全访问。 所以"我什么都没配"= "它什么都能做"。

在聊天气泡里有个 Execution permissions 菜单可以随时切换;切换会取消旧权限下的待批准请求,但不会撤销已经完成的写入或已启动的进程。CLI-backed 的运行和整个在 worker 上执行的运行不支持热切换,得先停任务。

自动化:定时、触发与无人值守

OpenClaw 内置调度器。用 openclaw automations 管理(openclaw cron 是同一组命令的别名):任务会持久化,到点唤醒 agent,输出可以投递到聊天通道、webhook 或哪里都不投。

一个一次性提醒:

openclaw automations create "2027-02-01T16:00:00Z" \
  --name "Reminder" \
  --session main \
  --system-event "Reminder: check the automations docs draft" \
  --wake now \
  --delete-after-run
openclaw automations list
openclaw automations get <job-id>
openclaw automations runs <job-id>

除了定时,还支持入站 webhook(POST /hooks/wake、POST /hooks/agent,以及映射式 /hooks/<name>)和 Gmail Pub/Sub 触发。周期性检查另有一个 heartbeat 机制(默认约每 30 分钟一次主会话回合),适合"状态巡检",别拿它做精确调度。

无人值守的任务要遵守一条运行契约:没有人在旁边,出错了没人点"允许"。所以定时任务该用最小工具集、明确模型与回退,并想清楚失败时要不要投递告警。

排障顺序(automation 专属):list 看任务在不在 → get/show 看配置 → runs 看执行历史 → 再查投递。时区是最常见的"没按时跑"原因。

运维:一条命令梯

日常和排障都按这个顺序走:

openclaw status                 # 通道健康 + 最近会话接收者 + 备份概览
openclaw gateway status         # 网关状态(加 --deep --require-rpc 更严格)
openclaw logs --follow          # 跟随网关文件日志
openclaw doctor                 # 体检
openclaw doctor --fix           # 应用修复
openclaw channels status --probe

doctor 是这套系统的中枢。它会报的东西包括:降级的 SecretRef owner(给出 openclaw secrets reload 重试)、被死信的通道入站事件、生效官方插件与已安装服务包的版本关系、以及备份新鲜度——没有任何成功备份、或最近一次成功备份超过 14 天,都会给出提示。

还有一点要提前知道:openclaw doctor --fix 是唯一会回滚到 last-known-good 配置的路径。 启动和热重载都不会自动回滚。

备份:三种粒度,选一个用

一个承载着凭据、会话、记忆的常驻服务,没有备份等于没有运维。OpenClaw 提供三档:

# 1) 全量归档:状态、配置、凭据、会话,可选工作区
openclaw backup create
openclaw backup create --verify
openclaw backup verify <archive.tar.gz>
openclaw backup restore <archive.tar.gz> --target <fresh-dir>

# 2) 单个 SQLite 的便携快照
openclaw backup sqlite create --global --repository ~/Backups/openclaw-sqlite
openclaw backup sqlite verify <snapshot-dir>

# 3) 版本化的 Git 备份(每表 JSONL,可 push 到私有仓库)
openclaw backup git init --repository ~/Backups/openclaw-git --remote <private-git-url>
openclaw backup git create --repository ~/Backups/openclaw-git --all --push

把它变成日程:

openclaw backup enable --repository ~/Backups/openclaw-git --every 24h --push

几个必须记住的约束:

  • 恢复是"时间旅行"。 它会回滚审批、投递/去重状态;带棘轮状态的通道凭据(尤其 WhatsApp)回滚后可能失步,需要重新链接。所以恢复前先看有没有待处理审批。
  • 恢复绝不原地进行。 只能恢复到全新的空目录,没有 --force;激活是单独的离线操作(停网关 → 放入状态 → doctor → 再启动)。
  • Git 历史是持久的。 不加 --exclude-secrets 时快照包含凭据,push 的远端必须私有;--push 的计划任务默认做脱敏。
  • 插件 node_modules 不在归档里;恢复后跑 openclaw plugins update <id> 或重装。

把它当生产系统

把散落的建议收成一张清单:

  1. 接入别人之前先配对:DM 用配对准入,别随手 open。
  2. 非主会话开沙箱:sandbox.mode: "non-main" 是成本最低的一档。
  3. 日常用 guarded 或 workspace 模式,full 只留给确实需要的管理员场景。
  4. 工具 deny 用于硬控制,别指望提示词或记忆替你兜底。
  5. 配好并验证备份,顺手让 doctor 帮你盯着 14 天的新鲜度。
  6. 出问题走命令梯,别凭感觉重启。

系列收束

OpenClaw 和前面两个工具的差别,说到底在定位:它是一个替你 7×24 值班的服务,而不是一个你打开来干活的工具。服务就要有边界、有审批、有备份、有体检。

如果只记一条:默认配置不是安全配置。 你不显式设的边界,默认就是不设边界。先想清楚"谁能发消息、工具在哪跑、出事怎么恢复",再谈把它接进更多通道。


本系列基于 OpenClaw 2026.9.5 与官方文档 docs.openclaw.ai 整理,未使用任何本机私有配置。命令与字段以你所在版本为准,升级前先跑 openclaw doctor。