第五篇:运行时安全——Docker沙箱与命令审批机制

当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
相关推荐
上海云盾-小余2 小时前
零信任安全落地实战:企业如何构建无边界可信访问体系
网络·安全·web安全·架构
谪星·阿凯2 小时前
从入门到拿Flag:XXE漏洞全解析
安全·web安全·网络安全
tonyhi62 小时前
Ubuntu DeepSeek R1本地化部署 Ollama+Docker+OpenWebUI
java·ubuntu·docker
123过去2 小时前
sslyze使用教程
linux·网络·安全
皮皮宋吖3 小时前
皮皮宋渗透日记 11|文件包含漏洞全解析:LFI/RFI/ 伪协议 / 绕过 / 防御
android·安全
运维有小邓@3 小时前
文件分析如何检测文件安全漏洞?
网络·安全·web安全
志栋智能3 小时前
从手动处置到自动响应:安全工作的范式升级
网络·安全
北京软秦科技有限公司3 小时前
AI审核如何守护游乐设施安全底线?IACheck成为检测报告智能审核新助手
人工智能·安全
ComPDFKit3 小时前
OpenClaw安全风险与规避方法 — 安全“养虾”全套办法
安全·ai