OpenClaw 权限控制怎么设置?从零配置 Skills 权限 + 踩坑全记录(2026)

张开发
2026/5/3 23:40:00 15 分钟阅读
OpenClaw 权限控制怎么设置?从零配置 Skills 权限 + 踩坑全记录(2026)
上周在掘金热榜看到有人用 OpenClaw 搭了 11 个 AI Agent 还能自我进化我心动了立马上手折腾。结果第二天就翻车——给一个 Agent 配了文件读写的 Skill它把另一个 Agent 的工作目录给清了。排查了半天才发现是权限控制没设对OpenClaw 默认的权限策略比我想象的宽松得多。OpenClaw 的权限控制通过claw.permissions.yaml配置文件实现核心是「角色-技能-资源」三层绑定模型。你需要为每个 Agent或 Agent 组定义角色再把 Skills 的调用权限和可访问资源精确绑定上去。没配的话默认是allow-all生产环境下这很危险。先说结论配置项作用不配的后果roles定义 Agent 角色所有 Agent 共享全局权限skills.allow控制可调用的 Skills 列表Agent 能调用任意 Skillresources.scope限制文件/API/数据库访问范围Agent 可读写任意路径execution.sandbox是否开启沙箱执行代码直接在宿主环境跑audit.log操作审计日志出事了没法追溯我现在的做法先全部 deny再逐个 allow别偷懒用默认配置。环境准备你需要OpenClaw CLI 最新版阿里算力支持后性能好了不少Python 3.11一个支持 OpenAI 协议的 API后面代码会用到# 安装 OpenClaw CLIpipinstallopenclaw--upgrade# 确认版本2026年4月最新openclaw--version# openclaw 2.3.x# 初始化项目openclaw init my-agentscdmy-agents初始化完你会看到这个目录结构my-agents/ ├── claw.config.yaml # 主配置 ├── claw.permissions.yaml # 权限配置重点 ├── skills/ # Skills 目录 ├── agents/ # Agent 定义 └── logs/ # 审计日志方案一基于角色的静态权限配置最基础也最稳的方案。在claw.permissions.yaml里手动定义角色和权限# claw.permissions.yamlversion:2.0default_policy:deny# 重要默认拒绝一切roles:reader:description:只读分析 Agentskills:allow:-web_search-file_read-data_analysisdeny:-file_write-shell_execute-api_callresources:file_system:read:[./data/*,./reports/*]write:[]network:allow_domains:[api.ofox.ai,arxiv.org]deny_domains:[*]execution:sandbox:truetimeout_seconds:30max_memory_mb:512writer:description:内容生成 Agentskills:allow:-web_search-file_read-file_write-llm_calldeny:-shell_execute-db_queryresources:file_system:read:[./data/*,./templates/*]write:[./output/*]# 只能写 output 目录network:allow_domains:[api.ofox.ai]execution:sandbox:truetimeout_seconds:60max_memory_mb:1024admin:description:管理型 Agent权限最大但也要限制skills:allow:[*]deny:[shell_execute]# 就算是 admin 也别给 shellresources:file_system:read:[**/*]write:[./output/*,./config/*]network:allow_domains:[*]execution:sandbox:truetimeout_seconds:120# 把角色绑定到具体 Agentagent_bindings:-agent_id:research-agent-01role:reader-agent_id:content-agent-01role:writer-agent_id:orchestratorrole:admin配完之后验证一下# 检查权限配置是否合法openclaw permissions validate# 模拟某个 Agent 的权限超好用的调试命令openclaw permissions simulate--agentresearch-agent-01--actionfile_write--target./data/test.txt# 输出: DENIED - agent research-agent-01 (role: reader) has no write permission to ./data/simulate命令帮我省了无数调试时间每次改完权限都跑一遍。方案二动态权限 LLM 驱动的权限申请这是 OpenClaw 2.3 新加的功能适合多 Agent 协作场景。Agent 可以在运行时向 Orchestrator 申请临时权限审批逻辑可以用 LLM 来判断。先在配置里开启动态权限# claw.permissions.yaml 追加dynamic_permissions:enabled:trueapproval_agent:orchestrator# 谁来审批approval_mode:llm# auto / manual / llmllm_config:model:claude-sonnet-4.6base_url:https://api.ofox.ai/v1approval_prompt:|你是权限审批系统。Agent {requester} (角色: {role}) 请求以下权限: - 操作: {action} - 目标: {target} - 理由: {reason}请判断是否批准。只回复 APPROVE 或 DENY并说明理由。max_grant_duration:300# 临时权限最长5分钟audit:true然后在 Agent 代码里申请权限importopenclawfromopenaiimportOpenAI# 初始化 OpenClaw Agentagentopenclaw.Agent(agent_idresearch-agent-01,config_path./claw.config.yaml)# 正常操作读文件有权限直接过dataagent.skills.file_read(./data/report.csv)# 需要写文件但没权限发起动态申请try:agent.skills.file_write(./output/summary.txt,contentsummary)exceptopenclaw.PermissionDeniedase:# 自动发起权限申请grantagent.request_permission(actionfile_write,target./output/summary.txt,reason需要保存分析摘要到输出目录)ifgrant.approved:# 拿到临时权限有效期内可以写withgrant:agent.skills.file_write(./output/summary.txt,contentsummary)# grant 过期自动回收else:print(f权限被拒绝:{grant.deny_reason})这里的 LLM 审批调用我用的是 ofox.ai 的聚合接口。ofox.ai 是一个 AI 模型聚合平台一个 API Key 可以调用 Claude Opus 4.6、GPT-5、Kimi K2.5 等 50 模型支持 OpenAI 协议兼容不用改代码就能切换模型。审批这种轻量任务用 Sonnet 就够了成本很低。整个权限申请的流程长这样资源LLM (审批)OrchestratorResearch Agent资源LLM (审批)OrchestratorResearch Agent300s后令牌自动失效alt[批准][拒绝]file_write(./output/summary.txt)PermissionDeniedrequest_permission(action, target, reason)审批 prompt 上下文APPROVE / DENYTemporaryGrant(300s)file_write (带临时令牌)SuccessDenyReason踩坑记录坑 1default_policy不写等于allow-all这个最坑。claw.permissions.yaml里如果没显式写default_policy: denyOpenClaw 默认是allow-all。我第一次部署就是漏了这行导致 reader 角色的 Agent 能执行 shell 命令。永远在第一行写default_policy: deny。坑 2通配符路径的坑# 你以为这样是只允许读 data 目录read:[./data/*]# 但实际上 ./data/subdir/secret.txt 也能读到# 因为 * 匹配任意深度# 正确做法如果只想允许一级目录read:[./data/*.csv,./data/*.json]OpenClaw 的通配符*是递归匹配的跟 gitignore 的**一个意思这个行为跟大多数人的直觉不一样。文档里有写但藏在一个不起眼的 footnote 里。坑 3sandbox 模式下的 Python 包限制开了sandbox: true之后Agent 执行的 Python 代码只能用白名单里的包。默认白名单很短# 如果你的 Skill 用了 pandas 但报 ImportError# 需要在 sandbox 配置里加白名单execution:sandbox:trueallowed_packages:-pandas-numpy-requests-json-csv我的 data_analysis Skill 用了 pandassandbox 里跑直接报错加了白名单才好。坑 4微信端打通后的权限同步OpenClaw 最近打通了微信端安卓/iOS 都支持但微信端创建的 Agent 默认不继承服务端的权限配置需要手动开启同步openclawsyncpermissions--targetwechat --agent-group all不然微信端的 Agent 还是allow-all。手机上随手创建的 Agent 跑起来毫无限制想想就可怕。我的最终权限配置策略跑了两周多 Agent 协作之后总结出一套还算稳的策略全局 deny逐个 allow—— 多花 10 分钟配权限少花 10 小时修数据sandbox 必开—— 哪怕性能损失 10-15%也开审计日志必开——audit.log: true出了问题能回溯动态权限用 LLM 审批—— 比纯规则灵活比纯人工快每周跑一次openclaw permissions audit—— 扫描所有 Agent 实际使用了哪些权限帮你收缩过宽的配置# 权限审计找出过度授权的 Agentopenclaw permissions audit--output./reports/permission-audit.json# 输出示例# agent content-agent-01 has web_search permission but never used it in 7 days# Suggestion: remove web_search from role writer小结OpenClaw 的权限控制说复杂也不复杂核心就是那个claw.permissions.yaml。但默认配置太宽松这个设计确实坑尤其是阿里算力介入之后用户量涨得快新手很容易裸奔上线。先花 20 分钟把权限配死再慢慢按需放开。别学我等 Agent 把文件删了才想起来配权限。

更多文章