乐于分享
好东西不私藏

OpenClaw 安全配置:API密钥管理与权限控制

OpenClaw 安全配置:API密钥管理与权限控制

OpenClaw 安全配置:API密钥管理与权限控制

你给你的 AI 助手开了多少权限?它能看到你 NAS 上的文件吗?能代替你发消息吗?能执行任意命令吗?如果答不上来,这篇文章会让你后背发凉。


你可能没意识到的风险

先做个小测试。回答下面两个问题:

  1. 你配置 OpenClaw 时,exec 工具是 security: full 还是 deny?
  2. 你的 Gateway 是绑定在公网 IP 上,还是 loopback?

如果两个答案都不知道,说明你的 OpenClaw 可能跑在「全开放」模式下。这不是夸张——很多部署教程的第一步就是「关闭认证方便调试」,而很多人调试完就忘了改回来。

这篇文章的目标很简单:让你跑完一个安全审计,知道自己的 OpenClaw 到底开放了什么,然后锁死它。


信任模型:先理解边界在哪里

OpenClaw 官方文档里有一句话容易被忽略:

OpenClaw 假设个人助手部署场景——每个 Gateway 代表一个信任边界。

翻译成人话:

  • 你的 Gateway = 你的地盘。能登录你服务器的人,理论上可以调用你 OpenClaw 的所有工具。
  • sessionKey 不是授权令牌,而是路由选择器。它决定消息发到哪个会话,但不负责权限验证。
  • 多人共用一个 Agent = 共用同一套工具权限。你信任你的合租人吗?

这意味着 OpenClaw 的安全策略建立在「你是唯一管理员」这个前提上。如果你把它当成「多人共享的团队工具」来用,需要自己在上层加访问控制。

理解了这一点,下面的配置才说得通。


安全基线:三行配置锁死 Gateway

OpenClaw 提供了一个加固配置模板,核心思路是最小权限暴露:

{
  gateway: {
    mode: "local",           // 只允许本地访问
    bind: "loopback",        // 不绑定公网 IP
    auth: { mode: "token", token: "替换成随机长字符串" },
  },
  session: {
    dmScope: "per-channel-peer", // DMs 隔离
  },
  tools: {
    profile: "messaging",   // 只暴露消息类工具
    deny: [
      "group:automation",
      "group:runtime",
      "group:fs",
      "sessions_spawn",
      "sessions_send"
    ],
    fs: { workspaceOnly: true },  // 文件操作限制在工作区
    exec: { security: "deny", ask: "always" }, // 默认拒绝 exec
    elevated: { enabled: false },
  },
}

逐行解释为什么要这样配:

配置项 值 理由
gateway.mode local 不接受跨网络请求,所有请求必须来自本机
gateway.bind loopback 不绑定公网地址,防止扫描
gateway.auth token 模式 访问需要带 token,类似于密码
tools.exec.security deny 默认禁止执行命令,需要时单独授权
tools.elevated.enabled false 禁止提权操作

如果你的 OpenClaw 暴露在公网(比如需要从外部访问控制台),至少要把 auth.token 改成一个随机长字符串,不要用默认或简单的 token。


DM 访问模式:谁可以私聊你的 AI

DM(Direct Message)策略控制陌生人能否向你的 AI 发消息。有四种模式:

session: {
  dmScope: "per-channel-peer" // 推荐配置
}
模式 含义 适用场景
pairing 新联系人需要配对确认 默认推荐
allowlist 只有白名单用户可以 高安全需求
open 任何人可以 DM ⚠️ 危险,慎用
disabled 完全禁用 DM 需要严格隔离时

最常见的错误配置:dmScope 设成 open,同时 exec 工具没限制,等于给任何人提供了你服务器的 shell 权限。


凭证管理:你的 Key 存在哪

不同渠道的认证凭证存储位置不同:

渠道 存储位置
WhatsApp ~/.openclaw/credentials/whatsapp/<accountId>/creds.json
Telegram bot config/env 或 channels.telegram.tokenFile
Discord bot config/env 或 SecretRef
模型认证 ~/.openclaw/agents/<agentId>/agent/auth-profiles.json
文件密钥 ~/.openclaw/secrets.json

原则只有一条:这些文件不能被 group 或 world 读取。

# 检查权限(在 Gateway 所在机器执行)
ls -la ~/.openclaw/credentials/
ls -la ~/.openclaw/secrets.json

# 如果发现权限问题,修复:
chmod 600 ~/.openclaw/secrets.json
chmod -R 700 ~/.openclaw/credentials/

安全审计:一命令检查所有风险

这是最有价值的命令——openclaw security audit。它会检查以下维度:

# 快速审计(推荐先跑这个)
openclaw security audit

# 深度审计
openclaw security audit --deep

# 自动修复已知问题
openclaw security audit --fix

# JSON 格式输出(供自动化脚本使用)
openclaw security audit --json

审计会检查这六类问题,按优先级排列:

  1. ❌ 任何「开放」+ 工具启用 → 先锁 DMs/groups
  2. ❌ 公网暴露 → 立即修复
  3. ⚠️ 浏览器远程控制暴露 → 视为操作员访问
  4. ⚠️ 权限问题 → 确保 state/config 不 group 可写
  5. ⚠️ 插件/扩展 → 只加载明确信任的
  6. ℹ️ 模型选择 → 优先现代硬化模型

跑完这个命令,你会得到一个清单,告诉你哪里开放了、应该怎么改。


实战:完整加固步骤

假设你从零开始配置一个安全的 OpenClaw:

第一步:运行基线审计

openclaw security audit

第二步:修改配置文件

# 编辑配置文件
nano ~/.openclaw/openclaw.json

按上面的加固模板填入 gateway、session、tools 三个区块。

第三步:重启 Gateway

openclaw gateway restart

第四步:验证配置

# 确认 Gateway 只监听本地
openclaw gateway status

# 再次审计确认问题已修复
openclaw security audit

第五步:配置 DM 白名单(推荐)

如果只有特定人需要访问:

{
  session: {
    dmScope: "allowlist",
    allowFrom: ["ou_xxxxxxxx", "ou_yyyyyyyy"]
  }
}

总结

安全配置的核心就是三句话:

  • 网络层:Gateway 不暴露公网,最低限度的访问控制
  • 工具层:exec 和 elevated 默认关闭,按需开启
  • 凭证层:Key 文件权限正确,不在配置文件里明文存敏感信息

最关键的动作:现在就去跑一下 openclaw security audit,看看你的 OpenClaw 到底暴露了什么。


如果你在配置过程中遇到问题,欢迎在评论区留言交流。

相关学习资料