OpenClaw Exec Approvals 避坑指南

2026-04-11 11:111阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐
问题描述:

前提:Docker Compose 部署。路径因环境而异,按你的实际情况调整。


目录

  1. Exec Approvals 是什么
  2. 两种审批方式,各有啥问题
  3. 为什么配了 security=full, ask=off 还是要审批
  4. Docker 部署的权限坑
  5. 配置被向导命令覆盖了怎么办
  6. 三种策略,选适合你的

1. Exec Approvals 是什么

OpenClaw 的 exec 工具能让 Agent 直接在宿主机上跑 shell 命令。Exec Approvals 就是给这个能力加的一道安全锁:命令执行前要人工确认。

默认行为是拒绝所有 exec,或者弹审批等你手动批准。所以很多人升级或全新部署后发现 Agent 突然"不会执行命令了",问题就在这。


2. 两种审批方式,各有啥问题

Web UI 审批

访问 http://你的gateway地址:18789,待审批的命令会出现在界面里,点 Allow / Deny 就行。

这是最稳的路径,但每次都要开浏览器切界面,在移动端或飞书场景下很麻烦。

聊天频道里直接审批

OpenClaw 支持在飞书、Telegram、Discord 等频道里用命令审批:

/approve <id> allow-once # 本次放行 /approve <id> allow-always # 加入白名单,以后不再问 /approve <id> deny # 拒绝

例如:

/approve ec81794d allow-once

但这方式有两个实际问题:

问题一:消息里经常没有审批 ID

Agent 触发审批时,有时只显示"需要审批"或者一直转圈,ID 根本不显示。这时候只能回 Web UI 找。

问题二:ID 过期后报错

Failed to submit approval: GatewayClientRequestError: unknown or expired approval id

审批 ID 有超时限制。没及时输入命令,或者 gateway 中途重启了,ID 就失效。失效后不会重新触发,得让 Agent 重新发起任务。


3. 为什么配了 security=full, ask=off 还是要审批

这是最常见的坑。原因是 OpenClaw 有两套独立的配置,必须同时设置,缺一不可。只配一套,另一套的默认值会把你设置覆盖掉。

第一套:exec-approvals.json

路径因部署方式而异。Docker Compose 部署通常在宿主机 .openclaw 目录下,容器内对应 /home/node/.openclaw/exec-approvals.json

{ "version": 1, "socket": { "path": "/home/node/.openclaw/exec-approvals.sock", "token": "你的token" }, "defaults": { "security": "full", "ask": "off", "askFallback": "full", "autoAllowSkills": true }, "agents": { "main": { "security": "full", "ask": "off", "askFallback": "full", "autoAllowSkills": true } } }

第二套:openclaw.json 里的 tools.exec

"tools": { "exec": { "security": "full", "ask": "off" } }

关键点:tools.exec.ask 必须显式写出来,不能省略。 这个字段不存在的话,gateway 会用更严格的内部默认值,导致 exec-approvals.json 里的 ask: off 完全无效。

用 CLI 设置:

docker compose run --rm openclaw-cli config set tools.exec.security full docker compose run --rm openclaw-cli config set tools.exec.ask off

设置完重启 gateway:

docker compose restart openclaw-gateway


4. Docker 部署的权限坑

容器内以 uid 1000 运行。如果 .openclaw 目录是用 root 身份创建的,容器没有写权限,exec-approvals.json 的读写会出问题。

chown -R 1000:1000 /你的路径/.openclaw

验证权限:

ls -la /你的路径/.openclaw/exec-approvals.json # 文件所有者应该是 uid 1000 对应的用户


5. 配置被向导命令覆盖了怎么办

运行 agents addonboard 等向导命令时,openclaw.json 会被重写,tools.exec 里的设置可能丢失。

我的做法:每次运行向导命令前先备份。

cp /你的路径/.openclaw/openclaw.json \ /你的路径/.openclaw/openclaw.json.bak.$(date +%Y%m%d%H%M%S)

出问题就从备份恢复,再把丢失的字段补回去。


6. 三种策略,选适合你的

策略 A:完全放行(个人私有服务器)

按第 3 节同时配好两套配置,重启 gateway。适合完全可控的个人环境。

策略 B:白名单放行(团队场景推荐)

常用命令自动执行,白名单之外的命令才触发审批,兼顾便利和安全。

exec-approvals.jsonagents.main 里配置:

{ "security": "allowlist", "ask": "on-miss", "askFallback": "deny", "autoAllowSkills": true, "allowlist": [ { "pattern": "/usr/bin/git" }, { "pattern": "/usr/bin/python3" }, { "pattern": "/usr/local/bin/node" } ] }

