☰
OpenClaw 到底不安全在哪?把 Skill、shell、powershell 风险讲透,也别自己吓自己
2026/9/29 9:56:34 网站建设 项目流程

1. OpenClaw 的 Skill 执行链到底在跑什么,为什么 shell 调用面才是风险核心

先把一个概念说清楚:OpenClaw(很多人也直接叫 Claw)不是一个聊天框,它是一个能真正落到操作系统上干活的 Agent 运行时。你给它一句「帮我把这个 Python 环境修一下」,它背后会走一条完整的执行链:解析意图 → 选择 Skill → 生成 shell/powershell 命令 → 调用系统 shell 执行 → 读取输出 → 决定下一步。这条链上任何一环失控,后果都不是「回答错了」这么轻,而是「你机器上的东西真的被改了」。

所以讨论 OpenClaw 安全性,绕不开三个词:Skill、shell、powershell。Skill 是能力封装,shell/powershell 是真正动手的那只手。风险不在「AI 有想法」,而在「想法能直接变成系统调用」。

我先把执行链拆成四层,你对照自己的使用方式看在哪一层踩了坑:

第一层是意图层。你说的话本身可能模糊,比如「清理一下没用的东西」。模型会自行补全成具体动作,这一步就可能把「清理缓存」理解成「删除某个目录」。

第二层是 Skill 选择层。OpenClaw 会从可用 Skill 里挑一个来完成任务。如果 Skill 来源不可信,或者 Skill 描述里藏了诱导性指令,模型可能选到一个「看起来对、实际带副作用」的 Skill。

第三层是命令生成层。这是 shell/powershell 风险最集中的地方。模型把任务翻译成命令行,比如Remove-Item -Recurse -Force、rm -rf、Invoke-WebRequest ... | iex。命令注入、参数拼接错误、路径通配符误伤,基本都发生在这里。

第四层是执行与回写层。命令真的跑了,改了文件、装了软件、动了注册表或环境变量。这一层没有回滚机制的话,出事就是既成事实。

很多人一听到「AI 能执行 shell」就慌,其实慌错了方向。真正该盯的是权限边界和输入可信度这两件事。权限边界决定「错了能错多大」,输入可信度决定「会不会被引导着往错的方向走」。把这两个收住,OpenClaw 的风险就从「玄学恐惧」变成「可管理的工程问题」。

举个我实际遇到的场景:让 OpenClaw 帮忙装一个命令行工具,它生成的 powershell 里带了Set-ExecutionPolicy Bypass,理由是「避免脚本被拦」。这条命令本身不算恶意,但它把执行策略这道防线临时拆了。如果此时它下载的脚本来源不可信,Bypass 就等于给恶意脚本开了门。这就是典型的「单条命令无害、组合起来危险」。

所以后面几节我会按这个顺序讲:先讲清楚风险分类,再给可复制的配置骨架,然后给验证动作,最后讲报错排查。目标不是让你不敢用,而是让你知道边界在哪、怎么把边界写进配置里。

2. 接入 TaoToken 前的前置准备:统一 Key 通道与权限收敛思路

在讲配置之前,先解决一个现实问题:OpenClaw 这类 Agent 要调用模型,就得有 API Key。如果你每个工具、每个 Skill 都塞一把不同的 Key,管理成本高不说,一旦某把 Key 泄露,你根本不知道是从哪个环节漏的。我自己的做法是把模型调用统一走一个通道,TaoToken 就是干这个的——它提供统一的 API 入口,OpenClaw、Cline、Claude Code 这些工具都指向同一个 Base URL 和同一把 Key,出问题只查一个地方。

这一步和「安全」直接相关:Key 收敛之后,你只需要保护一个凭据点,而不是散落各处。同时统一通道也方便你做调用审计,哪个 Skill 在什么时候发了什么请求,日志是集中的。

前置准备分三件事。

