文档大纲

OpenClaw安全加固指南

—— 转自通往AGI之路

看不懂?让小龙虾帮你快速落地:

本文及本站大部分openclaw相关文章,都可以让Openclaw agent阅读,然后进行应用,参考Prompt如下:

请阅读这篇文章:https://www.aiec.fun/%e6%89%93%e9%80%a0%e4%b8%93%e5%b1%9e%e5%b7%a5%e4%bd%9c%e5%a4%a7%e8%84%91%ef%bc%9a%e8%ae%a9openclaw%e4%bc%98%e5%85%88%e4%bd%bf%e7%94%a8%e4%bd%a0%e7%9a%84%e7%a7%81%e6%9c%89%e5%b7%a5%e4%bd%9c%e7%9f%a5/ 分析有哪些内容,对我们优化工作流程有价值。并严格根据openclaw最新官方文档核对,排除错误及过时信息,制定落地计划。

详细方法,参考文章 >>>

安全背景

OpenClaw 采用 一个可信操作者 → 一个 Gateway → 多个 Agent 的安全模型。Gateway 是唯一的入口,所有外部请求必须经过 Gateway 鉴权后才能到达 Agent。

已知风险:

  • ClawHub 恶意技能:ClawHub 生态中存在恶意技能包,ClawHavoc 事件已被 Koi Security、The Hacker News 等多方报道证实。
  • ClawJacked 漏洞:被 Dark Reading 等安全媒体报道,涉及技能劫持攻击链。

这些事件表明:安装后不做安全加固,OpenClaw 可能暴露在已知攻击面中。

官方 60 秒安全基线

为什么需要这个基线? OpenClaw 默认配置优先考虑"开箱即用",而非安全。这意味着 Gateway 可能无鉴权、工具权限全开、DM 通道不设限。下面这段配置一次性覆盖最关键的攻击面——Gateway 鉴权、工具最小权限、消息通道管控,是投入产出比最高的单次操作。

如果只做一件事,直接把这段 hardened baseline 写入 ~/.openclaw/openclaw.json:

{
  gateway: {
    mode: "local",
    bind: "loopback",
    auth: { mode: "token", token: "replace-with-long-random-token" }
  },
  session: { dmScope: "per-channel-peer" },
  tools: {
    profile: "messaging",
    deny: ["group:automation", "group:runtime", "group:fs",
           "sessions_spawn", "sessions_send"],
    fs: { workspaceOnly: true },
    exec: { security: "deny", ask: "always" },
    elevated: { enabled: false }
  },
  channels: {
    whatsapp: {
      dmPolicy: "pairing",
      groups: { "*": { requireMention: true } }
    }
  }
}

生成 token:

openclaw doctor --generate-gateway-token

详细配置(4 大类)

  1. Gateway 访问控制

作用: Gateway 是所有外部请求进入 OpenClaw 的唯一入口。访问控制决定谁能连上你的 Gateway。

为什么: OpenClaw 默认安装后,Gateway 可能在本地端口监听但没有鉴权。同一网络的任何人都可以直接调用你的 Agent,发送消息、执行工具。

解决什么:bind: "loopback" 限制只有本机能连;auth.mode: "token" 要求每次请求携带密钥,防止未授权访问。不设置 = 裸奔。

本地部署(默认):
{
  gateway: {
    mode: "local",
    bind: "loopback",
    auth: { mode: "token", token: "replace-with-long-random-token" }
  }
}
云端部署:
{
  gateway: {
    mode: "gateway",
    bind: "0.0.0.0",
    auth: { mode: "token", token: "replace-with-long-random-token" }
  }
}

要点:

  • 环境变量:OPENCLAW_GATEWAY_TOKEN 或 OPENCLAW_GATEWAY_PASSWORD
  • gateway.bind 可选值:loopback(默认)、lan、tailnet、custom
  • 远程访问推荐 SSH 隧道或 Tailscale Serve,不要暴露公网端口
  • 云端部署必须使用 lan 或 0.0.0.0,loopback 仅限本机
  1. 工具权限控制