策略 C:保留审批,但推送到飞书

不关闭审批,而是把审批请求推送到飞书,直接在飞书里用 /approve 处理。

openclaw.json 里加:

"approvals": { "exec": { "enabled": true, "mode": "both", "targets": [ { "channel": "feishu", "to": "你的飞书 open_id" } ] } }

遇到 ID 缺失或过期的情况,回 Web UI 兜底。


最后

Exec Approvals 这套机制本身没问题,就是配置分散了点。踩完这些坑,希望能帮你省点时间。

有问题欢迎交流。

网友解答:
--【壹】--:

我是今天升级后发现的。

佬,请问一下docker compose部署用的官方镜像,更新是直接pull新的镜像然后docker compose up,还是直接在当前的容器里面升级。


--【贰】--:

具体没有注意,我是昨天才发现的。


--【叁】--: Ethan Blaze:

"tools": { "exec": { "security": "full", "ask": "off" } }

我就说,我配置了exec 的security和ask 还是每次都得审批


--【肆】--:

channels中的telegram配置加上
{
“telegram”: {
“execApprovals”: {
“enabled”: true,
“approvers”: [“你的Telegram用户ID”]
}
}
}


--【伍】--:

改了还是不行
Telegram 这个会话的 elevated 权限仍未放开
• 拦截点还是:tools.elevated.allowFrom. 或 agent 层同名配置
这个也要改具体文件吗


--【陆】--:

这exec approvals是升级到3.31才有的吗?


--【柒】--:

我这边没有TG,一直用的是飞书,一直就没有研究过。


--【捌】--:

这个是默认审核的id配置吧
昨天丢给openclaw让他判断,

tools: {
exec: {
security: ‘full’,
ask: ‘off’,
},
},
elevated: {
enabled: true,
allowFrom: {
telegram: [‘你的tg id’],
},
},
补加了这个解决了

补充下。。。。。我还停在3.13版本没升级,3.13就是刚开始docker要审批的版本


--【玖】--:

这有点复杂,
之前小心翼翼,但却又绑手绑脚。

然后就直接让他在 host 跑了。


--【拾】--:

git pull 源码 docker compose restart openclaw-gateway


--【拾壹】--:

佬友给力,原来还要修改exec-approvals.json


--【拾贰】--:

支持老,太恶心了


--【拾叁】--:

正在糟心这个问题呢,感谢感谢

标签:人工智能
问题描述:

前提:Docker Compose 部署。路径因环境而异,按你的实际情况调整。


目录

  1. Exec Approvals 是什么
  2. 两种审批方式,各有啥问题
  3. 为什么配了 security=full, ask=off 还是要审批
  4. Docker 部署的权限坑
  5. 配置被向导命令覆盖了怎么办
  6. 三种策略,选适合你的

1. Exec Approvals 是什么

OpenClaw 的 exec 工具能让 Agent 直接在宿主机上跑 shell 命令。Exec Approvals 就是给这个能力加的一道安全锁:命令执行前要人工确认。

默认行为是拒绝所有 exec,或者弹审批等你手动批准。所以很多人升级或全新部署后发现 Agent 突然"不会执行命令了",问题就在这。


2. 两种审批方式,各有啥问题

Web UI 审批

访问 http://你的gateway地址:18789,待审批的命令会出现在界面里,点 Allow / Deny 就行。

这是最稳的路径,但每次都要开浏览器切界面,在移动端或飞书场景下很麻烦。

聊天频道里直接审批

OpenClaw 支持在飞书、Telegram、Discord 等频道里用命令审批:

/approve <id> allow-once # 本次放行 /approve <id> allow-always # 加入白名单,以后不再问 /approve <id> deny # 拒绝

例如:

/approve ec81794d allow-once

但这方式有两个实际问题:

问题一:消息里经常没有审批 ID

Agent 触发审批时,有时只显示"需要审批"或者一直转圈,ID 根本不显示。这时候只能回 Web UI 找。

问题二:ID 过期后报错

Failed to submit approval: GatewayClientRequestError: unknown or expired approval id

审批 ID 有超时限制。没及时输入命令,或者 gateway 中途重启了,ID 就失效。失效后不会重新触发,得让 Agent 重新发起任务。


3. 为什么配了 security=full, ask=off 还是要审批

这是最常见的坑。原因是 OpenClaw 有两套独立的配置,必须同时设置,缺一不可。只配一套,另一套的默认值会把你设置覆盖掉。

第一套:exec-approvals.json

路径因部署方式而异。Docker Compose 部署通常在宿主机 .openclaw 目录下,容器内对应 /home/node/.openclaw/exec-approvals.json