第一件,拿到统一 Key。访问 https://taotoken.net/api-keys 创建 API Key。注意这个页面是 deep link,创建出来的 Key 只显示一次,复制后立刻存到密码管理器里,别贴在聊天记录或代码注释里。

第二件,确认 Base URL。TaoToken 的 API 入口是 https://taotoken.net/api,注意这个地址不带任何查询参数,配置时原样填。很多工具要求 Base URL 以/v1结尾,具体看工具文档,但根地址就是上面这个。

第三件,想清楚权限收敛策略。在接入之前先定三条规矩:

  • OpenClaw 日常运行用普通用户权限,不用管理员。
  • Skill 只从可信来源加载,禁止「随手搜到就执行」。
  • 模型调用统一走 TaoToken,不在本地散落多把 Key。

这三条定下来,后面的 config.toml 和 settings.json 才有依据。配置不是抄完就完事,它得对应你真实的使用习惯。比如你如果经常让 OpenClaw 装系统级软件,那提权流程要单独设计;如果只是写文档、跑普通脚本,那默认普通权限就够了。

这里插一句关于模型选择的经验。能力更强的模型在识别危险命令、拒绝执行可疑脚本方面确实更稳。TaoToken 的模型对话入口 https://taotoken.net/models 可以让你先试不同模型对同一段危险命令的反应,再决定 OpenClaw 默认挂哪个模型。这个动作花不了几分钟,但能帮你避开「用弱模型跑高权限任务」这种最危险的组合。

前置准备做完,你手里应该有三样东西:一把 TaoToken Key、一个 Base URL、一份权限收敛策略。接下来进配置。

3. 可复制的 config.toml 与 settings.json 安全骨架

这一节给可直接复制的配置片段。路径和字段名按 OpenClaw 常见约定写,你对照自己版本微调。核心思路是:把权限、来源白名单、命令拦截规则写进配置,而不是靠每次口头叮嘱。

先看 config.toml。这个文件通常放在 OpenClaw 的配置目录下,Windows 一般在%USERPROFILE%\.openclaw\config.toml,macOS/Linux 在~/.openclaw/config.toml。

# OpenClaw 主配置:安全骨架 [model] # 统一走 TaoToken 通道,避免多把 Key 散落 base_url = "https://taotoken.net/api" api_key = "${TAOTOKEN_API_KEY}" # 从环境变量读取,不硬编码 model_id = "your-model-id" # 填你在 TaoToken 控制台选定的模型 ID timeout_seconds = 60 [execution] # 默认普通权限,禁止自动提权 run_as_admin = false allow_elevation = false # 提权必须人工确认 require_confirmation_on_elevation = true # 命令执行超时,防止挂死 command_timeout_seconds = 120 # 关键目录改动前自动备份 backup_before_write = true backup_dir = "~/.openclaw/backups" [execution.shell] # 允许的 shell 类型 allowed = ["powershell", "bash"] # 危险命令拦截规则(正则) deny_patterns = [ "rm\\s+-rf\\s+/", "Remove-Item\\s+.*-Recurse\\s+.*-Force", "Set-ExecutionPolicy\\s+Bypass", "Invoke-WebRequest.*\\|\\s*iex", "curl.*\\|\\s*(bash|sh)", "format\\s+[a-z]:", "diskpart", "reg\\s+delete" ] # 命中拦截规则时的行为:block 直接拒绝,confirm 要求人工确认 on_deny = "block" [skills] # 只从可信来源加载 Skill trusted_sources = [ "https://官方市场地址", "https://团队维护仓库地址" ] # 禁止从任意 URL 直接加载 allow_arbitrary_url = false # 下载后先校验再执行 verify_hash = true verify_signature = true # 联网下载 Skill 前必须人工确认 require_confirmation_on_download = true [audit] # 全程留痕 enabled = true log_path = "~/.openclaw/logs/audit.log" log_commands = true log_sources = true

