首页openclaw教程中心 › 沙箱隔离专题教程

沙箱隔离专题教程

沙箱是什么

沙箱(Sandbox)是 OpenClaw 的安全隔离机制。它使用 Docker 容器为智能体创建一个独立的执行环境——智能体在容器内运行命令、读写文件,即使出了问题也不会影响宿主机。 你可以把沙箱想象成一个"安全房间": - 智能体在房间里可以自由操作 - 房间外的系统文件、网络资源受到保护 - 即使智能体执行了危险命令,影响范围也被限制在容器内 - 容器销毁后,所有改动都会消失(除非配置了持久化)

沙箱 vs 工具策略 vs 提权

OpenClaw 有三种安全控制机制,它们解决不同层面的问题: | 机制 | 控制什么 | 类比 | |------|----------|------| | 沙箱(Sandbox) | 执行环境在哪里运行 | 把人关在安全屋里 | | 工具策略(Tools Allow/Deny) | 能使用哪些工具 | 决定给不给人工具 | | 提权(Elevated) | 工具的权限级别 | 给的工具是普通版还是高级版 |

沙箱(Sandbox)

沙箱限制的是执行环境。开启沙箱后,智能体的 exec(命令执行)和文件操作都在 Docker 容器内进行,与宿主机隔离。 ``json { "sandbox": { "mode": "all" } } ` 效果: - ✅ 智能体可以执行命令,但在容器内 - ✅ 智能体可以读写文件,但在容器的文件系统内 - ✅ 宿主机的文件和系统不受影响

工具策略(Tools Allow/Deny)

工具策略限制的是可用工具。通过
allowdeny 列表控制智能体能使用哪些工具。 `json { "tools": { "allow": ["read", "write", "web_search"], "deny": ["exec", "browser"] } } ` 效果: - ✅ 智能体可以读写文件、搜索网页 - ❌ 智能体不能执行命令、不能使用浏览器

提权(Elevated)

提权控制的是工具的权限级别。某些工具有普通模式和提权模式,提权后可以执行更多操作。
`json { "tools": { "elevated": true } } ` 效果: - 普通模式:exec 工具只能执行白名单内的命令 - 提权模式:exec 工具可以执行任意命令

三者如何配合

最安全的配置是三者组合使用:
`json { "sandbox": { "mode": "all" }, "tools": { "allow": ["exec", "read", "write"], "deny": ["browser"] } } ` 这个配置的含义: 1. 智能体可以使用 exec、read、write 工具(工具策略) 2. 但所有操作都在 Docker 容器内执行(沙箱) 3. 不能使用浏览器工具(工具策略)

启用沙箱配置

前提条件

沙箱依赖 Docker,确保你的系统已安装 Docker:
`bash

检查 Docker 是否安装

docker --version

检查 Docker 是否在运行

docker info
` 如果未安装 Docker: `bash

Ubuntu/Debian

curl -fsSL https://get.docker.com | sh sudo usermod -aG docker $USER

macOS

