OpenClaw Permissions Audit

用于审计 OpenClaw 的权限配置,生成结构化安全报告。

已扫描
适合谁
系统管理员、安全审计人员
不适合谁
普通终端用户、无 OpenClaw 配置访问权限者
国内可用性
需网络配置。可能需要网络配置或第三方服务可访问。
安装难度
新手友好(★☆☆)。基于终端操作、依赖、API Key 和本地环境要求的初步判断。

安装与下载

openclaw skills install @rushingai/openclaw-permissions

Skill 说明

命令、参数、文件名以原文为准

OpenClaw 权限审计技能

目标

读取 OpenClaw 配置文件,并生成结构化的权限报告,展示 OpenClaw 当前持有的访问权限、已连接的服务以及被允许或拒绝的功能。

步骤

1. 读取配置文件

按顺序尝试读取以下文件。若某文件不存在,则将其所有字段标记为 ⚠️ 未配置 —— 不得静默跳过。

  • ~/.openclaw/openclaw.json — 主配置文件
  • ~/.openclaw/exec-approvals.json — 工具执行审批规则
  • ~/.openclaw/identity/device-auth.json — 设备认证信息
  • ~/.openclaw/identity/device.json — 设备身份信息

2. 提取权限维度

提取并报告以下维度:

A. AI 模型 API 访问权限

  • openclaw.json → auth.profiles 中,列出每个配置的提供商名称(如:anthropic、kimi-coding)。不显示凭证。
  • openclaw.json → env 中,列出 API 密钥的键名。绝不显示值。
  • openclaw.json → agents.defaults.model 中,显示默认主模型及任何配置的备用模型。

B. 通信渠道 / 通信访问权限

  • openclaw.json → channels 中,对每个通道条目显示:

- 启用状态

- 授权用户 ID 数量,仅显示每个 ID 的前 4 位字符(不显示完整 ID)。用户 ID 位于路径 channels.<channel>.guilds[guildId].users[] 下,需准确导航至该路径,而非顶层 users 键。

- 授权服务器/频道 ID 数量(仅数量,不显示部分 ID)

- 群组策略(白名单 / 开放)

C. 网关访问权限

  • openclaw.json → gateway 中,显示:

- 端口、绑定地址、运行模式

- 认证模式(token / none)——仅显示存在性(✅/❌),不显示令牌值

- Tailscale 是否启用

- 被拒绝的命令列表(命令名称可完整显示)

D. 工具执行权限

  • openclaw.json → tools.profile 中,显示配置的权限配置文件名称。
  • exec-approvals.json → agents 中,按代理名称列出各代理的工具审批规则摘要。
  • exec-approvals.json → defaults 中,列出默认工具审批规则。
  • 不得读取或报告 exec-approvals.json 中的 socket 字段。该字段包含 IPC 认证令牌和绝对套接字路径,必须完全跳过。

E. 命令权限

  • openclaw.json → commands 中,显示允许调用命令的来源,以及是否允许重启。
  • openclaw.json → session.dmScope 中,显示私信会话的作用域值。

F. 设备身份与认证

  • identity/device-auth.json 中,显示设备 ID 的前 8 位字符,tokens.operator 是否存在(✅/❌),操作员角色 tokens.operator.role,操作员作用域 tokens.operator.scopes
  • identity/device.json 中,显示公钥是否存在(✅/❌)。不得输出或提及 privateKeyPem。若可识别公钥算法且不暴露密钥字节,可显示算法类型。

G. 内部钩子

  • openclaw.json → hooks.internal.entries 中,按名称和启用状态列出每个钩子条目。请导航至 .entries 子键,而非父级 hooks.internal 对象。

3. 输出格式

以 Markdown 表格和分组列表形式输出。示例结构如下:

## OpenClaw 权限报告

### AI 模型 API
| 提供商 | 配置文件 | 认证方式 | 状态 |
|--------|----------|----------|------|
| anthropic | anthropic:default | api_key | ✅ 已配置 |
| kimi-coding | kimi-coding:default | api_key | ✅ 已配置 |

环境 API 密钥:EXAMPLE_API_KEY ✅

默认模型:provider/model-id
备用模型:provider/model-id

### 通信渠道访问
| 通道 | 状态 | 策略 | 授权用户 | 流式传输 |
|------|------|------|----------|----------|
| Discord | ✅ 启用 | 白名单 | 1 个用户 (XXXX...) | 关闭 |

授权服务器:1 个

### 网关
| 项目 | 值 |
|------|----|
| 模式 | local |
| 端口 | XXXXX |
| 绑定 | loopback |
| 认证 | token ✅ |
| Tailscale | 关闭 |

被拒绝的命令:camera.snap · camera.clip · screen.record · ...

### 工具权限
- 权限配置文件:full
- 默认审批规则:(未配置)
- 代理特定规则:(未配置)

### 命令权限
- 原生命令:auto
- 原生技能:auto
- 允许重启:✅
- 允许来自 Discord 的命令:✅ (1 个用户)
- 会话私信作用域:per-channel-peer

### 内部钩子
| 钩子 | 状态 |
|------|------|
| boot-md | ✅ 启用 |
| command-logger | ✅ 启用 |
| session-memory | ✅ 启用 |
| bootstrap-extra-files | ✅ 启用 |

### 设备身份
- 设备 ID:XXXXXXX... (已配置)
- 公钥:✅ 存在 (Ed25519)
- 操作员令牌:✅ 存在
- 操作员角色:operator
- 操作员作用域:operator.admin

4. 安全规则

禁止输出内容:

  • 完整的令牌值(Discord 令牌、网关令牌、设备令牌)
  • 完整的 API 密钥值
  • 私钥或密码 — 包括 device.json 中的 privateKeyPem,应视为等同于密码处理
  • 完整的用户 ID 或设备 ID
  • 展开的文件路径 — 始终使用 ~/.openclaw/ 符号表示,不得使用 /Users/<username>/... 形式

可安全输出内容:

  • 存在性状态(✅ / ❌)
  • ID 的前 4–8 位字符(仅用于参考,非认证用途)
  • 数量统计(如:“1 个用户”、“2 个服务器”)
  • 权限作用域描述

未识别字段默认规则: 若配置文件中包含本规则未覆盖的字段,采用最严格的默认策略 —— 仅显示存在性(✅ / ❌),绝不显示值。

5. 缺失数据处理

  • 文件不存在 → 将其所有字段标记为 ⚠️ 未配置
  • 字段为空 → 标记为 (空)
  • 解析错误 → 标记为 ⚠️ 无法读取
R
@rushingai

已收录 1 个 Skill

相关推荐