OpenClaw对接免费大模型时存在越界风险,需严格限制Skill权限:检查SKILL.md中tools是否冗余启用web_fetch或exec;在claw.permissions.yaml中按域名放行或正则禁用高危路径;禁用非必要系统工具并配置write白名单;最后通过openclaw skill vet强制拦截高危行为。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

对接免费大模型时,OpenClaw的Skill若未严格限定权限,可能在无感知状态下读取本地敏感文件、执行任意系统命令或外发聊天记录——这不是理论风险,而是已复现的越界行为:某用户启用免费版Qwen Skill后,因未关闭exec工具,Agent在响应“帮我查下当前目录”时自动执行了ls -la /home,暴露了家目录结构。
确认Skill是否真正需要外部模型调用权限
打开该Skill根目录下的SKILL.md文件,定位到tools:区块。若其中包含web_fetch或http_request,才需配置网络访问;若仅依赖本地模型(如llama.cpp),则web_fetch必须从列表中彻底删除——保留它等于给所有后续Prompt开放HTTP出口,哪怕你只打算调用本地API。
检查input:字段声明的参数名,与Skill内部实际使用的变量名是否一致。曾有用户因SKILL.md写input: model_url而代码里硬编码了https://api-free-llm.dev/v1,导致claw.permissions.yaml中对model_url的路径白名单完全失效。
在claw.permissions.yaml中锁定网络请求范围
方法一:按域名精确放行
在grants:区块下新增角色条目,例如为qwen-free-skill定义专用角色:
roles:
qwen_free_user:
capabilities:
- web_fetch
constraints:
- domain: api-free-qwen.dev
- method: POST
- path_prefix: /chat/completions
【domain必须与Skill实际请求的Host头完全一致,大小写敏感,不带协议和端口】
方法二:用正则禁用高危路径
若免费API提供方同时开放管理接口(如/api/v1/admin),在constraints中追加:
- domain: api-free-qwen.dev
path_regex: "^/(?!chat/|v1/).*$"
这条规则会拒绝所有不以/chat/或/v1/开头的路径请求,防止Skill被诱导调用隐藏管理端点。
切断非必要系统能力链路
第一步:进入OpenClaw配置目录,执行openclaw security audit,查看输出中是否有exec is enabled but not constrained警告。
第二步:编辑claw.tools.yaml,将exec工具的状态设为disabled: true。这一步不可跳过——即使你的Skill没声明需要exec,只要tools.yaml里enabled为true,任何能触发Tool调用的Prompt Injection都可能激活它。
第三步:对write工具实施路径白名单。在claw.tools.yaml中添加:
write:
allowed_paths:
- "{{.workspace}}/skill-output/"
- "/tmp/openclaw-temp/"
注意:不要使用~或$HOME,OpenClaw运行时不会展开环境变量,写错会导致整个write功能静默失败。
第四步:重启OpenClaw Gateway进程。配置变更仅在重启后生效,热重载不触发tools层权限校验。
启用Skill Vetter强制拦截高危行为
执行openclaw skill vet ./skills/qwen-free-skill,等待扫描完成。
若返回Result: DANGEROUS - found exec('curl') in skill code,立即停止部署。该提示意味着Skill内部Python脚本直接调用了os.system,绕过了OpenClaw的tools管控机制,此时claw.permissions.yaml的所有配置均无效。
只有当输出明确显示SAFE且无CAUTION项时,才可继续执行openclaw skill enable qwen-free-skill。


















