OpenClaw 工具权限控制
权限模型设计
1 | |
工具权限申请
工具分类与权限需求
文件系统工具 (group:fs)
| 工具 | 权限需求 | 实现方式 |
|---|---|---|
read |
工作目录读权限 | 路径限制检查 |
write |
工作目录写权限 | 路径限制检查 |
edit |
工作目录写权限 | 路径限制检查 |
apply_patch |
工作目录写权限 | 路径限制检查 |
沙箱模式:
- 限制在工作目录内
- 无法访问系统文件
运行时工具 (group:runtime)
| 工具 | 权限需求 | 实现方式 |
|---|---|---|
exec |
Exec Approval | 三层检查(策略 + 审批 + TCC) |
process |
同 exec | 继承 exec 权限 |
exec 权限流程:
1 | |
nodes 工具
| 动作 | 权限需求 | 实现方式 |
|---|---|---|
status |
无 | 公开信息 |
describe |
无 | 公开信息 |
pending |
无 | 公开信息 |
approve |
所有者权限 | 仅限 owner sender |
reject |
所有者权限 | 仅限 owner sender |
notify |
通知权限 | TCC Notification |
camera_snap |
相机权限 | TCC Camera + 前景检查 |
camera_clip |
相机 + 麦克风 | TCC Camera + Mic + 前景 |
screen_record |
屏幕录制 | TCC Screen Recording + 前景 |
location_get |
位置权限 | TCC Location |
run |
Exec Approval | 节点端 Exec 审批 + TCC |
invoke |
命令策略 | 命令白名单检查 |
节点命令策略
平台默认允许列表:
iOS
1 | |
Android
1 | |
macOS
1 | |
Linux/Windows
1 | |
危险命令(默认禁止):
1 | |
配置覆盖:
1 | |
Exec 审批系统
审批模式:
| 模式 | 行为 | 适用场景 |
|---|---|---|
deny |
拒绝所有 exec | 高安全环境 |
allowlist |
仅允许白名单命令 | 默认推荐 |
full |
允许所有命令 | 受信任环境 |
自动学习:
- 用户批准一次后,可添加到白名单
- 包装器命令(env, nice, nohup)自动解包记录内层命令
- Shell 包装器(bash -c)限制环境变量
TCC 权限 (macOS/iOS)
权限类型:
| 权限 | 工具 | 检查点 |
|---|---|---|
| Screen Recording | system.run (needsScreenRecording) |
启动时检查 |
| Accessibility | system.run (某些命令) |
启动时检查 |
| Camera | camera_snap, camera_clip |
首次使用时弹窗 |
| Microphone | camera_clip (带音频) |
首次使用时弹窗 |
| Location | location_get |
首次使用时弹窗 |
| Notifications | system.notify |
首次使用时弹窗 |
权限状态查询:
1 | |
权限不足处理:
- 返回
PERMISSION_MISSING错误 - 提示用户到系统设置开启权限
- macOS 提供打开系统设置的快捷方式
设备操控实现
system.run 实现
Gateway 端流程:
1 | |
macOS Node 端实现:
1 | |
Camera 控制实现
Tool 端调用:
1 | |
iOS Node 端实现:
1 | |
Screen Record 实现
Tool 端调用:
1 | |
macOS Node 端实现:
1 | |
Location 获取实现
Tool 端调用:
1 | |
iOS Node 端实现:
1 | |
Canvas 控制实现
Tool 端调用:
1 | |
MacOS Node 端实现:
1 | |
APNS 后台唤醒
唤醒流程
1 | |
APNS Payload
1 | |
实现代码
Gateway 端:
1 | |
iOS Node 端:
1 | |
权限状态管理
能力广告
节点连接时广告其能力:
1 | |
权限检查
Gateway 端检查:
1 | |
权限变化通知
节点权限变化时主动通知 Gateway:
1 | |
OpenClaw 工具权限控制
https://blog.xiaoaojianghu.fun/posts/5bf9ba19.html