当AI智能体拥有执行命令的能力,“信任但验证”是最后的防线

引言:为什么必须用Docker?

2026年3月,安全研究人员捕获了一个名为@openclaw-ai/openclawai的恶意npm包,它伪装成官方CLI工具,通过postinstall钩子在受害者设备上建立反弹Shell,窃取SSH密钥、云平台凭证和浏览器会话信息-7。这一事件再次敲响警钟:裸机运行OpenClaw=自杀式部署

OpenClaw的核心风险在于其“自主决策能力”——如果以root权限直接在主机上运行,被恶意指令诱导的AI可能执行rm -rf /、窃取~/.ssh/id_rsa、甚至将整个/etc目录打包外发。Docker沙箱正是为此而生:将高风险操作限制在隔离容器内,即使AI“犯傻”,受损的也只是一个随时可销毁的容器环境-1-7

一、沙箱模式对比:找到你的安全水位线

OpenClaw通过agents.defaults.sandbox.mode控制沙箱何时启用,提供三种模式-2-3

模式

配置值

说明

适用场景

危险

"off"

不使用沙箱,所有工具都在主机上运行

❌ 强烈不推荐,仅用于调试

个人单用户

"non-main"

只对非主会话启用沙箱(默认选项)

个人开发者,信任主会话,隔离群组/频道

生产环境推荐

"all"

所有会话都运行在沙箱中

企业部署、多用户环境、高安全要求

关键理解:"non-main"模式基于session.mainKey(默认"main")判断,群组/频道会话使用自己的key,因此会被沙箱化-3。这意味着你的私人聊天可能直接在主机运行,而群组对话则在容器中隔离执行。

最小配置示例

{

  "agents": {

    "defaults": {

      "sandbox": {

        "mode": "non-main",        // 非主会话启用沙箱

        "scope": "session",        // 每个会话一个容器

        "workspaceAccess": "none"  // 不访问主机工作区

      }

    }

  }

}

二、Docker硬化参数:构建铜墙铁壁

2.1 核心参数配置

OpenClaw在底层调用Docker API时,支持传递一系列安全硬化参数。在~/.openclaw/openclaw.json中配置-1-3

{

  "agents": {

    "defaults": {

      "sandbox": {

        "docker": {

          "image": "openclaw-sandbox:bookworm-slim",

          "readonlyRootfs": true,           // 只读文件系统

          "securityOpt": ["no-new-privileges"], // 禁止提权

          "capabilities": {

            "drop": ["ALL"]                  // 丢弃所有Linux capabilities

          },

          "network": "none",                  // 禁用网络

          "memory": 128 * 1024 * 1024,        // 128MB内存限制

          "cpuPeriod": 100000,

          "cpuQuota": 50000                    // 限制50%单核CPU

        }

      }

    }

  }

}

2.2 每个参数的安全意义

参数

作用

安全收益

--read-only

容器根文件系统只读

防止恶意写入系统文件、安装后门

--security-opt=no-new-privileges

禁止进程获得比父进程更高权限

阻止容器内提权攻击

--cap-drop=ALL

丢弃所有Linux能力

即使容器被攻破,也无法执行特权操作

--network=none

禁用网络

阻止数据外泄、C2通信

--memory限制

限制内存使用

防DoS攻击

--cpu-quota

限制CPU使用

防资源滥用-1

2.3 默认镜像的安全设计

OpenClaw默认使用openclaw-sandbox:bookworm-slim镜像,基于Debian构建,不包含任何网络工具(curl、wget、nc等)。如需添加常用工具,可构建通用镜像-2

scripts/sandbox-common-setup.sh

然后在配置中指定:

{

  "sandbox": {

    "docker": {

      "image": "openclaw-sandbox-common:bookworm-slim"

    }

  }

}

2.4 绑定挂载的安全警告

有时需要让沙箱访问主机目录(如读取源代码),可通过binds配置-3

{

  "sandbox": {

    "docker": {

      "binds": [

        "/home/user/source:/source:ro",      // 只读挂载

        "/var/data:/data:rw"                  // 读写挂载

      ]

    }

  }

}

⚠️ 安全警告:绑定挂载会完全穿透沙箱文件系统,以你设置的任何模式暴露主机路径。敏感目录必须使用:ro只读模式,绝对不要挂载docker.sock等危险路径-2

三、三层隔离模型:从沙箱到宿主机的安全阶梯

OpenClaw设计了三层隔离模型,按安全强度递增-1

L1: Docker沙箱(Sandbox)—— 默认且最安全

L2: 网关宿主(Gateway Host)—— 受控的本地执行

L3: 远程节点(Remote Node)—— 企业级扩展

3.1 第一层:Docker沙箱(默认)

  • 每条命令在临时、无状态、最小化Docker容器中运行
  • 容器启动后立即执行命令,完成后自动销毁
  • 无网络、无持久存储、无特权-1

实现原理

async function runInSandbox(cmd, args) {

  const container = await docker.createContainer({

    Image: "openclaw/sandbox:latest",

    Cmd: [cmd, ...args],

    HostConfig: {

      NetworkMode: "none",    // 禁用网络

      AutoRemove: true,       // 自动删除

      CapDrop: ["ALL"],       // 放弃所有能力

      SecurityOpt: ["no-new-privileges"]

    }

  });

  // 执行并返回结果

}