几个字段重点解释。api_key用${TAOTOKEN_API_KEY}从环境变量读,别把 Key 写死在文件里,否则配置一旦被同步或备份就泄露了。run_as_admin = false和allow_elevation = false是权限收敛的核心,日常任务永远普通权限。deny_patterns是命令注入和误操作的第一道闸,命中就 block。trusted_sources是来源白名单,配合allow_arbitrary_url = false,堵住「随手搜到就执行」的口子。

再看 settings.json。有些 OpenClaw 版本或配套工具用 JSON 配置,字段语义和上面一致。

{ "model": { "baseUrl": "https://taotoken.net/api", "apiKeyEnv": "TAOTOKEN_API_KEY", "modelId": "your-model-id" }, "execution": { "runAsAdmin": false, "allowElevation": false, "requireConfirmationOnElevation": true, "commandTimeoutSeconds": 120, "backupBeforeWrite": true, "shell": { "allowed": ["powershell", "bash"], "denyPatterns": [ "rm\\s+-rf\\s+/", "Remove-Item\\s+.*-Recurse\\s+.*-Force", "Set-ExecutionPolicy\\s+Bypass", "Invoke-WebRequest.*\\|\\s*iex" ], "onDeny": "block" } }, "skills": { "trustedSources": ["https://官方市场地址"], "allowArbitraryUrl": false, "verifyHash": true, "requireConfirmationOnDownload": true }, "audit": { "enabled": true, "logPath": "~/.openclaw/logs/audit.log" } }

如果你用的是 Cline 或 Claude Code 这类工具配合 OpenClaw,它们的配置里同样要写全三件套:Base URL、Key、Model ID。以 Cline 的 MCP 配置为例,指向 TaoToken 的片段长这样:

{ "mcpServers": { "taotoken": { "url": "https://taotoken.net/api", "env": { "TAOTOKEN_API_KEY": "${TAOTOKEN_API_KEY}" }, "model": "your-model-id" } } }

Codex 的 auth.json 同理,把 base URL 指向 TaoToken,Key 从环境变量注入,model 字段填你选定的模型 ID。三件套缺一不可,少写 Model ID 会出现「连上了但不知道用哪个模型」的报错。

配置写完,先别急着跑任务。下一节讲怎么验证。

4. 验证请求与成功结果:确认拦截规则真的生效

配置写完不验证,等于没配。这一节给几个可执行的验证动作,确认你的安全骨架真的在拦东西。

第一步,验证模型通道通不通。用 curl 直接打 TaoToken 的 API,确认 Key 和 Base URL 正确。

curl -s https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "your-model-id", "messages": [{"role": "user", "content": "ping"}] }'

返回里能看到choices字段和模型回复,说明通道正常。如果返回 401,说明 Key 有问题,去 https://taotoken.net/api-keys 重新确认。如果返回模型不存在,说明 Model ID 填错了。

第二步,验证命令拦截规则。故意让 OpenClaw 执行一条命中 deny_patterns 的命令,看它是否被 block。比如在 OpenClaw 里输入「帮我执行 Remove-Item -Recurse -Force C:\test」。预期结果是:命令被拦截,日志里记录一条 deny 事件,任务中止并提示你。

如果它真的执行了,说明deny_patterns没生效,检查两点:正则转义是否正确(TOML 里反斜杠要双写),以及on_deny是否设成了block而不是confirm。

第三步,验证 Skill 来源白名单。尝试让 OpenClaw 从一个不在trusted_sources里的 URL 加载 Skill。预期结果是:被拒绝,并提示需要人工确认。如果它直接下载了,说明allow_arbitrary_url还是 true,或者require_confirmation_on_download没开。

第四步,验证审计日志。跑完上面几个动作后,打开~/.openclaw/logs/audit.log,确认里面记录了命令内容、来源、时间、结果。日志是出事之后唯一能回溯的东西,必须确认它在写。

第五步,验证备份机制。让 OpenClaw 改一个测试文件,然后去~/.openclaw/backups看有没有生成备份。有备份,误操作才有回滚的可能。

