OpenClaw 的文件读写权限,本质上是受 hands 执行器的 tool policy 和 sandbox 配置双重硬性限制——即使模型能力再强、自由度再高,只要未获得明确授权,就无法访问磁盘路径或 shell 权限。权限控制具体包含三重关卡:首先,agent 的 auth-profiles.json 必须启用对应的工具;其次,目标路径必须出现在 filesystem-allowlist.json 白名单中,且不支持通配符;最后,操作系统级别的用户权限同样不可绕过。

许多使用者误以为,使用免费模型(例如本地部署的 Qwen、Phi-3、Llama3 等未获得商业授权的模型)进行文件读写和内容总结时,权限限制会相对宽松。事实恰恰相反:权限控制与模型本身无关,完全取决于 【hands 执行器的 tool policy 和 sandbox 配置】。即便模型再“灵活”,也无法获取未经批准的路径或操作权限。
文件读写权限受三重硬性限制
第一步:先确认当前 agent 的 tool policy 是否已放行 file-read 和 file-write 工具。请查阅 ~/.openclaw/agents/ 文件中的 tools 字段。如果缺少这两项,即使模型生成类似 cat /etc/passwd 的命令,hands 层也会直接返回“tool not allowed”的错误。
第二步:检查文件系统白名单。默认情况下,OpenClaw 仅允许访问 agent 自身的工作目录(例如 ~/.openclaw/agents/)及其子目录。想要读取 /home/user/docs/report.pdf?除非手动将该路径添加到 ~/.openclaw/agents/ 中,否则无法访问。但请注意:【此文件写入后,hands 会严格按照行前缀匹配,通配符和正则表达式均不被支持】。
第三步:最后还需通过操作系统级权限验证。即使路径已列入白名单,hands 仍以运行 OpenClaw 的当前 Linux 用户身份执行操作。如果目标文件属于 root:root 且权限为 600,则读取操作将触发 Permission denied 错误——这与 OpenClaw 自身配置无关,纯粹是系统层面的限制。
内容总结行为触发的隐性权限链
当模型输出“请总结 test.txt 内容”并触发 file-read → text-summarize 流程时,实际上背后隐藏着三次权限校验:
- file-read 工具调用前:先检查文件路径是否存在于
filesystem-allowlist.json中; - text-summarize 工具调用时:hands 会启动一个临时沙箱进程,该进程默认无网络访问权限、不继承环境变量,工作目录被 chroot 到
/tmp/openclaw-sandbox-xxxx; - 如果摘要结果需要写回文件(例如
save_summary.txt),则会再次触发 file-write 白名单校验——请注意,源文件和目标文件即使位于同一目录,也必须各自出现在 allowlist 中。
免费模型不等于免权限——关键绕过途径已被禁用
有些人可能会尝试绕过这些限制,例如:
- 方法一:通过 prompt 注入伪造路径(如
../.bashrc)——无效。hands 在解析 file-read 参数前会自动进行路径归一化,截断..成分,强制转换为绝对路径后与白名单比对。伪造路径无法通过验证。 - 方法二:尝试使用 shell 工具间接读取(如
bash -c "cat /etc/hosts")——同样会被 tool policy 拦截。只要auth-profiles.json中未显式启用exec工具,brain 的任何规划都无法调用 shell——即便模型是免费的、本地运行的,甚至是手动编译的。 - 方法三:修改
~/.openclaw/config.yaml中的global.filesystemPolicy为"unrestricted"——纯属徒劳。OpenClaw v2.4 及更高版本已移除此字段,所有文件策略必须下沉到各个 agent 的auth-profiles.json中配置,且运行时还会校验签名以防止篡改。
因此,免费模型不代表权限宽松,三重硬性限制缺一不可。理解这些机制,才能安全且高效地运用 OpenClaw 的文件读写功能。
