mirror of
https://github.com/farcasclaudiu/openclaw.git
synced 2026-06-28 21:01:43 +03:00
Docs: update zh-CN translations and pipeline
What: - update zh-CN glossary, TM, and translator prompt - regenerate zh-CN docs and apply targeted fixes - add zh-CN AGENTS pipeline guidance Why: - address terminology/spacing feedback from #6995 Tests: - pnpm build && pnpm check && pnpm test
This commit is contained in:
@@ -6,37 +6,37 @@ read_when:
|
||||
summary: 执行审批、允许列表和沙箱逃逸提示
|
||||
title: 执行审批
|
||||
x-i18n:
|
||||
generated_at: "2026-02-01T21:42:40Z"
|
||||
generated_at: "2026-02-03T08:19:51Z"
|
||||
model: claude-opus-4-5
|
||||
provider: pi
|
||||
source_hash: ed17aab60b1f9c797ea8e9143d39d3a500c7b8cad4ea4b7903fedbf799339d28
|
||||
source_hash: 97736427752eb905bb5d1f5b54bddbdea38eb5ac5824e2bf99258fcf44ee393c
|
||||
source_path: tools/exec-approvals.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# 执行审批
|
||||
|
||||
执行审批是**伴侣应用 / 节点主机的安全护栏**,用于允许沙箱隔离的智能体在真实主机(`gateway` 或 `node`)上运行命令。可以将其理解为一种安全联锁机制:只有当策略 + 允许列表 +(可选的)用户审批全部通过时,命令才会被允许执行。
|
||||
执行审批是在工具策略和提权网关**之上**的额外检查(除非提权设置为 `full`,此时会跳过审批)。
|
||||
生效策略取 `tools.exec.*` 和审批默认值中**更严格**的一个;如果审批字段被省略,则使用 `tools.exec` 的值。
|
||||
执行审批是**配套应用/节点主机的安全护栏**,用于允许沙箱隔离的智能体在真实主机(`gateway` 或 `node`)上运行命令。可以将其理解为安全联锁:只有当策略 + 允许列表 +(可选的)用户审批都同意时,命令才会被允许执行。
|
||||
执行审批是**附加于**工具策略和提权门控之上的(除非 elevated 设置为 `full`,这会跳过审批)。
|
||||
生效策略取 `tools.exec.*` 和审批默认值中**更严格**的一方;如果审批字段被省略,则使用 `tools.exec` 的值。
|
||||
|
||||
如果伴侣应用 UI **不可用**,任何需要提示的请求将由 **ask 回退策略**(默认:deny)来决定。
|
||||
如果配套应用 UI **不可用**,任何需要提示的请求都将由 **ask fallback**(默认:deny)决定。
|
||||
|
||||
## 适用范围
|
||||
|
||||
执行审批在执行主机上本地强制执行:
|
||||
|
||||
- **Gateway网关主机** → Gateway网关机器上的 `openclaw` 进程
|
||||
- **节点主机** → 节点运行器(macOS 伴侣应用或无头节点主机)
|
||||
- **gateway 主机** → gateway 机器上的 `openclaw` 进程
|
||||
- **node 主机** → 节点运行器(macOS 配套应用或无头节点主机)
|
||||
|
||||
macOS 拆分:
|
||||
macOS 分工:
|
||||
|
||||
- **节点主机服务**通过本地 IPC 将 `system.run` 转发至 **macOS 应用**。
|
||||
- **macOS 应用**强制执行审批并在 UI 上下文中执行命令。
|
||||
- **node 主机服务**通过本地 IPC 将 `system.run` 转发给 **macOS 应用**。
|
||||
- **macOS 应用**执行审批并在 UI 上下文中执行命令。
|
||||
|
||||
## 设置与存储
|
||||
## 设置和存储
|
||||
|
||||
审批配置存储在执行主机上的本地 JSON 文件中:
|
||||
审批信息存储在执行主机上的本地 JSON 文件中:
|
||||
|
||||
`~/.openclaw/exec-approvals.json`
|
||||
|
||||
@@ -77,31 +77,31 @@ macOS 拆分:
|
||||
|
||||
## 策略选项
|
||||
|
||||
### 安全级别(`exec.security`)
|
||||
### Security(`exec.security`)
|
||||
|
||||
- **deny**:阻止所有主机执行请求。
|
||||
- **allowlist**:仅允许在允许列表中的命令。
|
||||
- **full**:允许所有命令(等同于提权模式)。
|
||||
|
||||
### 询问(`exec.ask`)
|
||||
### Ask(`exec.ask`)
|
||||
|
||||
- **off**:从不提示。
|
||||
- **on-miss**:仅在允许列表未匹配时提示。
|
||||
- **always**:每次命令都提示。
|
||||
|
||||
### 询问回退(`askFallback`)
|
||||
### Ask fallback(`askFallback`)
|
||||
|
||||
如果需要提示但无法连接到 UI,则由回退策略决定:
|
||||
如果需要提示但无法访问 UI,fallback 决定:
|
||||
|
||||
- **deny**:阻止。
|
||||
- **allowlist**:仅在允许列表匹配时放行。
|
||||
- **full**:放行。
|
||||
- **allowlist**:仅在允许列表匹配时允许。
|
||||
- **full**:允许。
|
||||
|
||||
## 允许列表(按智能体)
|
||||
|
||||
允许列表是**按智能体**配置的。如果存在多个智能体,可以在 macOS 应用中切换要编辑的智能体。匹配模式为**不区分大小写的 glob 匹配**。
|
||||
模式应解析为**二进制路径**(仅包含基础名的条目会被忽略)。
|
||||
旧版 `agents.default` 条目在加载时会被迁移到 `agents.main`。
|
||||
允许列表是**按智能体**配置的。如果存在多个智能体,请在 macOS 应用中切换要编辑的智能体。模式匹配**不区分大小写**。
|
||||
模式应解析为**二进制路径**(仅包含基本名称的条目会被忽略)。
|
||||
旧版 `agents.default` 条目在加载时会迁移到 `agents.main`。
|
||||
|
||||
示例:
|
||||
|
||||
@@ -109,59 +109,60 @@ macOS 拆分:
|
||||
- `~/.local/bin/*`
|
||||
- `/opt/homebrew/bin/rg`
|
||||
|
||||
每个允许列表条目跟踪以下信息:
|
||||
每个允许列表条目会跟踪:
|
||||
|
||||
- **id** 用于 UI 标识的稳定 UUID(可选)
|
||||
- **最近使用**时间戳
|
||||
- **最近使用的命令**
|
||||
- **最近解析的路径**
|
||||
- **last used** 时间戳
|
||||
- **last used command**
|
||||
- **last resolved path**
|
||||
|
||||
## 自动允许 Skills CLI
|
||||
## 自动允许 skill CLI
|
||||
|
||||
启用**自动允许 Skills CLI** 后,已知 Skills 引用的可执行文件在节点上(macOS 节点或无头节点主机)会被视为已列入允许列表。此功能通过 Gateway网关 RPC 的 `skills.bins` 获取 Skills 二进制列表。如果需要严格的手动允许列表,请禁用此选项。
|
||||
启用 **Auto-allow skill CLIs** 后,已知 Skills 引用的可执行文件在节点(macOS 节点或无头节点主机)上被视为已列入允许列表。这通过 Gateway RPC 的 `skills.bins` 获取 skill 二进制列表。如果你想要严格的手动允许列表,请禁用此选项。
|
||||
|
||||
## 安全二进制(仅限标准输入)
|
||||
|
||||
`tools.exec.safeBins` 定义了一小组**仅限标准输入**的二进制文件(例如 `jq`),它们可以在允许列表模式下运行,**无需**显式添加到允许列表中。安全二进制会拒绝位置文件参数和类路径标记,因此只能操作传入的数据流。
|
||||
Shell 链式调用和重定向在允许列表模式下不会被自动允许。
|
||||
`tools.exec.safeBins` 定义了一小组**仅限标准输入**的二进制文件(例如 `jq`),这些文件可以在允许列表模式下运行,**无需**显式的允许列表条目。安全二进制会拒绝位置文件参数和类路径标记,因此它们只能操作传入的流。
|
||||
在允许列表模式下,shell 链式命令和重定向不会被自动允许。
|
||||
|
||||
当每个顶层段都满足允许列表(包括安全二进制或 Skills 自动允许)时,Shell 链式调用(`&&`、`||`、`;`)是被允许的。重定向在允许列表模式下仍不受支持。
|
||||
当每个顶级段都满足允许列表(包括安全二进制或 skill 自动允许)时,允许 shell 链式命令(`&&`、`||`、`;`)。重定向在允许列表模式下仍不受支持。
|
||||
命令替换(`$()` / 反引号)在允许列表解析期间会被拒绝,包括在双引号内;如果你需要字面的 `$()` 文本,请使用单引号。
|
||||
|
||||
默认安全二进制:`jq`、`grep`、`cut`、`sort`、`uniq`、`head`、`tail`、`tr`、`wc`。
|
||||
|
||||
## 控制 UI 编辑
|
||||
## Control UI 编辑
|
||||
|
||||
使用**控制 UI → 节点 → 执行审批**卡片来编辑默认值、按智能体的覆盖配置和允许列表。选择一个范围(默认值或某个智能体),调整策略,添加/删除允许列表模式,然后点击**保存**。UI 会显示每个模式的**最近使用**元数据,方便你保持列表整洁。
|
||||
使用 **Control UI → Nodes → Exec approvals** 卡片来编辑默认值、按智能体的覆盖设置和允许列表。选择一个作用域(Defaults 或某个智能体),调整策略,添加/删除允许列表模式,然后点击 **Save**。UI 会显示每个模式的 **last used** 元数据,以便你保持列表整洁。
|
||||
|
||||
目标选择器可选择 **Gateway网关**(本地审批)或**节点**。节点必须广播 `system.execApprovals.get/set`(macOS 应用或无头节点主机)。
|
||||
如果某个节点尚未广播执行审批功能,请直接编辑其本地的 `~/.openclaw/exec-approvals.json` 文件。
|
||||
目标选择器可选择 **Gateway**(本地审批)或 **Node**。节点必须通告 `system.execApprovals.get/set`(macOS 应用或无头节点主机)。
|
||||
如果节点尚未通告执行审批,请直接编辑其本地的 `~/.openclaw/exec-approvals.json`。
|
||||
|
||||
CLI:`openclaw approvals` 支持 Gateway网关或节点编辑(参见 [审批 CLI](/cli/approvals))。
|
||||
CLI:`openclaw approvals` 支持 gateway 或 node 编辑(参见 [Approvals CLI](/cli/approvals))。
|
||||
|
||||
## 审批流程
|
||||
|
||||
当需要提示时,Gateway网关向操作员客户端广播 `exec.approval.requested`。
|
||||
控制 UI 和 macOS 应用通过 `exec.approval.resolve` 进行处理,然后 Gateway网关将已批准的请求转发至节点主机。
|
||||
当需要提示时,gateway 向操作员客户端广播 `exec.approval.requested`。
|
||||
Control UI 和 macOS 应用通过 `exec.approval.resolve` 进行处理,然后 gateway 将已批准的请求转发给节点主机。
|
||||
|
||||
当需要审批时,执行工具会立即返回一个审批 ID。使用该 ID 来关联后续的系统事件(`Exec finished` / `Exec denied`)。如果在超时前未收到决定,该请求将被视为审批超时并以拒绝原因呈现。
|
||||
当需要审批时,exec 工具会立即返回一个审批 id。使用该 id 来关联后续的系统事件(`Exec finished` / `Exec denied`)。如果在超时前没有收到决定,请求将被视为审批超时,并作为拒绝原因显示。
|
||||
|
||||
确认对话框包含:
|
||||
确认对话框包括:
|
||||
|
||||
- 命令 + 参数
|
||||
- 工作目录
|
||||
- 智能体 ID
|
||||
- cwd
|
||||
- 智能体 id
|
||||
- 解析后的可执行文件路径
|
||||
- 主机 + 策略元数据
|
||||
|
||||
操作:
|
||||
|
||||
- **允许一次** → 立即运行
|
||||
- **始终允许** → 添加到允许列表并运行
|
||||
- **拒绝** → 阻止
|
||||
- **Allow once** → 立即运行
|
||||
- **Always allow** → 添加到允许列表 + 运行
|
||||
- **Deny** → 阻止
|
||||
|
||||
## 审批转发至聊天渠道
|
||||
## 审批转发到聊天渠道
|
||||
|
||||
你可以将执行审批提示转发到任何聊天渠道(包括插件渠道),并通过 `/approve` 进行审批。此功能使用常规的出站投递管道。
|
||||
你可以将执行审批提示转发到任何聊天渠道(包括插件渠道),并使用 `/approve` 进行批准。这使用正常的出站投递管道。
|
||||
|
||||
配置:
|
||||
|
||||
@@ -172,7 +173,7 @@ CLI:`openclaw approvals` 支持 Gateway网关或节点编辑(参见 [审批
|
||||
enabled: true,
|
||||
mode: "session", // "session" | "targets" | "both"
|
||||
agentFilter: ["main"],
|
||||
sessionFilter: ["discord"], // 子串或正则表达式
|
||||
sessionFilter: ["discord"], // substring or regex
|
||||
targets: [
|
||||
{ channel: "slack", to: "U12345678" },
|
||||
{ channel: "telegram", to: "123456789" },
|
||||
@@ -193,41 +194,41 @@ CLI:`openclaw approvals` 支持 Gateway网关或节点编辑(参见 [审批
|
||||
### macOS IPC 流程
|
||||
|
||||
```
|
||||
Gateway网关 -> Node Service (WS)
|
||||
Gateway -> Node Service (WS)
|
||||
| IPC (UDS + token + HMAC + TTL)
|
||||
v
|
||||
Mac App (UI + approvals + system.run)
|
||||
```
|
||||
|
||||
安全说明:
|
||||
安全注意事项:
|
||||
|
||||
- Unix 套接字模式 `0600`,令牌存储在 `exec-approvals.json` 中。
|
||||
- Unix socket 模式 `0600`,token 存储在 `exec-approvals.json` 中。
|
||||
- 同 UID 对端检查。
|
||||
- 质询/响应(nonce + HMAC 令牌 + 请求哈希)+ 短 TTL。
|
||||
- 挑战/响应(nonce + HMAC token + 请求哈希)+ 短 TTL。
|
||||
|
||||
## 系统事件
|
||||
|
||||
执行生命周期以系统消息形式呈现:
|
||||
执行生命周期以系统消息的形式呈现:
|
||||
|
||||
- `Exec running`(仅当命令超过运行通知阈值时)
|
||||
- `Exec finished`
|
||||
- `Exec denied`
|
||||
|
||||
这些消息在节点报告事件后发布到智能体的会话中。
|
||||
Gateway网关主机执行审批在命令完成时(以及可选地在运行时间超过阈值时)发出相同的生命周期事件。
|
||||
经过审批网关的执行会复用审批 ID 作为这些消息中的 `runId`,便于关联。
|
||||
Gateway 主机执行审批在命令完成时(以及可选地在运行时间超过阈值时)发出相同的生命周期事件。
|
||||
经过审批门控的执行会复用审批 id 作为这些消息中的 `runId`,以便于关联。
|
||||
|
||||
## 影响
|
||||
|
||||
- **full** 权限很大;尽可能使用允许列表。
|
||||
- **full** 权限很大;尽可能优先使用允许列表。
|
||||
- **ask** 让你保持知情,同时仍允许快速审批。
|
||||
- 按智能体的允许列表可防止一个智能体的审批泄漏到其他智能体。
|
||||
- 审批仅适用于来自**授权发送者**的主机执行请求。未授权的发送者无法发出 `/exec`。
|
||||
- `/exec security=full` 是面向授权操作员的会话级便捷功能,设计上会跳过审批。
|
||||
要彻底阻止主机执行,请将审批安全级别设为 `deny`,或通过工具策略拒绝 `exec` 工具。
|
||||
- `/exec security=full` 是为授权操作员提供的会话级便利功能,设计上会跳过审批。
|
||||
要完全阻止主机执行,请将审批 security 设置为 `deny`,或通过工具策略拒绝 `exec` 工具。
|
||||
|
||||
相关内容:
|
||||
|
||||
- [执行工具](/tools/exec)
|
||||
- [Exec 工具](/tools/exec)
|
||||
- [提权模式](/tools/elevated)
|
||||
- [Skills](/tools/skills)
|
||||
|
||||
Reference in New Issue
Block a user