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 |
记住两条判据:
- 工具 allow/deny 先于沙箱规则。 一个工具被全局或 per-agent deny,沙箱不会把它放回来。
- 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>或重装。
把它当生产系统
把散落的建议收成一张清单:
- 接入别人之前先配对:DM 用配对准入,别随手
open。 - 非主会话开沙箱:
sandbox.mode: "non-main"是成本最低的一档。 - 日常用
guarded或workspace模式,full只留给确实需要的管理员场景。 - 工具 deny 用于硬控制,别指望提示词或记忆替你兜底。
- 配好并验证备份,顺手让
doctor帮你盯着 14 天的新鲜度。 - 出问题走命令梯,别凭感觉重启。
系列收束
OpenClaw 和前面两个工具的差别,说到底在定位:它是一个替你 7×24 值班的服务,而不是一个你打开来干活的工具。服务就要有边界、有审批、有备份、有体检。
如果只记一条:默认配置不是安全配置。 你不显式设的边界,默认就是不设边界。先想清楚"谁能发消息、工具在哪跑、出事怎么恢复",再谈把它接进更多通道。
本系列基于 OpenClaw 2026.9.5 与官方文档 docs.openclaw.ai 整理,未使用任何本机私有配置。命令与字段以你所在版本为准,升级前先跑
openclaw doctor。