Appearance
OpenClaw 技能权限管理最佳实践:安全配置与风险控制指南
给 AI 太多权限,等于把家门钥匙交给陌生人。权限管理是 OpenClaw 安全的核心,用最小权限原则,让 AI 只干该干的事。
为什么权限管理重要?
真实风险案例
| 风险 | 后果 | 原因 |
|---|---|---|
| 文件误删 | 重要数据丢失 | 给了 file_write 但没限制路径 |
| 敏感泄露 | API 密钥被读取 | 给了 file_read 但没排除敏感文件 |
| 命令注入 | 系统被破坏 | 给了 execute 但没限制命令 |
| 网络攻击 | 内网被扫描 | 给了 network 但没限制目标 |
权限管理原则
最小权限原则 = 只给必要的权限 + 只在必要范围内使用权限类型详解
六大核心权限
| 权限 | 英文名 | 能力 | 风险等级 |
|---|---|---|---|
| 文件读取 | file_read | 读取任意文件 | 🔴 高 |
| 文件写入 | file_write | 创建、修改、删除文件 | 🔴 高 |
| 网络访问 | network | HTTP 请求、网络连接 | 🟡 中 |
| 命令执行 | execute | 执行 Shell 命令 | 🔴 高 |
| 浏览器操作 | browser | 控制浏览器、截图 | 🟡 中 |
| 记忆访问 | memory | 访问长期记忆、知识库 | 🟢 低 |
权限能力详解
file_read
json
{
"permission": "file_read",
"abilities": [
"读取文件内容",
"列出目录结构",
"搜索文件"
],
"risks": [
"读取敏感配置文件(.env, credentials)",
"读取私钥文件(id_rsa, .pem)",
"读取数据库文件"
]
}file_write
json
{
"permission": "file_write",
"abilities": [
"创建新文件",
"修改现有文件",
"删除文件",
"重命名文件"
],
"risks": [
"覆盖重要文件",
"删除关键数据",
"写入恶意代码"
]
}network
json
{
"permission": "network",
"abilities": [
"发起 HTTP 请求",
"WebSocket 连接",
"DNS 查询"
],
"risks": [
"访问内网敏感服务",
"发送敏感数据到外部",
"DDoS 攻击参与"
]
}execute
json
{
"permission": "execute",
"abilities": [
"执行 Shell 命令",
"运行脚本",
"调用系统工具"
],
"risks": [
"执行危险命令(rm -rf /)",
"提权攻击",
"安装恶意软件"
]
}browser
json
{
"permission": "browser",
"abilities": [
"打开浏览器",
"自动点击、输入",
"截图、录屏"
],
"risks": [
"登录敏感网站",
"泄露浏览器 Cookie",
"自动化攻击"
]
}memory
json
{
"permission": "memory",
"abilities": [
"读取长期记忆",
"写入记忆内容",
"搜索知识库"
],
"risks": [
"读取其他用户的记忆",
"污染记忆数据"
]
}权限配置方法
方法一:全局配置
在 ~/.openclaw/openclaw.json 中配置默认权限:
json
{
"permissions": {
"default_allow": ["memory"],
"default_deny": ["execute"],
"require_confirmation": ["file_write", "network"]
}
}方法二:技能级配置
在技能的 SKILL.md 中声明权限:
yaml
---
name: 文件整理助手
permissions:
- file_read
- file_write
permission_scope:
file_read:
paths: ["~/Documents", "~/Downloads"]
file_write:
paths: ["~/Documents/organized"]
exclude: ["*.env", "*.key", "credentials/*"]
---方法三:运行时限制
使用命令行参数限制权限:
bash
# 只允许读取,禁止写入
openclaw run --allow file_read --deny file_write
# 需要确认才能执行
openclaw run --confirm file_write,network风险评估矩阵
按权限组合评估
| 权限组合 | 风险等级 | 典型场景 |
|---|---|---|
| 无权限 | 🟢 安全 | 纯聊天、知识问答 |
| memory | 🟢 低风险 | 记忆管理、知识库 |
| file_read | 🟡 中风险 | 代码审查、文档分析 |
| file_read + file_write | 🔴 高风险 | 文件处理、代码生成 |
| network | 🟡 中风险 | 网页抓取、API 调用 |
| network + file_write | 🔴 高风险 | 下载文件、数据同步 |
| execute | 🔴 极高风险 | 系统管理、自动化部署 |
| 全权限 | 🔴 极高风险 | 完全控制,慎用 |
按技能类型评估
| 技能类型 | 推荐权限 | 风险控制 |
|---|---|---|
| 聊天助手 | memory | 无 |
| 代码助手 | file_read, file_write | 限制路径 |
| 网页抓取 | network, browser | 限制域名 |
| 系统运维 | execute | 需确认 + 限制命令 |
| 数据分析 | file_read, network | 限制数据源 |
安全配置最佳实践
实践一:白名单模式
只允许访问指定路径:
json
{
"permission_scope": {
"file_read": {
"mode": "whitelist",
"paths": [
"~/Projects/my-app",
"~/Documents/reports"
]
},
"file_write": {
"mode": "whitelist",
"paths": ["~/Projects/my-app/output"]
}
}
}实践二:黑名单排除
禁止访问敏感文件:
json
{
"permission_scope": {
"file_read": {
"exclude": [
".env",
"*.key",
"*.pem",
"credentials/**",
".ssh/**",
".git/**"
]
}
}
}实践三:命令限制
限制可执行的命令:
json
{
"permission_scope": {
"execute": {
"allowed_commands": [
"git",
"npm",
"node"
],
"denied_commands": [
"rm",
"sudo",
"chmod",
"chown"
]
}
}
}实践四:网络限制
限制可访问的域名:
json
{
"permission_scope": {
"network": {
"allowed_domains": [
"api.openai.com",
"api.deepseek.com",
"github.com"
],
"denied_domains": [
"localhost",
"127.0.0.1",
"192.168.*",
"10.*"
]
}
}
}实践五:确认机制
敏感操作需要用户确认:
json
{
"permissions": {
"require_confirmation": {
"file_write": {
"actions": ["delete", "overwrite"],
"message": "确认删除/覆盖文件?"
},
"execute": {
"commands": ["rm", "sudo"],
"message": "确认执行此命令?"
}
}
}
}不同场景的权限配置
场景一:代码助手
json
{
"skill": "code-assistant",
"permissions": ["file_read", "file_write"],
"permission_scope": {
"file_read": {
"paths": ["~/Projects"],
"exclude": [".env", "*.key"]
},
"file_write": {
"paths": ["~/Projects"],
"exclude": [".git/**", ".env"]
}
}
}场景二:网页抓取
json
{
"skill": "web-scraper",
"permissions": ["network", "browser", "file_write"],
"permission_scope": {
"network": {
"allowed_domains": ["*"],
"denied_domains": ["localhost", "127.0.0.1"]
},
"file_write": {
"paths": ["~/Downloads/scraped"]
}
}
}场景三:系统运维
json
{
"skill": "system-admin",
"permissions": ["execute", "file_read"],
"permission_scope": {
"execute": {
"allowed_commands": ["systemctl", "docker", "nginx"],
"denied_commands": ["rm -rf", "sudo"]
}
},
"require_confirmation": true
}场景四:知识问答
json
{
"skill": "qa-assistant",
"permissions": ["memory"],
"permission_scope": {}
}安全检查清单
安装新技能时检查
- 技能来源可信(官方或知名开发者)
- 已阅读 SKILL.md 中的权限声明
- 权限与功能匹配(不申请多余权限)
- 已配置权限范围限制
- 已启用敏感操作确认
定期安全审计
bash
# 查看所有技能权限
openclaw skill list --show-permissions
# 检查敏感权限使用情况
openclaw audit --permission execute,file_write
# 查看权限日志
openclaw logs --filter "permission_denied"检查命令示例
bash
# 列出所有有 execute 权限的技能
openclaw skill list --has-permission execute
# 检查文件访问权限配置
openclaw config check --permission file_read
# 查看最近的权限拒绝记录
openclaw logs --filter "permission" --level warn常见安全隐患与解决
隐患一:过度授权
问题: 给技能所有权限 "省事"
json
// ❌ 危险配置
{
"permissions": ["*"]
}解决: 按需授权
json
// ✅ 安全配置
{
"permissions": ["file_read"],
"permission_scope": {
"file_read": {
"paths": ["~/Documents"]
}
}
}隐患二:路径未限制
问题: 允许访问整个文件系统
json
// ❌ 危险配置
{
"permissions": ["file_read"]
// 没有限制路径
}解决: 限制访问范围
json
// ✅ 安全配置
{
"permissions": ["file_read"],
"permission_scope": {
"file_read": {
"paths": ["~/Projects/my-app"]
}
}
}隐患三:命令白名单过宽
问题: 允许所有命令
json
// ❌ 危险配置
{
"permission_scope": {
"execute": {
"allowed_commands": ["*"]
}
}
}解决: 精确限制命令
json
// ✅ 安全配置
{
"permission_scope": {
"execute": {
"allowed_commands": ["git status", "git log", "npm run build"]
}
}
}隐患四:未启用确认机制
问题: 危险操作静默执行
解决: 启用确认
json
{
"permissions": {
"require_confirmation": {
"file_write": true,
"execute": true
}
}
}社区技能安全审核
审核要点
| 检查项 | 关注点 |
|---|---|
| 权限声明 | 是否申请了不必要的权限 |
| 代码审查 | 是否有可疑的网络请求 |
| 数据处理 | 是否会泄露敏感数据 |
| 更新频率 | 是否频繁更新权限 |
使用 skill-vetter 审核
bash
openclaw skill vet <skill-name>输出示例:
安全审核报告:my-skill
权限检查:
✅ file_read - 合理,用于读取配置文件
⚠️ network - 建议限制域名
❌ execute - 建议添加确认机制
风险等级:中等
建议:添加网络域名白名单,启用执行确认总结
| 层级 | 措施 |
|---|---|
| 默认权限 | 只给最低权限(memory) |
| 技能权限 | 按需声明,不申请多余权限 |
| 范围限制 | 白名单 + 黑名单双重限制 |
| 确认机制 | 敏感操作需用户确认 |
| 定期审计 | 检查权限使用情况 |
权限管理核心原则:
- 最小权限:只给必要的权限
- 范围限制:限定操作范围
- 确认机制:危险操作需确认
- 定期审计:检查权限使用
安全不是一次性的配置,而是持续的过程。每安装一个新技能,都应该审视其权限申请,确保在可控范围内执行操作。宁可多点确认,不可一次放权。
