OpenClaw 安全配置:API密钥管理与权限控制
你给你的 AI 助手开了多少权限?它能看到你 NAS 上的文件吗?能代替你发消息吗?能执行任意命令吗?如果答不上来,这篇文章会让你后背发凉。
你可能没意识到的风险
先做个小测试。回答下面两个问题:
你配置 OpenClaw 时,exec 工具是 security: full还是deny?你的 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 存在哪
不同渠道的认证凭证存储位置不同:
| 渠道 | 存储位置 |
|---|---|
~/.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
审计会检查这六类问题,按优先级排列:
❌ 任何「开放」+ 工具启用 → 先锁 DMs/groups ❌ 公网暴露 → 立即修复 ⚠️ 浏览器远程控制暴露 → 视为操作员访问 ⚠️ 权限问题 → 确保 state/config 不 group 可写 ⚠️ 插件/扩展 → 只加载明确信任的 ℹ️ 模型选择 → 优先现代硬化模型
跑完这个命令,你会得到一个清单,告诉你哪里开放了、应该怎么改。
实战:完整加固步骤
假设你从零开始配置一个安全的 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 到底暴露了什么。
如果你在配置过程中遇到问题,欢迎在评论区留言交流。
夜雨聆风