brew install --cask docker
`

sandbox.mode 配置

编辑
~/.openclaw/openclaw.json,添加沙箱配置: `json { "sandbox": { "mode": "off" } } ` mode 有三个可选值: | 模式 | 说明 | 适用场景 | |------|------|----------| | off | 关闭沙箱(默认) | 个人使用,信任所有技能 | | all | 所有操作都在沙箱内 | 生产环境,最高安全级别 | | untrusted | 仅不受信任的技能在沙箱内 | 平衡安全和便利 |

模式详解

#### off — 关闭沙箱
`json { "sandbox": { "mode": "off" } } ` 所有操作直接在宿主机上执行。适合个人开发环境,你完全信任所有安装的技能。 #### all — 全部沙箱化 `json { "sandbox": { "mode": "all" } } ` 所有命令执行和文件操作都在 Docker 容器内进行。这是最安全的模式,推荐在以下场景使用: - 生产环境 - 多用户共享的 Gateway - 运行来源不明的技能 #### untrusted — 仅隔离不受信任的技能 `json { "sandbox": { "mode": "untrusted" } } ` 只有标记为"不受信任"的技能会在沙箱内运行,其他操作直接在宿主机上执行。这是安全和便利的折中方案。

按智能体配置沙箱

如果你运行多个智能体,可以为每个智能体设置不同的沙箱策略:
`json { "agents": { "list": [ { "id": "trusted-coder", "sandbox": { "mode": "off" } }, { "id": "public-assistant", "sandbox": { "mode": "all" } }, { "id": "skill-tester", "sandbox": { "mode": "untrusted" } } ] } } ` 这个配置的含义: - trusted-coder:你自己使用的编程助手,关闭沙箱以获得最大灵活性 - public-assistant:对外提供服务的助手,全部沙箱化保证安全 - skill-tester:用于测试新技能的智能体,仅隔离不受信任的技能

沙箱内安装依赖

沙箱容器是一个干净的环境,可能缺少你需要的工具和依赖。使用
setupCommand 可以在容器创建后自动安装依赖。

setupCommand 配置

`json { "sandbox": { "mode": "all", "setupCommand": "apt-get update && apt-get install -y python3 pip git && pip install requests" } } ` setupCommand 的特点: - 在容器创建后运行一次 - 安装的依赖在容器生命周期内持续有效 - 容器销毁后需要重新安装

常见 setupCommand 示例

安装 Python 环境:
`json { "sandbox": { "setupCommand": "apt-get update && apt-get install -y python3 python3-pip && pip3 install requests beautifulsoup4" } } ` 安装 Node.js 工具: `json { "sandbox": { "setupCommand": "apt-get update && apt-get install -y nodejs npm && npm install -g tsx typescript" } } ` 安装多种工具: `json { "sandbox": { "setupCommand": "apt-get update && apt-get install -y curl wget jq git python3 python3-pip && pip3 install pyyaml" } } `

按智能体配置 setupCommand

不同智能体可能需要不同的依赖:
`json { "agents": { "list": [ { "id": "python-agent", "sandbox": { "mode": "all", "setupCommand": "pip3 install pandas numpy matplotlib" } }, { "id": "web-agent", "sandbox": { "mode": "all", "setupCommand": "apt-get update && apt-get install -y chromium-browser" } } ] } } `

网络和文件系统限制

沙箱不仅隔离了执行环境,还可以限制网络访问和文件系统权限。

网络限制

默认情况下,沙箱容器可以访问外部网络。如果你想限制网络访问:
`json { "sandbox": { "mode": "all", "network": "none" } } ` 网络模式选项: | 模式 | 说明 | |------|------| | bridge(默认) | 容器可以访问外部网络 | | none | 完全禁止网络访问 | | host | 使用宿主机网络(不推荐,降低隔离性) |

文件系统限制

沙箱容器有自己独立的文件系统。默认情况下,容器内的文件改动在容器销毁后会丢失。 如果需要持久化某些目录,可以配置挂载:
`json { "sandbox": { "mode": "all", "mounts": [ { "source": "/home/user/data", "target": "/data", "readonly": false }, { "source": "/home/user/config", "target": "/config", "readonly": true } ] } } ` ⚠️ 挂载目录会打破沙箱的隔离性。只挂载必要的目录,并尽量使用 readonly: true

资源限制

可以限制容器使用的系统资源:
`json { "sandbox": { "mode": "all", "resources": { "memory": "512m", "cpus": "1.0" } } } ` 这可以防止智能体执行的命令消耗过多系统资源。

何时该用沙箱

推荐使用沙箱的场景

运行不受信任的技能 从 ClawHub 安装的第三方技能可能包含未知的命令执行逻辑。沙箱可以限制这些技能的影响范围:
`json { "sandbox": { "mode": "untrusted" } } ` 多用户共享 Gateway 当多个用户共享同一个 Gateway 时,沙箱可以防止一个用户的操作影响其他用户: `json { "sandbox": { "mode": "all" } } ` 生产环境 在生产服务器上运行 OpenClaw 时,沙箱是必要的安全措施: `json { "sandbox": { "mode": "all", "network": "none", "resources": { "memory": "1g", "cpus": "2.0" } } } ` 测试新技能 在安装和测试新技能时,使用沙箱可以安全地评估技能的行为: `json { "agents": { "list": [ { "id": "skill-tester", "sandbox": { "mode": "all" } } ] } } `

不需要沙箱的场景

- 个人开发环境:你完全信任所有安装的技能,且只有你自己使用 - 只使用内置工具:不运行第三方技能,只使用 OpenClaw 内置的工具 - Docker 不可用:某些环境(如某些 VPS、CI/CD)可能无法运行 Docker

沙箱排查

检查 Docker 状态

`bash

