首页openclaw教程中心 › 安全最佳实践教程

安全最佳实践教程

OpenClaw 安全模型概述

OpenClaw 作为自托管的 AI Gateway,安全是核心设计原则之一。安全模型分为多个层次: `` ┌─────────────────────────────────┐ │ 第 1 层:Gateway 认证 │ ← 谁能访问 Gateway ├─────────────────────────────────┤ │ 第 2 层:渠道安全 │ ← 谁能通过渠道对话 ├─────────────────────────────────┤ │ 第 3 层:工具权限控制 │ ← 智能体能用什么工具 ├─────────────────────────────────┤ │ 第 4 层:沙箱隔离 │ ← 代码在哪里执行 ├─────────────────────────────────┤ │ 第 5 层:密钥管理 │ ← 敏感信息如何存储 └─────────────────────────────────┘ ` 每一层都是独立的安全屏障,即使某一层被突破,其他层仍然提供保护。

Gateway 认证

Gateway 是 OpenClaw 的核心入口,保护 Gateway 的访问权限是第一道防线。

认证方式

OpenClaw 支持三种 Gateway 认证方式: #### 1. Token 认证(推荐) 使用随机生成的 Token 进行认证:
`json { "gateway": { "auth": { "type": "token", "token": "your-secret-token-here" } } } ` 生成安全的随机 Token: `bash openssl rand -hex 32 ` #### 2. 密码认证 使用用户名和密码: `json { "gateway": { "auth": { "type": "password", "username": "admin", "password": "your-strong-password" } } } ` > ⚠️ 密码认证适合个人使用,生产环境建议使用 Token 认证。 #### 3. 可信代理认证 当 Gateway 在反向代理(如 Nginx)后面时,可以信任代理的认证: `json { "gateway": { "auth": { "type": "trusted-proxy", "trustedProxies": ["127.0.0.1", "10.0.0.0/8"] } } } ` > ⚠️ 只在你完全控制代理服务器时使用此方式。错误配置可能导致未授权访问。

认证最佳实践

- 生产环境必须启用认证,不要裸跑 Gateway - Token 至少 32 字符,使用随机生成 - 定期轮换 Token(建议每 90 天) - 不要在代码仓库中提交认证信息

渠道安全

渠道是用户与智能体交互的入口,需要控制谁能通过渠道对话。

配对机制(Pairing)

某些渠道(如 WhatsApp)使用配对机制——只有通过配对流程的设备才能与智能体通信:
`bash

WhatsApp 配对

openclaw channels login whatsapp

扫描二维码完成配对

` 配对后,只有配对的手机号码才能与智能体对话。

白名单(Allowlist)

限制只有特定用户才能与智能体交互:
`json { "channels": { "telegram": { "allowlist": [ "123456789", "987654321" ] } } } ` 不在白名单中的用户发送消息会被忽略。

群组安全

在群组中,智能体默认只响应被 @ 提及的消息:
`json { "channels": { "telegram": { "groupBehavior": "mention-only" } } } ` | 模式 | 说明 | |------|------| | mention-only | 只响应 @ 提及(推荐) | | all | 响应所有消息 | | none | 在群组中不响应 |

工具权限控制

工具权限控制决定智能体能使用哪些工具,是防止智能体"越权操作"的关键。

Allow / Deny 列表

明确允许或禁止特定工具:
`json { "tools": { "allow": [ "web_search", "read", "write" ], "deny": [ "exec", "browser" ] } } ` - allow:白名单模式,只允许列出的工具 - deny:黑名单模式,禁止列出的工具 - 两者同时存在时,deny 优先

工具分组

使用预定义的工具组简化配置:
`json { "tools": { "allow": [ "group:fs", "group:web" ], "deny": [ "group:runtime" ] } } ` | 工具组 | 包含的工具 | 风险等级 | |--------|-----------|---------| | group:fs | read、write、list | 中 | | group:web | web_search、web_fetch | 低 | | group:runtime | exec、process | 高 | | group:browser | browser 系列 | 中 |

工具配置文件(tools.profile)

为不同场景创建工具配置文件:
`json { "tools": { "profiles": { "safe": { "allow": ["web_search", "read"], "deny": ["exec", "browser", "write"] }, "developer": { "allow": ["*"], "deny": [] }, "readonly": { "allow": ["read", "web_search"], "deny": ["write", "exec", "browser"] } }, "activeProfile": "safe" } } `

沙箱隔离

沙箱通过 Docker 容器隔离智能体的代码执行环境,防止恶意代码影响宿主系统。

启用沙箱

`json { "sandbox": { "mode": "docker" } } `

沙箱提供的隔离

| 隔离维度 | 说明 | |----------|------| | 文件系统 | 只能访问挂载的目录 | | 网络 | 可配置网络访问限制 | | 进程 | 容器内进程与宿主隔离 | | 资源 | CPU 和内存限制 |

何时该用沙箱

- ✅ 运行不受信任的第三方技能 - ✅ 执行用户提供的代码 - ✅ 处理来自公开渠道的请求 - ❌ 纯文本对话(无需沙箱) - ❌ 只使用 web_search 等安全工具 > 📖 详细配置请参考《沙箱隔离专题教程》。

第三方技能安全审查

安装第三方技能前,务必进行安全审查。

安全扫描等级

龙虾技能库为每个技能提供安全扫描结果: | 等级 | 含义 | 建议 | |------|------|------| | 🟢 Pass | 未发现安全问题 | 可以放心安装 | | 🟡 Warning | 存在潜在风险 | 仔细阅读扫描报告 | | 🔴 Fail | 发现安全问题 | 不建议安装 | | ⚪ Unknown | 未扫描 | 谨慎使用 |

审查要点

安装技能前检查以下内容: 1. requires.bins — 技能需要哪些系统命令
`yaml

