OpenClaw 使用Documentation Index
Fetch the complete documentation index at: https://openclaw.zhcndoc.com/llms.txt
Use this file to discover all available pages before exploring further.
@openclaw/fs-safe 进行安全敏感的本地文件操作:根目录受限的读/写、原子替换、归档解压、临时工作区、JSON 状态以及秘密文件处理。
目标是为接收不受信任路径名的可信 OpenClaw 代码提供一致的库级安全护栏。这不是沙箱。主机文件系统权限、OS 用户、容器以及代理/工具策略仍然决定实际的影响范围。
默认:不使用 Python 辅助程序
OpenClaw 默认将 fs-safe 的 POSIX Python 辅助程序设置为关闭。 原因如下:- 网关不应启动一个持久的 Python sidecar,除非操作员已明确启用它;
- 许多安装并不需要额外的父目录修改加固;
- 关闭 Python 可使桌面、Docker、CI 以及打包应用环境中的包/运行时行为更加可预测。
FS_SAFE_PYTHON_MODE 和 FS_SAFE_PYTHON。
在没有 Python 的情况下仍受保护的内容
在关闭辅助程序时,OpenClaw 仍会使用 fs-safe 的 Node 路径来处理:- 拒绝相对路径逃逸,例如
..、绝对路径,以及仅允许名称时出现的路径分隔符; - 通过受信任的根句柄解析操作,而不是依赖临时拼接的
path.resolve(...).startsWith(...)检查; - 在要求该策略的 API 上拒绝符号链接和硬链接模式;
- 在 API 返回或消费文件内容时,使用带身份检查的方式打开文件;
- 为状态/配置文件进行原子性的同级临时文件写入;
- 读取和归档解压的字节限制;
- 对秘密和状态文件使用私有模式,前提是该 API 需要这些模式。
Python 带来的额外能力
在 POSIX 上,fs-safe 的可选辅助程序会保持一个持久的 Python 进程,并使用基于 fd 的文件系统操作来处理父目录变更,例如 rename、remove、mkdir、stat/list,以及某些写入路径。 这缩小了同一 UID 下的竞争窗口:在验证和变更之间,另一个进程可能替换父目录。对于本地不受信任进程可以修改 OpenClaw 正在操作的同一目录的主机,这是一种纵深防御。 如果你的部署存在这种风险,并且能保证 Python 一定可用,请使用:require 而不是 auto;auto 的设计就是在辅助程序不可用时有意回退到仅 Node 的行为。
插件与核心建议
- 当路径来自消息、模型输出、配置或插件输入时,面向插件的文件访问应通过
openclaw/plugin-sdk/*辅助函数,而不是原始fs。 - 核心代码应使用
src/infra/*下的本地 fs-safe 包装器,以便一致地应用 OpenClaw 的进程策略。 - 归档解压应使用 fs-safe 的归档辅助函数,并明确设置大小、条目数、链接和目标位置限制。
- 秘密应使用 OpenClaw 秘密辅助函数或 fs-safe 的 secret/private-state 辅助函数;不要围绕
fs.writeFile自己手写模式检查。 - 如果你需要对恶意本地用户进行隔离,不要只依赖 fs-safe。应在不同 OS 用户/主机下运行独立网关,或使用沙箱。