Docker 是否在运行

docker info

查看沙箱容器

docker ps | grep openclaw

查看容器日志

docker logs
`

常见问题

问题:沙箱启动失败
`bash

检查 Docker 权限

docker run hello-world

如果权限不足

sudo usermod -aG docker $USER

重新登录后生效

` 问题:setupCommand 执行失败 `bash

手动进入容器测试

docker exec -it /bin/bash

在容器内手动执行 setupCommand

apt-get update && apt-get install -y python3
` 问题:容器内无法访问网络 检查网络配置是否设置为 none`json { "sandbox": { "network": "bridge" } } ` 问题:文件在容器重启后丢失 这是正常行为。如果需要持久化,配置挂载目录: `json { "sandbox": { "mounts": [ { "source": "/home/user/persistent-data", "target": "/data", "readonly": false } ] } } `

安全最佳实践

1. 生产环境必须开启沙箱
mode: "all" 是生产环境的最低要求 2. 限制网络访问:如果智能体不需要访问外部网络,设置 network: "none" 3. 最小化挂载:只挂载必要的目录,尽量使用只读模式 4. 限制资源:设置内存和 CPU 限制,防止资源耗尽 5. 配合工具策略:沙箱 + 工具策略组合使用,双重保护 6. 定期清理容器:清理不再使用的沙箱容器,释放资源 `bash

清理已停止的容器

docker container prune

清理未使用的镜像

docker image prune
`

小结

沙箱是 OpenClaw 安全体系的重要组成部分: - 使用 Docker 容器隔离智能体的执行环境 - 三种模式:
off(关闭)、all(全部隔离)、untrusted(仅隔离不受信任的技能) - 与工具策略(allow/deny)和提权(elevated)配合使用,形成多层安全防护 - 通过 setupCommand` 在容器内安装依赖 - 可以限制网络访问、文件系统和系统资源 - 生产环境和多用户场景强烈推荐开启沙箱 安全不是可选项——当你的 Gateway 面向外部用户或运行第三方技能时,沙箱是保护系统的第一道防线。 #沙箱隔离 #安全运行 #Docker隔离 #工具策略 #龙虾技能库
#沙箱#安全#Docker隔离#工具策略#进阶教程

📚 相关教程

多智能体路由教程进阶
了解如何在一个 OpenClaw Gateway 上运行多个智能体,通过 Bindings 路由规则将不同渠道、联系人分配到不同智能体,实现灵活的多智能体架构。
安全最佳实践教程进阶
全面了解 OpenClaw 的安全模型,掌握 Gateway 认证、渠道安全、工具权限控制、沙箱隔离、密钥管理等安全最佳实践,保护你的智能体和数据安全。
浏览器自动化专题教程进阶
掌握 OpenClaw 的浏览器工具,学会控制 Chromium 实例进行网页导航、点击、截图、文本提取等自动化操作。
← 插件 SDK 开发教程安全最佳实践教程 →