本文说明:OpenClaw 作为一个可以执行 Shell 命令、访问文件系统的 AI Agent,安全性至关重要。本文深度解析 pairing(频道配对审批)、approvals(执行命令权限管理)、directory(文件目录访问白名单)三大安全命令,帮你完整掌控 AI 的操作边界。
一、OpenClaw 安全体系概览
🔒 三层防护关系
Pairing 是第一道门(谁能进来),Approvals 是第二道门(能做什么命令),Directory 是第三道墙(能访问什么文件)。三者配合使用,即使 Agent 被恶意指令操控,也无法突破这三层防护执行超出授权的操作。
二、openclaw pairing 命令完整详解
openclaw pairing [list|approve] <channel>
频道配对审批
Q:什么是 OpenClaw 的 Pairing(配对)机制?为什么需要它?
Pairing 是针对私信(DM)频道的身份验证机制。当有人第一次通过 WhatsApp、Telegram 等向 Agent 发 DM 时,如果不在 allowFrom 白名单内,消息会被拦截,需要管理员通过 pairing 命令手动审批。这防止陌生人随意使用你的 Agent(调用你的 API、执行命令)。
Q:openclaw pairing list whatsapp 显示什么?
显示 WhatsApp 频道的待审批配对请求列表,每条显示:请求 ID(用于 approve)、发件人电话号码(脱敏)、请求时间、配对码(pairing code,发送方看到的验证码)。如果列表为空,说明没有新的配对请求。
Q:openclaw pairing approve whatsapp <code> --notify 的 --notify 参数有什么用?
加上 --notify 后,审批成功的同时会自动发送一条 WhatsApp 消息通知请求方"你的配对已被批准,可以开始使用了"。不加 --notify 则只在 CLI 端静默完成审批,对方不会收到通知(对方可以继续发消息测试是否被接受)。
Q:配对支持哪些频道?所有频道都需要配对吗?
目前支持 pairing 命令的频道包括:WhatsApp(DM)、Telegram(DM)、Signal(DM)、iMessage(DM)。群聊/群组频道通常通过 requireMention(必须@机器人才响应)和频道 ID 白名单控制,不走 pairing 流程。Discord、Slack 等以 Bot Token 权限控制,也不需要 pairing。
Q:如何完全关闭 Pairing,让所有人都能直接使用?
在配置文件中设置 channels.whatsapp.allowFrom: ["*"](允许所有人),这样不需要 pairing 审批。但强烈不建议这样做——任何知道你 WhatsApp 号码的人都能控制你的 AI Agent 执行命令,安全风险极高。最好保持 pairing 审批或明确指定白名单号码。
Q:已配对的用户如何撤销?
直接修改配置文件 ~/.openclaw/openclaw.json 中的 channels.whatsapp.allowFrom 列表,删除对应号码后重启 Gateway。或者用 openclaw config set channels.whatsapp.allowFrom '[]' 清空白名单(谨慎:这会阻止所有人包括你自己)。
三、openclaw approvals 命令完整详解
核心概念:Approvals(执行审批)决定 Agent 在执行 Shell 命令(exec/bash)时需要人工确认还是自动放行。白名单(allowlist)内的命令自动执行,不在白名单的命令需要你在聊天里手动同意。
openclaw approvals [get|set|allowlist]
执行权限管理
Q:openclaw approvals get 显示什么?
显示当前 exec approvals 配置(JSON 格式),包含:mode(ask/allow/deny)、allowlist(自动允许的命令路径列表)、denylist(永远拒绝的命令)。不同主机(本地/Gateway/节点)有各自独立的 approvals 文件,通过 --gateway 或 --node 参数分别查看。
Q:approvals 的三种 mode(ask/allow/deny)分别是什么?
ask(默认):每次执行命令前向你发消息请求确认,你回复"是"才执行;allow:所有命令自动放行(不推荐,危险!);deny:所有 exec 命令都被拒绝,AI 无法执行任何 Shell 命令(适合纯对话场景)。生产环境推荐 ask + allowlist 组合。
Q:approvals allowlist add 如何添加命令白名单?
格式:openclaw approvals allowlist add "路径模式"。例如:
• openclaw approvals allowlist add "~/Projects/**/bin/rg"(允许 Projects 下所有 rg 命令)
• openclaw approvals allowlist add "/usr/bin/git"(允许 git 命令)
• openclaw approvals allowlist add --agent "*" "/usr/bin/uname"(所有 Agent 都允许 uname)
路径支持 glob 通配符,如 ** 匹配任意深度。
Q:--agent 参数在 allowlist 中有什么用?
为特定 Agent 设置专属白名单。例如 --agent main 只给 main agent 加白名单,--agent "*" 对所有 Agent 生效。不同 Agent 的工作范围不同时,可以用此参数精细控制:开发 Agent 可以跑 git/npm,运维 Agent 可以跑 systemctl,互不干扰。
Q:如何为远程节点(手机/服务器)设置 approvals?
使用 --node 参数:
openclaw approvals get --node my-iphone(查看节点 approvals)
openclaw approvals allowlist add --node my-iphone "/usr/bin/uptime"(为节点添加白名单)
openclaw approvals set --node my-iphone --file ./node-approvals.json(批量设置节点 approvals)
节点 approvals 文件存储在节点设备本地(不是 Gateway)。
Q:approvals set --file 如何批量配置执行权限?
先创建 JSON 文件(如 exec-approvals.json),包含完整的 approvals 规则,然后:openclaw approvals set --file ./exec-approvals.json。适合团队统一部署时通过 IaC(Ansible/Terraform)批量推送相同 approvals 配置到所有 Gateway 实例。
Q:approvals allowlist remove 如何撤销权限?
格式:openclaw approvals allowlist remove "~/Projects/**/bin/rg",路径模式必须与添加时完全一致。如果不确定确切模式,先用 openclaw approvals get 查看当前白名单列表,复制想删除的条目后执行 remove。
✅ 推荐白名单(开发场景)
⛔ 危险命令(需严格审批)
四、openclaw directory 命令完整详解
openclaw directory [list|add|remove]
文件目录白名单
Q:directory 命令控制的是什么?和 Sandbox 有什么关系?
Directory 白名单控制 Agent 通过文件工具(read_file/write_file)可以访问的目录范围。Sandbox 是更底层的进程隔离(通过 macOS 沙盒或 Docker 容器隔离整个进程)。两者都用于限制文件访问,但 directory 是软限制(配置层),Sandbox 是硬限制(OS层)。两者配合使用安全性最高。
Q:openclaw directory list 显示什么?默认有哪些目录?
显示当前授权给 Agent 的文件目录列表。默认情况下(首次安装),通常只有 OpenClaw 自身的工作目录(~/.openclaw/)在列表中。用户需要手动 add 自己的项目目录才能让 Agent 读写那些文件。
Q:openclaw directory add 如何授权 Agent 访问项目目录?
格式:openclaw directory add /path/to/project。例如:
• openclaw directory add ~/Projects/my-app(授权单个项目)
• openclaw directory add ~/Documents(授权整个文档目录)
添加后,Agent 的文件工具就能读取和修改该目录下的所有文件(含子目录)。不在白名单的目录,Agent 尝试访问时会得到"Permission denied"错误。
Q:如果 Agent 说"无法访问某个文件",是 directory 的问题吗?
很可能是。排查步骤:1. 运行 openclaw directory list 查看白名单;2. 确认文件路径是否在白名单目录内(注意:~/Projects 和 /home/user/Projects 在某些系统上是不同路径,建议用绝对路径);3. 如果不在,运行 openclaw directory add 添加。
Q:openclaw directory remove 会删除目录中的文件吗?
不会!openclaw directory remove /path 只是从 Agent 的访问白名单中移除该目录,不影响磁盘上的任何文件。移除后 Agent 无法再通过文件工具访问该目录,但实际文件完全安全。
Q:directory 白名单和 Sandbox 沙盒模式哪个更安全?
Sandbox 更安全(OS 级强制隔离),但配置复杂、性能有一定损耗。Directory 白名单配置简单,是 OpenClaw 推荐给大多数用户的方案。最安全的组合:Sandbox(限制进程)+ directory(限制文件工具)+ approvals(限制 Shell 命令)+ pairing(限制用户)四层叠加。
💡 实战:团队共享 Agent 安全配置示例
五、安全配置常见问题排错
⚠️ Q:pairing 审批后用户还是收不到 Agent 回复?
可能是 allowFrom 配置未生效。检查:1. openclaw config get channels.whatsapp.allowFrom 确认号码在列表中(格式含国际区号 +86);2. 重启 Gateway 让配置生效;3. 查看 openclaw logs 是否有"sender not allowed"字样。
⚠️ Q:Agent 每次执行命令都要我审批,太麻烦了怎么办?
把常用的安全命令加入白名单:openclaw approvals allowlist add "/usr/bin/git"。对于开发场景,可以配置 mode: allow(完全自动),但要确保 directory 白名单严格限制,防止 Agent 访问敏感文件。
⚠️ Q:approvals 文件存在哪里?可以手动编辑吗?
存储在 ~/.openclaw/exec-approvals.json(本地主机)。可以手动编辑 JSON 文件,修改后运行 openclaw system reload 热加载(某些字段可能需要重启 Gateway)。也可以用 openclaw approvals set --file 从文件批量更新,更安全。
💡 Q:如何用 VPN07 加固 OpenClaw 的网络安全?
OpenClaw Gateway 暴露 WebSocket 端口(默认 18789),如果 Gateway 在境外服务器上,没有加密通道很危险。推荐:1. 使用 Tailscale(OpenClaw 原生支持)在设备间建立加密隧道;2. 配合 VPN07 的 1000Mbps 国际节点,让 CLI 到 Gateway 的连接始终加密且低延迟;3. 不要在公网直接暴露 Gateway 端口(除非配置了 HTTPS 和 Token 认证)。