OpenClaw的沙盒模式是一个基于Docker容器的安全隔离系统,旨在限制AI代理的权限范围,防止恶意操作影响主机系统。以下是详细解析:

沙盒模式的核心设计

三种运行模式

OpenClaw提供三种沙盒配置模式,对应不同的信任级别:

模式 适用场景 安全级别 说明
off 纯本地部署、私有环境 完全禁用沙盒,Agent拥有用户全部权限
non-main(默认推荐) 多租户SaaS、公开聊天 主会话在主机运行,其他会话在沙箱中
all 高安全要求、合规场景 所有会话都在沙箱容器中运行

信任层级设计

OpenClaw采用信任分层策略:

  • 主会话:代表”我”,通常是私人设备上的直接交互,通过main别名访问
  • 非主会话:代表”他人”,包括公共Discord频道、随机Telegram对话、第三方Webhook触发

这种设计基于假设:用户物理访问的设备是可信的,而外部来源的会话可能是恶意的。

技术实现细节

Docker容器隔离

沙盒模式使用Docker创建完全隔离的执行环境:

  1. // 创建沙箱容器的核心代码
  2. resp, err := t.dockerClient.ContainerCreate(ctx, &container.Config{
  3. Image: t.sandboxConfig.Image,
  4. Cmd: []string{"sh", "-c", command},
  5. WorkingDir: t.sandboxConfig.Workdir,
  6. Tty: false,
  7. }, &container.HostConfig{
  8. Binds: binds,
  9. NetworkMode: container.NetworkMode(t.sandboxConfig.Network),
  10. Privileged: t.sandboxConfig.Privileged,
  11. AutoRemove: t.sandboxConfig.Remove,
  12. }, nil, nil, containerName)

隔离维度

沙盒从多个层面限制Agent权限:

  1. 文件系统隔离

    • 只能访问指定挂载目录
    • 通过bindMounts配置读写权限
    • 默认工作目录:~/.openclaw/workspace
  2. 网络隔离

    • 可配置为none(无网络)或bridge(桥接网络)
    • 网络白名单机制
  3. 系统权限限制

    • 无法执行sudorm -rf等高风险命令
    • 资源限制(CPU、内存)
  4. 工具访问控制

    • 白名单模式:只允许指定的工具
    • 审批机制:敏感操作需要人工批准

配置方法

基础配置

编辑~/.openclaw/openclaw.json

  1. {
  2. "agents": {
  3. "defaults": {
  4. "sandbox": {
  5. "mode": "non-main", // "all""off"
  6. "scope": "session", // "session"|"agent"|"shared"
  7. "workspaceAccess": "ro", // "ro"只读或"rw"读写
  8. "docker": {
  9. "image": "openclaw-sandbox:bookworm-slim",
  10. "containerPrefix": "openclaw-sbx-",
  11. "network": "none" // 关键安全设置
  12. }
  13. }
  14. }
  15. }
  16. }

命令行配置

  1. # 启用Docker沙盒
  2. openclaw config set sandbox.mode "docker"
  3. openclaw config set sandbox.docker.image "openclaw/sandbox:latest"
  4. # 测试沙盒
  5. openclaw sandbox test
  6. # 查看当前权限配置
  7. openclaw sandbox explain

安全机制

三层权限控制

  1. Sandbox沙箱:环境隔离层
  2. Tool Policy工具策略:功能限制层
  3. Elevated权限:特权提升层(需明确授权)

审批机制

  1. {
  2. "tools": {
  3. "exec": {
  4. "security": "allowlist", // 白名单模式
  5. "ask": "on-miss", // 未命中白名单时审批
  6. "safeBins": ["git", "curl"] // 安全命令列表
  7. }
  8. }
  9. }

安全命令(Safe Bins)

内置安全命令无需审批:

  • cat - 读取文件
  • head/tail - 查看文件头尾
  • grep - 搜索
  • ls - 列出目录

最佳实践建议

1. 渐进式权限开放

  • 第一阶段:只允许文本处理,仅开放read工具,禁用exec
  • 第二阶段:允许读取和执行,开放readexec,禁用writedelete
  • 第三阶段:允许写入指定目录,通过bindMounts限制范围
  • 最后阶段:根据信任度逐步开放更多权限

2. 关键安全配置

  1. # 1. 确保网关只绑定本地地址
  2. openclaw config set gateway.bind "127.0.0.1" # 非0.0.0.0
  3. # 2. 设置文件权限
  4. chmod 700 ~/.openclaw
  5. chmod 600 ~/.openclaw/openclaw.json
  6. # 3. 使用容器网络隔离
  7. openclaw config set agents.defaults.sandbox.docker.network "none"

3. 环境准备要求

  • 内核版本 ≥ 4.8(支持完整Linux命名空间特性)
  • 安装systemd-nspawnbubblewrap沙箱工具
  • 创建独立的调试用户组openclaw-group

性能与便利性权衡

容器创建开销

  • 每个沙箱会话需要创建独立的Docker容器
  • 容器启动时间约100-500ms
  • 内存开销:每个容器约50-100MB

网络限制影响

  • network: "none":完全无网络,最安全但功能受限
  • network: "bridge":允许外网访问,适合需要联网的任务

实际应用场景

推荐配置组合

  1. 个人开发环境mode: "non-main" + workspaceAccess: "rw"
  2. 公开机器人mode: "all" + network: "none"
  3. 企业部署mode: "all" + 审批机制 + 操作审计

监控与审计

  1. # 配置auditd监控沙箱内操作
  2. auditctl -a exit,always -F arch=b64 -F dir=/var/sandbox/openclaw/rootfs -S execve

总结

OpenClaw的沙盒模式通过Docker容器隔离三层权限控制渐进式信任模型,在安全性与功能性之间取得了平衡。对于大多数用户,推荐使用non-main模式,既保留了主会话的便利性,又隔离了外部风险。关键是要避免裸机部署,始终启用某种形式的沙盒保护。

© 本文著作权归作者所有。转载请联系授权,禁止商用。

🔗 系列文章

1. openclaw能做什么?

2. openclaw会不会窃取我电脑上的私密信息?

3. openclaw的沙盒模式是什么?

4. Windows环境下如何正确安装OpenClaw?

5. 安装后提示"command not found"怎么办?

6. Node.js版本要求是什么?为什么推荐22版本?

7. 端口18789被占用如何处理?

8. 如何配置飞书/钉钉等国内聊天平台?

9. 配对码(Pairing)是什么?如何批准连接?

10. 如何切换AI模型提供商?

11. 联网搜索功能如何配置?

12. OpenClaw的记忆功能为什么"不会记住对话"?​

13. 如何安装和管理Skills(技能)?​

14. 定时任务(Cron Jobs)如何设置?

15. 浏览器自动化能做什么?具体如何操作?

16. 如何防范提示词注入(Prompt Injection)攻击?

17. 如何识别和避免恶意Skills?

18. 使用OpenClaw每月需要多少费用?

19. 如何控制Token消耗成本?

20. Gateway服务启动失败如何排查?

21. 遇到"HTTP 401: invalid access token"等错误怎么办?