
在 OpenClaw 排障里approval-timeout 很容易让人误以为 Linux 终端或 sudo 出了问题但这次案例的入口在 Telegram用户让 OpenClaw 执行补 ClamAV 病毒库、启用自动更新等系统级命令先遇到 elevated is not available right now / Failing gates: allowFrom放行来源后又变成 Approval required / approval-timeout。本文按排障视角拆开两层门控同时把模型通道的 TaoToken 接法交代清楚。TaoToken 官网https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。注意TaoToken 只负责 OpenClaw 的模型调用认证和 Token 消耗不参与 elevated、审批或系统命令执行提权门控仍看 ~/.openclaw/openclaw.json 里的 allowFrom 与 exec ask。一、原问题与场景Telegram 里 OpenClaw 执行系统命令先撞 allowFrom再撞 approval-timeout这次问题不是“OpenClaw 完全不能提权”而是提权链路被拆成了多层模型会话可以正常聊天不代表系统级命令就能落地。场景很典型你在 Telegram 私聊里让 OpenClaw 做本地运维比如更新 ClamAV 病毒库、启用 clamav-freshclam 自动更新服务。此时 OpenClaw 先返回 elevated is not available right now并提示 Failing gates: allowFrom。这个阶段说明 Telegram 来源还没有进入 elevated 白名单。按第一层思路放行 Telegram 后报错会变化不再是 allowFrom而是 Approval required 和 approval-timeout。很多人到这里会误以为服务器没响应或者 Linux 终端里应该出现类似 sudo 的审批提示。实际上这里的审批发生在 OpenClaw 自身的 exec 工具层不在 Linux shell 层。也就是说Telegram 会话已经把命令交给 OpenClaw但 OpenClaw 的 exec 仍处在 ask / approval 模式远程场景下没有直观审批入口最终就表现为超时失败。所以要解决这个问题必须同时处理两层第一层是 ~/.openclaw/openclaw.json 中 tools.elevated.allowFrom.telegram 是否放行第二层是 tools.exec.security 与 tools.exec.ask 是否仍然卡审批。只改一层通常只能把报错从 allowFrom 换成 approval-timeout看起来像“又坏了”其实只是卡在了下一道门。二、TaoToken 前置只负责 OpenClaw 模型通道不碰提权门控OpenClaw 的会话要消耗 Token因此在做提权排障之前建议先把模型通道配通。配模型认证、填 Key 时可以去 TaoToken 官网创建 Keyhttps://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。模型 Base URL 填 https://taotoken.net/api注意不要带 /v1也不要给 API 地址加 UTMKey 用控制台创建的 YOUR_API_KEY。具体字段以 OpenClaw 当前版本的模型认证配置向导或配置项为准。这里必须把边界说清楚TaoToken 只出现在模型通道。它不参与 elevated 判断不参与 exec 审批也不会替你执行 freshclam、systemctl 或任何系统命令。换句话说模型通道通不通和本地提权能不能成功是两条链路。提权门控仍然按原文逻辑查 allowFrom 与 exec ask。你可以先用 OpenClaw 普通对话确认模型 Key 已生效再回到 Telegram 验证系统命令是否真正以 root 身份执行。如果你在 TaoToken 这边还没拿到 Key可以先看 API Keys 页面接入字段和示例以接入文档为准。建议把模型通道和提权配置分开验证避免把 401、模型不可用、Base URL 填错这类问题误判成 OpenClaw 提权失败。三、可复制配置~/.openclaw/openclaw.json 放行 Telegram 并调整 exec ask核心配置文件是 ~/.openclaw/openclaw.json。下面只展示与本次排障相关的 tools 节点实际使用时请合并到你的现有配置中不要直接覆盖整个文件。重点是把 Telegram 来源加入 elevated 白名单并把 exec 的 ask 策略调整为 off。{ tools: { elevated: { enabled: true, allowFrom: { telegram: [123456789] } }, exec: { security: full, ask: off } } }字段含义很直接tools.elevated.enabled 控制 elevated 模式是否可用。tools.elevated.allowFrom.telegram 控制哪些 Telegram 来源可以进入 elevated 链路。tools.exec.security full 表示 exec 采用更宽松的执行策略。tools.exec.ask off 表示 exec 不再因为审批而卡住。allowFrom 里建议填实际的 Telegram 数字 ID不要直接把*长期写进去。*意味着所有能触达该 bot 的 Telegram 来源都可能进入 elevated 白名单安全风险很高。如果是多人或多个群应该只保留确实需要放行的 ID。改完配置后根据你的启动方式重载或重启 OpenClaw让新配置生效。模型通道这边可以按下面字段理解Base URL: https://taotoken.net/api API Key: YOUR_API_KEY Model ID: 以控制台可用模型为准再次强调Base URL 不要写成 https://taotoken.net/api/v1也不要给 https://taotoken.net/api 追加 UTM 参数。API 地址保持干净Key 用 YOUR_API_KEY 替换。四、验证请求与成功结果elevated 执行 idfreshclamsystemctl enable --now clamav-freshclam配置改完后不要只看文件要做实测。第一步先验证模型通道在 Telegram 里给 OpenClaw 发一条普通消息例如“请只回复 model-ok”。如果它能正常回复说明模型认证、Base URL、Key 和 Token 消耗这条链路基本可用。如果这里失败优先检查 Key 是否还是 YOUR_API_KEY、Base URL 是否误加了 /v1 或 UTM、模型 ID 是否可用。第二步验证提权链路。通过 elevated 模式执行 id观察返回结果id期望结果应接近uid0(root) gid0(root) groups0(root)如果这里已经不是普通用户而是 uid0(root)说明 Telegram 来源已经通过 elevated 白名单exec 也没有继续卡在审批。接着执行原始场景里的系统级命令freshclam systemctl enable --now clamav-freshclam systemctl status clamav-freshclam --no-pager成功时freshclam 会下载并生成病毒库文件。可以检查ls -1 /var/lib/clamav通常应能看到类似main.cvd daily.cvd bytecode.cvd同时clamav-freshclam 服务应处于 enabled 且 active (running)。如果 freshclam 成功但服务仍是 disabled/inactive说明只完成了病毒库下载没有把自动更新服务启用起来需要继续执行 systemctl enable --now clamav-freshclam。五、本篇常见错排查allowFrom、exec.ask、approval-timeout 与终端误区这类问题最容易卡在几个固定误区上。第一只加 allowFrom不改 exec ask。结果是 elevated is not available right now 消失但马上变成 Approval required / approval-timeout。因为 allowFrom 只解决“来源是否有资格提权”exec ask 才决定“命令是否还要审批”。第二allowFrom.telegram 填错。Telegram 用户名、显示名、私聊 ID、群组 ID、bot ID 不是一回事。配置文件里应使用实际数字 ID而不是 开头的用户名。填错后表面看已经放行实际仍会被 allowFrom 门控拦住。第三以为 Linux 终端没有 sudo 提示就是服务器没响应。Telegram 里出现 Approval required 时Linux 服务器终端本来就不一定出现交互提示。审批在 OpenClaw exec 层不在 shell 层。排查时不要只在终端里找弹窗。第四把 TaoToken Key 当成提权开关。TaoToken 只负责模型通道模型能聊天不代表 elevated 已放行也不代表 exec ask 已关闭。反过来提权配置正确也不代表模型 Key 一定可用两者要分开测。第五Base URL 填错。OpenClaw 模型认证里 Base URL 应填 https://taotoken.net/api不要带 /v1不要加 UTM。API 地址加参数、加路径、加尾斜杠都可能让模型请求异常进而让你误判 OpenClaw 整体故障。第六安全边界问题。tools.exec.ask 设为 off 后命令执行会更直接如果 allowFrom.telegram 再写成*风险会叠加。更稳妥的做法是只放行必要 Telegram ID并只在受控私聊或专用运维 bot 里使用这种组合。排查顺序建议固定下来先看是否还报 allowFrom再看是否变成 approval-timeout然后检查 tools.exec.ask 与 tools.exec.security最后用 elevated 执行 id 确认是否真的进入 root 上下文。不要一上来就在 Linux 终端里盲找审批入口。六、语义一致 CTAOpenClaw 模型通道接 TaoToken提权链路再回 Telegram 验证如果你现在正卡在 OpenClaw 的模型认证或 Key 配置上建议先把模型通道和提权门控分开处理。模型通道只需要 TaoToken 的 Base URL 和 KeyBase URL 用 https://taotoken.net/api不要带 /v1也不要给 API 地址加 UTMKey 用你在 TaoToken 控制台创建的 YOUR_API_KEY。创建 Key 和查看接入步骤可以走这两个入口TaoToken API Keyshttps://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentopenclaw_priv_escalation_api_keys接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentopenclaw_priv_escalation_doc拿到 Key 后按 OpenClaw 教程填入模型认证再回到 Telegram 验证普通对话是否能通。普通对话能通只说明模型通道 OK系统命令能否执行仍回到 ~/.openclaw/openclaw.json 检查 allowFrom 与 exec ask并用 elevated 执行 id 看是否返回 uid0(root)。把模型通道和提权链路分开验证OpenClaw 本地提权报 approval-timeout 的排查会清楚很多。