作用: 控制 Agent 能调用哪些工具。工具是 Agent 与外部世界交互的手脚——文件读写、命令执行、消息发送都是工具。

为什么: ClawHub 上的第三方技能可能包含恶意指令(ClawHavoc 事件已证实)。如果 Agent 拥有文件系统和命令执行权限,恶意技能可以读取敏感文件、执行任意命令。

解决什么:deny 列表禁用高危工具组;exec.security: "deny" 禁止命令执行;fs.workspaceOnly: true 限制文件访问范围;elevated: false 禁止提权。最小权限原则:只给 Agent 它真正需要的能力。

{
  tools: {
    profile: "messaging",  // messaging / minimal / default / full
    deny: ["group:automation", "group:runtime", "group:fs",
           "sessions_spawn", "sessions_send"],
    fs: { workspaceOnly: true },
    exec: { security: "deny", ask: "always" },  // deny / ask / ask-dangerous / allow
    elevated: { enabled: false }
  }
}

要点:

  • tools.exec.host:"sandbox"(推荐)或 "gateway"
  • 危险工具组:group:automation、group:runtime、group:fs
  • elevated: { enabled: false } 禁用提权操作
  1. Docker 沙箱隔离

作用: 让每个 Agent 运行在独立的 Docker 容器中,与宿主机隔离。

为什么: 即使工具权限控制到位,Agent 执行的代码仍可能通过漏洞逃逸。沙箱提供第二道防线——容器内的恶意操作无法影响宿主机。

解决什么:network: "none" 防止容器内发起网络请求(数据外泄);readOnlyRoot: true 防止篡改容器文件系统植入后门;capDrop: ["ALL"] 移除所有 Linux capabilities 防止提权;user: "1000:1000" 非 root 运行减少攻击面。不挂载 Docker socket 防止容器逃逸控制宿主机。

{
  agents: {
    defaults: {
      sandbox: {
        mode: "all",           // off / non-main / all
        scope: "agent",        // session / agent / shared
        workspaceAccess: "none", // none / ro / rw
        docker: {
          image: "openclaw-sandbox:bookworm-slim",
          readOnlyRoot: true,
          network: "none",     // none / bridge / host(危险)
          user: "1000:1000",   // 非 root
          capDrop: ["ALL"],
          pidsLimit: 256,
          memory: "1g",
          memorySwap: "2g",
          cpus: 1,
          tmpfs: ["/tmp", "/var/tmp", "/run"],
          dangerouslyAllowContainerNamespaceJoin: false
        }
      }
    }
  }
}

要点:

  • 永远不挂载 Docker socket
  • readOnlyRoot: true 防止运行时篡改
  • 网络默认 "none",需要网络时用 "bridge",永远不用 "host"
  1. 密钥管理 SecretRef

作用: 将 API Key 等敏感凭据从配置文件中分离,通过引用方式按需获取。

为什么: 配置文件可能被提交到 Git、被日志记录、被其他进程读取。明文存储 API Key 是最常见的凭据泄露原因。

解决什么: SecretRef 让配置文件中只存"去哪里取密钥"的指针,不存密钥本身。支持环境变量、加密文件、外部密钥管理器(1Password/Vault/SOPS),确保密钥不落盘、不入库。

{
  secrets: {
    providers: {
      default: { source: "env" },
      filemain: {
        source: "file",
        path: "~/.openclaw/secrets.json",
        mode: "json"
      }
    }
  },
  models: {
    providers: {
      openai: {
        apiKey: { source: "env", provider: "default", id: "OPENAI_API_KEY" }
      }
    }
  }
}

要点:

  • 支持 env / file / exec 三种 source
  • exec 可对接 1Password CLI、HashiCorp Vault、SOPS
  • 绝不在配置文件中明文存储 API Key
  • 检查明文泄露:openclaw secrets audit --check

其他安全设置

DM/群组策略

作用: 控制谁能通过消息渠道(WhatsApp 等)与 Agent 对话。