3.2 第二层:网关宿主(受控执行)

当命令需要访问本地资源(如项目目录、Docker Daemon),可降级到L2,但必须同时满足-1

  • 智能体配置显式声明host: "gateway"
  • 命令在权限提升白名单
  • 用户通过手机端手动审批

权限提升白名单示例

bashTools:

  elevatedWhitelist:

    - "git status"

    - "npm run build"

    - "docker ps"

3.3 第三层:远程节点(企业级)

在多服务器环境中,命令可在特定远程机器执行。每个节点独立权限策略,命令在远程沙箱中执行,所有操作记录审计日志-1

四、命令审批机制:人类是最后一道防线

OpenClaw的哲学是:AI可以“提议”执行命令,但人类必须保留“否决权”-1

4.1 敏感操作拦截配置

通过human_in_the_loop配置,将高风险操作标记为“敏感”,执行前需人工确认-7

# ~/.openclaw/config.yaml

human_in_the_loop:

  enabled: true

  require_approval_for:

    - exec                     # 所有命令执行

    - file_system.delete       # 文件删除

    - email.send               # 发送邮件

    - git.commit               # Git提交

    - crypto.transfer          # 加密货币转账

  approval_timeout_minutes: 5  # 5分钟不回复自动拦截

4.2 审批流程

  1. AI生成工具调用:exec(command="rm -rf ./temp")
  2. 网关检测到需审批:匹配require_approval_for列表
  3. 通过IM发送确认卡片(WhatsApp/Telegram):

AI请求执行:

命令:rm -rf ./temp

路径:/home/user/projects

危险等级:高风险

请选择:[确认] [拒绝]

  1. 用户点击“确认”后,命令才执行-1

4.3 Exec审批的高级配置

OpenClaw的exec工具支持精细的审批策略-4

参数

选项

说明

security

deny / allowlist / full

执行策略

ask

off / on-miss / always

审批提示时机

elevated

true / false

请求提升模式

示例:配置节点执行始终需要审批

/exec host=node security=full ask=always node=mac-1

五、工具策略配置:细粒度的权限控制

OpenClaw提供三层安全控制-2

  1. 沙箱:决定工具在哪里运行(Docker vs 主机)
  2. 工具策略:决定哪些工具可用/禁止
  3. Elevated模式:exec专用的“逃逸舱”,在主机上运行

5.1 工具策略层级

过滤顺序(从宽到严)-5

  1. 工具配置 (profile)
  2. 提供商工具配置
  3. 全局工具策略 (allow/deny)
  4. 提供商工具策略
  5. Agent专属工具策略
  6. 沙箱工具策略
  7. 子代理工具策略

5.2 工具组快捷方式

使用group:前缀快速配置工具组-5

组名

包含工具

group:runtime

exec, bash, process

group:fs

read, write, edit, apply_patch

group:sessions

sessions_list, sessions_history, sessions_send

group:memory

memory_search, memory_get

group:web

web_search, web_fetch

group:ui

browser, canvas

group:messaging

message

配置示例:仅允许文件工具+浏览器

json

复制

下载

{

  "tools": {

    "allow": ["group:fs", "browser"]

  }

}

5.3 多代理沙箱配置示例

为不同Agent配置不同安全策略-2-6

{

  "agents": {

    "list": [

      {

        "id": "main",

        "default": true,

        "name": "Personal Assistant",

        "sandbox": { "mode": "off" }  // 主机运行,完全信任

      },

      {

        "id": "family",

        "name": "Family Bot",

        "sandbox": {

          "mode": "all",

          "scope": "agent"

        },

        "tools": {

          "allow": ["read"],

          "deny": ["exec", "write", "edit", "apply_patch", "browser"]

        }

      }

    ]

  }

}

六、沙箱浏览器:隔离的网页访问

OpenClaw支持在沙箱中运行浏览器,防止恶意网页通过浏览器漏洞攻击主机-2-3

6.1 浏览器安全加固

沙箱浏览器默认使用以下Chromium启动参数-2

  • --no-sandbox
  • --disable-gpu
  • --disable-3d-apis
  • --disable-extensions
  • --renderer-process-limit=2

6.2 浏览器沙箱配置

{

  "agents": {

    "defaults": {

      "sandbox": {

        "browser": {

          "autoStart": true,

          "network": "none",           // 禁用网络

          "cdpSourceRange": ["127.0.0.1/32"],  // CDP入口白名单

          "allowHostControl": false     // 禁止控制主机浏览器

        }

      }

    }

  }

}

6.3 浏览器工具的安全使用

// 在沙箱中截图,不会污染主机

const screenshot = await browser.screenshot({

  url: "https://unknown-site.com",

  profile: "sandbox-profile"  // 使用独立profile

});

七、调试命令与运维实践

7.1 查看沙箱配置

openclaw sandbox explain

openclaw sandbox explain --session agent:main:main

openclaw sandbox explain --json

