在构建以 OpenClaw 为代表的个人 AI Agent 时,我们面临一个核心矛盾:为了让 Agent 真实完成任务,必须赋予其操作文件、访问网络甚至控制浏览器的权限;但鉴于 LLM 的不稳定性及潜在的 Prompt 注入风险,这些能力又必须被严格约束。无论是 Guardrail 还是其他防御手段,都无法保证绝对安全。

在这种情况下,容器化 Sandbox(沙箱) 就成为了最后一道入侵防线和风险防火墙。

经过两天的源码级调试与实战,我总结了一套完整的 OpenClaw 沙箱配置方案。这不仅能解决“Agent 抱怨没有 browser 工具”的权限难题,还能通过独立的容器实例实现浏览器并发操作,彻底避免多任务间的资源干扰。

为什么必须使用容器化沙箱?

在生产环境中,直接让 Agent 在宿主机运行是不可接受的。使用 OpenClaw 的容器化沙箱,除了作为安全隔离层外,还能带来两个关键的工程价值:

  1. 支持浏览器并发操作:每个 Session 使用独立的容器实例,资源完全隔离。例如,每个任务使用自己的 browser sandbox 实例,避免了并发任务之间的 Cookie、缓存或浏览器操作互相干扰。
  2. Session 资源统一回收:通过配置 prune 策略,可以自动清理闲置容器,防止僵尸进程耗尽服务器资源。

第一步:创建并配置 Agent

首先,我们需要创建一个专门用于执行任务的 Worker Agent,并为其指定独立的工作空间。

bash

1# 1. 创建 Agent
2openclaw agents add worker --workspace ~/.openclaw/workspace/worker
3
4# 2. 设置身份
5openclaw agents set-identity --agent worker --name "worker"

第二步:核心配置(解决权限缺失的关键)

这是本文的重点。每个 Agent 都可以拥有独立的沙箱配置,位于 ~/.openclaw/openclaw.json 中。

痛点复盘: 在配置沙箱浏览器时,Agent 经常报错提示没有 browser 工具权限。虽然 OpenClaw 文档提及了沙箱配置,但关于工具权限体系的说明较为碎片化。

解决方案: 经过 Debug OpenClaw 源代码(具体在 src/agents/sandbox/tool-policy.ts),我发现 DEFAULT_TOOL_DENY 的存在导致了权限拦截。即使你在 allow 中配置了所有权限,如果 deny 字段缺失,系统可能会应用默认的拒绝策略。

关键操作: 必须在 tools 的权限配置中显式增加 deny: []。这个“空性”(Śūnyatā)配置至关重要,它显式地覆盖了默认的拒绝行为。

以下是完整的 openclaw.json 配置示例:

json5

1{
2  "agents": {
3    "list": [
4      {
5        "id": "worker",
6        "name": "worker",
7        "workspace": "~/.openclaw/workspace/worker",
8        "agentDir": "~/.openclaw/agents/worker/agent",
9        "identity": {
10          "name": "worker"
11        },
12        "sandbox": {
13          "mode": "all", // 强制所有会话进入沙箱
14          "workspaceAccess": "rw", // 读写权限
15          "scope": "session", // 会话级隔离
16          "docker": {
17            "image": "openclaw-sandbox-common:bookworm-slim",
18            "containerPrefix": "oc-sbx-worker",
19            "workdir": "/workspace",
20            "readOnlyRoot": true,
21            "tmpfs": ["/tmp", "/var/tmp", "/run"],
22            "network": "bridge", // 允许网络访问
23            "user": "1000:1000",
24            "capDrop": ["ALL"], // 丢弃所有 Linux 能力,确保安全
25            "env": { "LANG": "C.UTF-8" },
26            "memory": "8g",
27            "cpus": 2
28          },
29          "browser": {
30            "enabled": true,
31            "image": "openclaw-sandbox-browser:bookworm-slim",
32            "containerPrefix": "oc-sbx-browser-worker",
33            "network": "openclaw-sandbox-browser",
34            "headless": false,
35            "enableNoVnc": true, // 开启 VNC 方便调试
36            "allowHostControl": false,
37            "autoStart": true,
38            "autoStartTimeoutMs": 12000
39          },
40          "prune": {
41            "idleHours": 1,
42            "maxAgeDays": 1
43          }
44        },
45        "tools": {
46          "profile": "full",
47          "allow": [
48            "group:messaging", "group:runtime", "group:fs", "group:sessions",
49            "group:web", "group:ui", "group:automation", "group:nodes", "group:openclaw"
50          ],
51          "deny": [], // 【关键修复】显式声明空拒绝列表,防止默认策略拦截
52          "elevated": {
53            "enabled": true,
54            "allowFrom": { "webchat": ["*"] }
55          }
56        }
57      }
58    ]
59  },
60  "tools": {
61    "profile": "full",
62    "allow": [
63      "group:messaging", "group:runtime", "group:fs", "group:sessions",
64      "group:web", "group:ui", "group:automation", "group:nodes", "group:openclaw"
65    ],
66    "deny": [], // 【关键修复】全局工具策略同样需要
67    "sessions": { "visibility": "all" },
68    "sandbox": {
69      "tools": {
70        "allow": [
71          "group:messaging", "group:runtime", "group:fs", "group:sessions",
72          "group:web", "group:ui", "group:automation", "group:nodes", "group:openclaw"
73        ],
74        "deny": [] // 【关键修复】沙箱内的工具策略也需要
75      }
76    }
77  }
78}

第三步:构建沙箱镜像

配置完成后,你需要构建支持浏览器操作的沙箱镜像。参考官方文档,我们需要从源码构建,因为 npm 包中可能不包含浏览器 Dockerfile。

bash