{ "version": 1, "socket": { "path": "/home/node/.openclaw/exec-approvals.sock", "token": "你的token" }, "defaults": { "security": "full", "ask": "off", "askFallback": "full", "autoAllowSkills": true }, "agents": { "main": { "security": "full", "ask": "off", "askFallback": "full", "autoAllowSkills": true } } }

第二套:openclaw.json 里的 tools.exec

"tools": { "exec": { "security": "full", "ask": "off" } }

关键点:tools.exec.ask 必须显式写出来,不能省略。 这个字段不存在的话,gateway 会用更严格的内部默认值,导致 exec-approvals.json 里的 ask: off 完全无效。

用 CLI 设置:

docker compose run --rm openclaw-cli config set tools.exec.security full docker compose run --rm openclaw-cli config set tools.exec.ask off

设置完重启 gateway:

docker compose restart openclaw-gateway


4. Docker 部署的权限坑

容器内以 uid 1000 运行。如果 .openclaw 目录是用 root 身份创建的,容器没有写权限,exec-approvals.json 的读写会出问题。

chown -R 1000:1000 /你的路径/.openclaw

验证权限:

ls -la /你的路径/.openclaw/exec-approvals.json # 文件所有者应该是 uid 1000 对应的用户


5. 配置被向导命令覆盖了怎么办

运行 agents addonboard 等向导命令时,openclaw.json 会被重写,tools.exec 里的设置可能丢失。

我的做法:每次运行向导命令前先备份。

cp /你的路径/.openclaw/openclaw.json \ /你的路径/.openclaw/openclaw.json.bak.$(date +%Y%m%d%H%M%S)

出问题就从备份恢复,再把丢失的字段补回去。


6. 三种策略,选适合你的

策略 A:完全放行(个人私有服务器)

按第 3 节同时配好两套配置,重启 gateway。适合完全可控的个人环境。

策略 B:白名单放行(团队场景推荐)

常用命令自动执行,白名单之外的命令才触发审批,兼顾便利和安全。

exec-approvals.jsonagents.main 里配置:

{ "security": "allowlist", "ask": "on-miss", "askFallback": "deny", "autoAllowSkills": true, "allowlist": [ { "pattern": "/usr/bin/git" }, { "pattern": "/usr/bin/python3" }, { "pattern": "/usr/local/bin/node" } ] }

策略 C:保留审批,但推送到飞书

不关闭审批,而是把审批请求推送到飞书,直接在飞书里用 /approve 处理。

openclaw.json 里加:

"approvals": { "exec": { "enabled": true, "mode": "both", "targets": [ { "channel": "feishu", "to": "你的飞书 open_id" } ] } }

遇到 ID 缺失或过期的情况,回 Web UI 兜底。


最后

Exec Approvals 这套机制本身没问题,就是配置分散了点。踩完这些坑,希望能帮你省点时间。

有问题欢迎交流。

网友解答:
--【壹】--:

我是今天升级后发现的。

佬,请问一下docker compose部署用的官方镜像,更新是直接pull新的镜像然后docker compose up,还是直接在当前的容器里面升级。


--【贰】--:

具体没有注意,我是昨天才发现的。


--【叁】--: Ethan Blaze:

"tools": { "exec": { "security": "full", "ask": "off" } }

我就说,我配置了exec 的security和ask 还是每次都得审批


--【肆】--:

channels中的telegram配置加上
{
“telegram”: {
“execApprovals”: {
“enabled”: true,
“approvers”: [“你的Telegram用户ID”]
}
}
}


--【伍】--:

改了还是不行
Telegram 这个会话的 elevated 权限仍未放开
• 拦截点还是:tools.elevated.allowFrom. 或 agent 层同名配置
这个也要改具体文件吗


--【陆】--:

这exec approvals是升级到3.31才有的吗?


--【柒】--:

我这边没有TG,一直用的是飞书,一直就没有研究过。


--【捌】--:

这个是默认审核的id配置吧
昨天丢给openclaw让他判断,

tools: {
exec: {
security: ‘full’,
ask: ‘off’,
},
},
elevated: {
enabled: true,
allowFrom: {
telegram: [‘你的tg id’],
},
},
补加了这个解决了

补充下。。。。。我还停在3.13版本没升级,3.13就是刚开始docker要审批的版本


--【玖】--:

这有点复杂,
之前小心翼翼,但却又绑手绑脚。

然后就直接让他在 host 跑了。


--【拾】--:

git pull 源码 docker compose restart openclaw-gateway


--【拾壹】--:

佬友给力,原来还要修改exec-approvals.json


--【拾贰】--:

支持老,太恶心了


--【拾叁】--:

正在糟心这个问题呢,感谢感谢

标签:人工智能