为什么: 如果设为 open,任何人都能私聊你的 Agent 并触发操作。ClawJacked 攻击链的一个入口就是通过未限制的 DM 通道向 Agent 注入恶意指令。

解决什么:dmPolicy: "pairing" 要求配对确认才能建立对话;requireMention: true 在群组中必须 @提及才响应,防止 Agent 被群消息意外触发。

{
  channels: {
    whatsapp: {
      dmPolicy: "pairing",  // pairing / allowlist / open / disabled
      groups: { "*": { requireMention: true } }
    }
  },
  session: { dmScope: "per-channel-peer" }
}

日志脱敏

作用: 自动从日志中移除敏感信息。

为什么: 调试日志中经常包含 API 请求/响应的完整内容,可能包含密钥、用户数据。日志被收集到集中平台后,访问权限通常比生产系统宽松。

解决什么:redactSensitive: "tools" 自动遮盖工具调用中的敏感字段;自定义 redactPatterns 可匹配项目特有的敏感格式。

{
  logging: {
    redactSensitive: "tools",  // tools / all / false
    redactPatterns: ["api_key=.*", "secret=.*"]
  }
}

mDNS 发现

作用: 控制 OpenClaw 是否通过 mDNS(Bonjour)在局域网广播自身存在。

为什么: 默认的 mDNS 广播会让同一网络的所有设备发现你的 OpenClaw 实例,暴露服务信息。

解决什么:mode: "minimal" 或 OPENCLAW_DISABLE_BONJOUR=1 减少或关闭广播,降低被局域网内攻击者发现的概率。

{
  discovery: { mdns: { mode: "minimal" } }  // off / minimal / full
}

或设置环境变量 OPENCLAW_DISABLE_BONJOUR=1。

浏览器 SSRF 防护

作用: 控制 Agent 的浏览器工具能否访问内网地址。

为什么: 如果 Agent 能浏览任意 URL,恶意技能可以构造请求访问 localhost、192.168.x.x、云元数据 API 等内网资源,这就是 SSRF(服务端请求伪造)攻击。

解决什么:dangerouslyAllowPrivateNetwork: false 阻止浏览器工具访问私有网络地址,切断 SSRF 攻击路径。

{
  browser: {
    ssrfPolicy: {
      dangerouslyAllowPrivateNetwork: false
    }
  }
}

文件权限

作用: 限制 OpenClaw 配置文件和凭据文件的系统访问权限。

为什么:~/.openclaw/ 下存储了 Gateway token、WhatsApp 凭据、Agent 认证信息。默认文件权限可能允许同机器其他用户读取。

解决什么:chmod 700/600 确保只有当前用户能访问这些文件,防止本地用户或被入侵的其他进程窃取凭据。

chmod 700 ~/.openclaw
chmod 600 ~/.openclaw/openclaw.json
chmod 600 ~/.openclaw/secrets.json

敏感文件位置(官方文档列出):

  • ~/.openclaw/credentials/whatsapp/<accountId>/creds.json
  • ~/.openclaw/credentials/<channel>-allowFrom.json
  • ~/.openclaw/agents/<agentId>/agent/auth-profiles.json

CLI 安全命令

# 安全审计
openclaw security audit           # 基础审计
openclaw security audit --deep    # 深度审计
openclaw security audit --fix     # 自动修复
openclaw security audit --json    # JSON 输出

# 密钥管理
openclaw secrets audit --check    # 检查明文密钥
openclaw secrets configure        # 配置密钥管理

# Gateway
openclaw doctor --generate-gateway-token  # 生成 token

参考资源

资源链接
官方安全文档https://docs.openclaw.ai/gateway/security
官方 Docker 文档https://docs.openclaw.ai/install/docker
官方密钥管理https://docs.openclaw.ai/gateway/secrets
GitHub SECURITY.mdhttps://github.com/openclaw/openclaw/blob/main/SECURITY.md
Knownsec 安全指南https://github.com/knownsec/openclaw-security
阅读量: 369