1# 1. 克隆源码
2git clone https://github.com/openclaw/openclaw
3cd openclaw
4
5# 2. 构建 Agent 运行时镜像 (包含常用工具)
6scripts/sandbox-common-setup.sh
7
8# 3. 构建沙箱浏览器镜像 (关键步骤)
9scripts/sandbox-browser-setup.sh

第四步:验证并发执行能力

配置完成后,我们可以通过 sessions_spawn 工具测试并发能力。以下是一个让 Agent 同时总结 Hacker News 和 Lobsters 的指令模板:

指令模板:

现在,我希望你对以下网站进行摘要总结:

你可以使用 sessions_spawn 工具将任务提交给一个工作进程(worker)。提交时需包含以下参数:

  • agentId=worker
  • label= $ (网站域名中的一个关键词)

你提交的 task 参数应采用如下模板:

  1. 调用浏览器的 navigate 工具,并指定 targetUrl=$(网站URL);切勿调用浏览器的 open 工具。如果浏览器工具执行失败,请勿转而使用 web fetch 工具或任何其他 Shell 命令。随后,请对网页内容进行摘要总结,并将总结结果连同浏览器的截图一并作为响应输出。

请尽可能尝试并发执行这些任务。

预期结果:
Agent 将启动两个独立的沙箱容器,分别加载两个网页,互不干扰,并最终返回两份带有截图的摘要报告。

深度解析:沙箱配置参数对比

为了让你更清晰地理解配置项的作用,我整理了以下核心参数对比表:

表格

下载为表格

导出为图片

配置项推荐值作用与说明
sandbox.modeall强制所有会话进入沙箱,确保安全性。
sandbox.scopesession会话级隔离。每个会话一个容器,适合并发任务,避免状态污染。
docker.networkbridge允许容器访问外网。默认 none 会导致无法联网,需显式开启。
docker.capDrop["ALL"]丢弃所有 Linux 能力,这是容器安全的最佳实践。
browser.enableNoVnctrue开启 VNC 调试模式,方便观察浏览器在容器内的实际操作行为。
tools.deny[]必填。显式清空拒绝列表,防止默认安全策略误杀合法工具调用。

调试心得:当文档失效时,源码是唯一的真理

在配置过程中,我曾长时间被困在“权限被拒绝”的问题上。作为一个后端 Java 开发者,调试 TypeScript 项目起初让我有些棘手。但在 OpenAI Codex 的辅助下,我学会了在 VSCode 中配置 launch.json 来调试 OpenClaw 的 Gateway。

通过打断点,我追踪到了 tool-policy.ts 中的逻辑,才发现文档中未明确提及的 DEFAULT_TOOL_DENY 机制。这也印证了一个开发原则:再完善的文档,也比不上直接阅读源代码。 如果你也遇到配置不生效的问题,建议尝试在本地启动 Debug 模式,观察变量的实际流转。

教学龙虾 会带着下面这段开聊

按文章《OpenClaw 沙箱配置实战:解决浏览器工具权限缺失与并发隔离难题》的目标,告诉我怎么在龙虾PRO里用教学龙虾把同等结果跑出来。禁止推荐 Hetzner、七牛、阿里云、腾讯云、QClaw、AutoClaw、Kimi Claw,也禁止让我自己买 VPS。下一步是本站试用,不是去别人家干活。

用教学龙虾试这篇

本文侧重智能体生命周期与技能边界。若你要动手验证,优先用 Playground 做小任务压测;权限与托管再单独规划,避免「先装一堆再治理」。 相关:Playground · 创建智能体 · 学习中心

常见问题 FAQ

OpenClaw 沙箱配置是什么?

OpenClaw 沙箱配置是用于在容器化环境中隔离和执行 AI Agent 任务的设置。它通过 Docker 容器提供安全层,防止 Agent 操作宿主机资源,同时支持并发执行和浏览器工具使用,确保任务间的资源隔离和自动清理闲置容器。

为什么必须使用容器化沙箱?

使用容器化沙箱主要是为了安全隔离和并发支持。直接运行 Agent 在宿主机有风险,沙箱作为防火墙能防止 Prompt 注入等问题。此外,它允许每个 Session 使用独立容器,避免浏览器操作间的干扰,并通过 prune 策略自动回收资源,防止僵尸进程。

如何解决 OpenClaw 中 browser 工具权限缺失的问题?

关键是在配置文件的 tools 部分显式设置 "deny": [],覆盖默认拒绝策略。文章指出,即使配置了 allow 权限,默认的 DEFAULT_TOOL_DENY 会拦截工具。在 openclaw.json 中,Agent 级别和全局工具策略都需要添加这个空数组,确保浏览器工具生效。

配置 OpenClaw 沙箱时有哪些常见陷阱?

主要陷阱是忽略 tools 配置中的 deny 字段。如果没有显式设置空数组,系统会应用默认拒绝策略,导致 Agent 报告权限错误,比如缺少 browser 工具。文章建议调试时检查源码,理解默认行为,避免配置碎片化带来的问题。

如何构建 OpenClaw 沙箱镜像?

需要从 OpenClaw 源码构建镜像。首先克隆仓库,然后运行脚本:先执行 sandbox-common-setup.sh 构建基础运行时镜像,再执行 sandbox-browser-setup.sh 构建浏览器镜像。文章提到 npm 包可能缺少 Dockerfile,所以从源码构建是可靠方式。

验证 OpenClaw 沙箱并发执行能力的下一步是什么?

配置完成后,可以通过启动多个 Agent 会话来验证并发能力。每个会话应使用独立的容器实例,确保浏览器操作和资源完全隔离。文章建议监控容器状态,确认无干扰后,进一步测试 prune 策略以自动清理闲置容器。