SKILL.md frontmatter

requires: bins: - docker - git
` 如果一个"天气查询"技能要求 dockerssh 权限,这就很可疑。 2. 工具权限 — 技能请求使用哪些工具 `yaml requires: tools: - exec - write ` 3. 环境变量 — 技能需要哪些敏感信息 `yaml requires: env: - GITHUB_TOKEN - DATABASE_URL `

安装时限制权限

安装技能时可以限制其权限:
`bash clawhub install some-skill --allow-tools web_search,read `

密钥管理

环境变量

最基本的密钥管理方式——通过环境变量传递:
`bash export OPENAI_API_KEY="sk-..." export ANTHROPIC_API_KEY="sk-ant-..." `

Secrets 配置

openclaw.json 中使用 secrets 引用: `json { "providers": { "openai": { "apiKey": { "$ref": "secrets.OPENAI_API_KEY" } } } } ` Secrets 存储在 ~/.openclaw/secrets.json(权限应设为 600): `json { "OPENAI_API_KEY": "sk-...", "ANTHROPIC_API_KEY": "sk-ant-..." } ` `bash

设置文件权限(仅所有者可读写)

chmod 600 ~/.openclaw/secrets.json
`

SecretRef 机制

SecretRef 允许在配置中引用密钥而不暴露明文:
`json { "apiKey": { "type": "SecretRef", "name": "OPENAI_API_KEY" } } ``

密钥管理最佳实践

| 做法 | 推荐 | |------|------| | 使用环境变量或 SecretRef | ✅ | | 密钥文件权限设为 600 | ✅ | | 定期轮换 API Key | ✅ | | 在 .gitignore 中排除密钥文件 | ✅ | | 在代码中硬编码密钥 | ❌ | | 在日志中输出密钥 | ❌ | | 在 AGENTS.md 中写入密钥 | ❌ |

形式化验证简介

OpenClaw 使用 TLA+ 形式化验证来确保核心协议的正确性。

什么是形式化验证

形式化验证是用数学方法证明系统设计的正确性,而不仅仅依赖测试。TLA+ 是一种规范语言,可以描述系统的所有可能状态,并验证关键属性是否始终成立。

OpenClaw 验证了什么

OpenClaw 使用 TLA+ 验证了以下关键属性: - 消息顺序:消息按正确顺序处理,不会乱序 - 会话一致性:会话状态在并发操作下保持一致 - 故障恢复:Gateway 重启后能正确恢复状态

对用户的意义

形式化验证意味着 OpenClaw 的核心逻辑经过了数学级别的正确性保证,而不仅仅是"测试通过了"。这在处理并发、分布式场景时尤其重要。 > 💡 形式化验证是 OpenClaw 区别于其他 AI Gateway 的重要特性之一。

安全检查清单

部署 OpenClaw 到生产环境前,对照以下清单检查: - [ ] Gateway 已启用认证(Token 或密码) - [ ] 认证 Token 至少 32 字符 - [ ] 渠道配置了白名单或配对 - [ ] 工具权限已按需配置(非 allow: *) - [ ] 不受信任的技能在沙箱中运行 - [ ] API Key 通过环境变量或 SecretRef 管理 - [ ] secrets.json 文件权限为 600 - [ ] .gitignore 排除了所有密钥文件 - [ ] Gateway 不直接暴露到公网(使用反向代理) - [ ] 已配置 SSL/TLS 证书

小结

- OpenClaw 的安全模型分为 5 层,层层防护 - Gateway 认证是第一道防线,生产环境必须启用 - 工具权限控制防止智能体越权操作 - 沙箱隔离保护宿主系统安全 - 密钥管理使用 SecretRef 或环境变量,永远不要硬编码 - 形式化验证提供数学级别的正确性保证 #安全最佳实践 #认证配置 #权限控制 #密钥管理 #龙虾技能库
#安全#认证#权限控制#密钥管理#进阶教程

📚 相关教程

沙箱隔离专题教程进阶
深入了解 OpenClaw 的沙箱隔离机制,学会使用 Docker 容器隔离执行环境,掌握沙箱、工具策略和提权三者的区别与配合使用。
浏览器自动化专题教程进阶
掌握 OpenClaw 的浏览器工具,学会控制 Chromium 实例进行网页导航、点击、截图、文本提取等自动化操作。
远程代码执行教程进阶
掌握 OpenClaw 的代码执行工具,了解 exec、code_execution 和 process 三大工具的区别与用法,学会配置执行审批机制保障安全。
← 沙箱隔离专题教程SOUL.md 人设文件深度教程 →