OpenClaw的沙盒模式是一个基于Docker容器的安全隔离系统,旨在限制AI代理的权限范围,防止恶意操作影响主机系统。以下是详细解析:
沙盒模式的核心设计
三种运行模式
OpenClaw提供三种沙盒配置模式,对应不同的信任级别:
| 模式 | 适用场景 | 安全级别 | 说明 |
|---|---|---|---|
off |
纯本地部署、私有环境 | 低 | 完全禁用沙盒,Agent拥有用户全部权限 |
non-main(默认推荐) |
多租户SaaS、公开聊天 | 中 | 主会话在主机运行,其他会话在沙箱中 |
all |
高安全要求、合规场景 | 高 | 所有会话都在沙箱容器中运行 |
信任层级设计
OpenClaw采用信任分层策略:
- 主会话:代表”我”,通常是私人设备上的直接交互,通过
main别名访问 - 非主会话:代表”他人”,包括公共Discord频道、随机Telegram对话、第三方Webhook触发
这种设计基于假设:用户物理访问的设备是可信的,而外部来源的会话可能是恶意的。
技术实现细节
Docker容器隔离
沙盒模式使用Docker创建完全隔离的执行环境:
// 创建沙箱容器的核心代码resp, err := t.dockerClient.ContainerCreate(ctx, &container.Config{Image: t.sandboxConfig.Image,Cmd: []string{"sh", "-c", command},WorkingDir: t.sandboxConfig.Workdir,Tty: false,}, &container.HostConfig{Binds: binds,NetworkMode: container.NetworkMode(t.sandboxConfig.Network),Privileged: t.sandboxConfig.Privileged,AutoRemove: t.sandboxConfig.Remove,}, nil, nil, containerName)
隔离维度
沙盒从多个层面限制Agent权限:
-
文件系统隔离
- 只能访问指定挂载目录
- 通过
bindMounts配置读写权限 - 默认工作目录:
~/.openclaw/workspace
-
网络隔离
- 可配置为
none(无网络)或bridge(桥接网络) - 网络白名单机制
- 可配置为
-
系统权限限制
- 无法执行
sudo、rm -rf等高风险命令 - 资源限制(CPU、内存)
- 无法执行
-
工具访问控制
- 白名单模式:只允许指定的工具
- 审批机制:敏感操作需要人工批准
配置方法
基础配置
编辑~/.openclaw/openclaw.json:
{"agents": {"defaults": {"sandbox": {"mode": "non-main", // 或 "all"、"off""scope": "session", // "session"|"agent"|"shared""workspaceAccess": "ro", // "ro"只读或"rw"读写"docker": {"image": "openclaw-sandbox:bookworm-slim","containerPrefix": "openclaw-sbx-","network": "none" // 关键安全设置}}}}}
命令行配置
# 启用Docker沙盒openclaw config set sandbox.mode "docker"openclaw config set sandbox.docker.image "openclaw/sandbox:latest"# 测试沙盒openclaw sandbox test# 查看当前权限配置openclaw sandbox explain
安全机制
三层权限控制
- Sandbox沙箱:环境隔离层
- Tool Policy工具策略:功能限制层
- Elevated权限:特权提升层(需明确授权)
审批机制
{"tools": {"exec": {"security": "allowlist", // 白名单模式"ask": "on-miss", // 未命中白名单时审批"safeBins": ["git", "curl"] // 安全命令列表}}}
安全命令(Safe Bins)
内置安全命令无需审批:
cat- 读取文件head/tail- 查看文件头尾grep- 搜索ls- 列出目录
最佳实践建议
1. 渐进式权限开放
- 第一阶段:只允许文本处理,仅开放
read工具,禁用exec - 第二阶段:允许读取和执行,开放
read、exec,禁用write、delete - 第三阶段:允许写入指定目录,通过
bindMounts限制范围 - 最后阶段:根据信任度逐步开放更多权限
2. 关键安全配置
# 1. 确保网关只绑定本地地址openclaw config set gateway.bind "127.0.0.1" # 非0.0.0.0# 2. 设置文件权限chmod 700 ~/.openclawchmod 600 ~/.openclaw/openclaw.json# 3. 使用容器网络隔离openclaw config set agents.defaults.sandbox.docker.network "none"
3. 环境准备要求
- 内核版本 ≥ 4.8(支持完整Linux命名空间特性)
- 安装
systemd-nspawn与bubblewrap沙箱工具 - 创建独立的调试用户组
openclaw-group
性能与便利性权衡
容器创建开销
- 每个沙箱会话需要创建独立的Docker容器
- 容器启动时间约100-500ms
- 内存开销:每个容器约50-100MB
网络限制影响
network: "none":完全无网络,最安全但功能受限network: "bridge":允许外网访问,适合需要联网的任务
实际应用场景
推荐配置组合
- 个人开发环境:
mode: "non-main"+workspaceAccess: "rw" - 公开机器人:
mode: "all"+network: "none" - 企业部署:
mode: "all"+ 审批机制 + 操作审计
监控与审计
# 配置auditd监控沙箱内操作auditctl -a exit,always -F arch=b64 -F dir=/var/sandbox/openclaw/rootfs -S execve
总结
OpenClaw的沙盒模式通过Docker容器隔离、三层权限控制和渐进式信任模型,在安全性与功能性之间取得了平衡。对于大多数用户,推荐使用non-main模式,既保留了主会话的便利性,又隔离了外部风险。关键是要避免裸机部署,始终启用某种形式的沙盒保护。