第 13 章
13 / 16安全最佳实践
OpenClaw 的安全起点不是“防住所有 Prompt 注入”,而是先限制谁能触发 Agent以及Agent 被触发后能做什么。官方安全文档给出的优先顺序也是:先收紧开放的 DM/群组,再处理工具、网络暴露、文件权限、插件与模型。
先确认信任模型
OpenClaw 默认面向个人助手场景:一个 Gateway 对应一个受信任操作边界。它不是让多个互不信任用户共享同一高权限 Agent 的多租户隔离层。
如果两个用户或组织不能互相信任,正确做法是拆分 Gateway 和凭证;高风险场景还应使用不同 OS 用户或主机。
风险不是一项,而是相乘
外部输入 × 可用工具 × 数据范围 × 自动执行
↓
故障半径
一个公开群聊本身未必造成事故;但公开群聊加上 Shell、文件和网络写权限,就会让恶意或误导性内容获得真实执行能力。
上线前的四层检查
| 层 | 要检查什么 | 安全基线 |
|---|---|---|
| 入口 | DM、群聊、配对、允许名单 | 默认拒绝陌生发送者;群聊要求明确触发 |
| Gateway | 绑定地址、认证、远程访问 | 优先 loopback;不要无认证暴露到公网 |
| 工具 | Shell、文件、浏览器、网络、Cron | 默认最小权限;高影响动作必须询问 |
| 数据 | 配置、凭证、日志、工作区 | 限制可读范围;不要把凭证写进 Skill 或对话 |
运行官方安全审计
每次修改安全相关配置或开放新的网络入口后运行:
openclaw security audit
需要探测运行中的 Gateway 时:
openclaw security audit --deep
--fix 只执行有限的安全修复,不能替你决定业务需要哪些权限。运行前仍要读清变更范围:
openclaw security audit --fix
权限矩阵
不要只写“管理员可以使用全部工具”。把动作写到可审查粒度:
| 动作 | 默认 | 允许条件 | 回退 |
|---|---|---|---|
| 读取指定工作区 | 允许 | 仅工作区路径 | 停止任务并记录路径 |
| 修改文件 | 询问 | 显示目标文件与变更摘要 | 使用版本记录恢复 |
| 执行 Shell | 拒绝 | 单独审批具体命令 | 终止进程并保留日志 |
| 向外发送消息 | 询问 | 展示收件人和最终正文 | 停止后续发送并通知人工 |
| 创建 Cron | 询问 | 写明频率、输入和所有者 | 禁用任务并记录最后执行 |
Pairing 与 allowlist 解决什么
Pairing/allowlist 控制谁能直接向 Agent 发起请求。但它们不能净化对话里引用的网页、附件、转发消息或工具结果。受信任用户也可能把不受信任内容带入上下文。
因此仍需同时限制工具权限、工作区范围和自动执行规则。
Skill 和插件审查
安装前回答五个问题:
- 来源和维护者能否确认?
- 它会读取哪些文件、环境变量或凭证?
- 它会访问哪些域名或外部服务?
- 它是否执行脚本或安装依赖?
- 删除它以后,如何撤销凭证和残留任务?
看不懂脚本时,不要把它安装到持有生产凭证的 Gateway。
本章实践:完成安全基线
- Gateway 只暴露在需要的网络范围;
- DM 与群组入口已配置 pairing/allowlist;
- 文件权限限制到指定工作区;
- Shell、浏览器写入、消息发送和 Cron 默认拒绝或询问;
- 凭证不在 Skill、Prompt、日志样例中;
- 已运行
openclaw security audit并记录结果; - 已写明停止、撤销和人工通知流程。
完成标准:拿任意一条外部输入,都能指出它最多可以触达哪些数据和动作。