这五步跑完,你对自己的配置就有底了。成功的结果不是「没报错」,而是「该拦的拦住了、该记的记下了、该备份的备份了」。如果某一步没达到预期,进下一节排查。

5. 本篇常见错排查:401、local proxy failed、reading choices、OAuth 报错对照

这一节按真实报错来。我把接入 TaoToken 和配置 OpenClaw 时最常见的几类错误列出来,对照排查。

401 Unauthorized。最常见的原因是 Key 没读到。如果你在 config.toml 里写的是${TAOTOKEN_API_KEY},但环境变量没设,工具读到的是空字符串,就会 401。排查动作:在终端执行echo $TAOTOKEN_API_KEY(Windows 用echo %TAOTOKEN_API_KEY%),确认有值。没有的话,设置环境变量后重启 OpenClaw。另一个原因是 Key 复制时带了空格或换行,重新从 https://taotoken.net/api-keys 复制一次。

local proxy failed / connection refused。这个报错通常和 Base URL 有关。检查你填的是不是https://taotoken.net/api,有没有多写或少写路径。有些工具要求结尾带/v1,有些不带,看工具文档。另外确认本机网络能正常访问该地址,用 curl 测一下最直接。

reading choices 报错 / choices 字段为空。这个一般出现在模型返回结构不符合预期时。原因可能是 Model ID 填错,或者请求体格式不对。排查:先用 curl 按第 4 节的命令测一次,确认返回里有choices数组。如果 curl 正常但工具报错,说明是工具侧的请求构造问题,检查它的 model 字段和 messages 格式。

OAuth 相关报错。如果你用的是 Claude Code 这类带 OAuth 流程的工具,报错通常出现在 token 刷新环节。检查你的配置是否同时存在 OAuth 凭据和 API Key,两者冲突时会报错。解决方式是明确走 API Key 通道,把 OAuth 相关字段清掉,Base URL 指向 TaoToken,Key 从环境变量注入。

Skill 加载被拒。如果你确认来源可信但依然被拒,检查trusted_sources里的地址是否和实际 URL 完全一致,包括协议头和结尾斜杠。白名单是精确匹配,差一个字符都不行。

命令被误拦。deny_patterns 写得太宽会误伤正常命令。比如Remove-Item.*-Recurse.*-Force会拦住所有递归强制删除,包括你确实想删的临时目录。解决办法是把规则收窄到关键路径,或者把on_deny改成confirm,命中时人工判断。

审计日志不写。检查audit.enabled是否为 true,以及log_path目录是否存在且可写。目录不存在时有些实现不会自动创建,需要你手动建。

排查的核心思路是分层:先确认模型通道(curl 测),再确认配置读取(环境变量),再确认拦截规则(故意触发),最后看日志。一层层往下,别一上来就改配置。

6. 把边界写进配置,而不是靠每次叮嘱

回到最开始的问题:OpenClaw 到底不安全在哪。答案不是「AI 会造反」,而是「权限过大 + 输入不可信 + 没有拦截和留痕」。这三件事都能用配置解决。

我自己的习惯是把 OpenClaw 当成一个「有能力但需要边界的实习生」:日常普通权限,提权必须人工确认,Skill 只从白名单加载,危险命令直接拦,所有动作留日志。这套下来,它依然能帮我装软件、修环境、跑脚本,但事故半径被压到了可控范围。

如果你还没接入,建议先把模型通道统一到 TaoToken,Key 收敛成一把,Base URL 固定为 https://taotoken.net/api。然后按第 3 节的骨架把 config.toml 或 settings.json 配好,按第 4 节验证一遍。长期跑编码和 Agent 任务的话,Coding Plan 比按量调用更省心,入口在 https://taotoken.net/coding-plan。

最后一句实在话:不用过度恐慌,但也别裸奔。把该写的规则写进配置,比每次口头叮嘱 AI「小心点」有用得多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询