7.2 列出沙箱容器

openclaw sandbox list

openclaw sandbox list --browser  # 只看浏览器容器

7.3 重建沙箱容器

openclaw sandbox recreate --all                # 重建所有

openclaw sandbox recreate --session main       # 特定会话

openclaw sandbox recreate --agent mybot        # 特定agent

openclaw sandbox recreate --browser            # 只重建浏览器

提示:修改Docker镜像或配置后,必须重建容器才能生效-2

7.4 安全日志审查

# 实时查看安全相关日志

tail -f ~/.openclaw/logs/security-audit.log | grep -E "WARN|ERROR|BLOCKED"

八、常见问题解决

Q1: “Tool X blocked by sandbox tool policy”

原因:工具被沙箱策略拒绝-2

解决方案

  1. 禁用沙箱:agents.defaults.sandbox.mode=off(不推荐)
  2. 或在沙箱中允许该工具:
    • 从tools.sandbox.tools.deny中移除
    • 或添加到tools.sandbox.tools.allow

Q2: “I thought this was main, why is it sandboxed?”

原因:在"non-main"模式下,群组/频道的key不是"main"-2

解决方案

  • 使用主会话key
  • 或切换到"off"模式
  • 或接受群组会话在沙箱中运行

Q3: “Elevated exec not working”

原因:tools.elevated未启用或不在白名单-4

解决方案

{

  "tools": {

    "elevated": true,

    "elevatedWhitelist": ["your-command"]

  }

}

九、生产环境推荐配置模板

9.1 个人开发者推荐(平衡安全与便利)

{

  "agents": {

    "defaults": {

      "sandbox": {

        "mode": "non-main",        // 主会话在主机,其他在沙箱

        "scope": "session",

        "workspaceAccess": "ro",    // 工作区只读

        "docker": {

          "readonlyRootfs": true,

          "securityOpt": ["no-new-privileges"],

          "capabilities": { "drop": ["ALL"] },

          "network": "none",

          "memory": 256 * 1024 * 1024

        }

      }

    }

  },

  "human_in_the_loop": {

    "enabled": true,

    "require_approval_for": ["exec", "file_system.delete"]

  }

}

9.2 企业生产环境推荐(最高安全)

{

  "agents": {

    "defaults": {

      "sandbox": {

        "mode": "all",               // 所有会话进沙箱

        "scope": "session",

        "workspaceAccess": "none",    // 完全不访问主机工作区

        "docker": {

          "image": "openclaw-sandbox:hardened",

          "readonlyRootfs": true,

          "securityOpt": ["no-new-privileges"],

          "capabilities": { "drop": ["ALL"] },

          "network": "none",

          "memory": 128 * 1024 * 1024,

          "cpuQuota": 50000

        }

      }

    }

  },

  "tools": {

    "profile": "minimal",            // 最小工具集

    "deny": ["exec", "process", "browser", "canvas"]

  },

  "human_in_the_loop": {

    "enabled": true,

    "require_approval_for": ["*"],    // 所有操作需审批

    "approval_timeout_minutes": 10

  }

}

十、安全基线检查清单

检查项

命令/验证

期望结果

沙箱模式

openclaw sandbox explain

显示预期模式(non-main/all)

Docker硬化

docker inspect $(openclaw sandbox list -q) | grep -E "ReadonlyRootfs|CapDrop"

ReadonlyRootfs=true, CapDrop=[ALL]

工具策略

openclaw config get tools.deny

包含高风险工具

审批机制

openclaw config get human_in_the_loop

enabled=true

安全日志

tail -5 ~/.openclaw/logs/security-audit.log

无异常拒绝记录

结语:信任但验证

OpenClaw的运行时安全架构,体现了对AI智能体“行动能力”的审慎态度-1

  • 默认最安全(沙箱)
  • 可控降级(白名单+审批)
  • 可扩展(远程节点)

它不阻止AI做事,而是确保每一步都在人类知情与授权下进行。正如安全专家所言:“沙箱不是完美的安全边界,但当模型做出愚蠢行为时,它能实质性地限制文件系统和进程访问”-3

在享受AI效率红利的同时,请牢记:

裸机运行OpenClaw,等于把家门钥匙放在门口垫子下-8

(系列文章第五篇,待续。下一篇预告:凭证管理与数据加密——守住API密钥生命线)

参考文献:

  1. 腾讯云开发者社区.exec.ts 上篇 —— OpenClaw 安全执行 Shell 命令的三层隔离模型.2026-03-13-1
  2. GitCode开源社区.小学子讲技术 - OpenClaw 沙箱集成详解.2026-03-16-2-6
  3. UNPKG.@gguf/claw 沙箱隔离文档.2026-02-03-3
  4. W3Cschool.cn.OpenClaw Exec 工具用法、stdin 模式和 TTY 支持.2026-03-17-4
  5. W3Cschool.cn.OpenClaw 智能体工具接口文档.2026-03-17-5
  6. Foresight News.如何安全地使用 OpenClaw.2026-02-24-7
  7. CSDN博客.OpenClaw(小龙虾)安全使用白皮书.2026-03-17

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