文件沙箱隔离 — 限制 AI 能触碰的目录范围
什么是文件沙箱
文件沙箱隔离的核心思想很简单:每个 Agent 有自己的"地盘"(workspace),默认只能读写自己地盘里的文件。其他目录一律不允许访问。
这和操作系统的沙箱、Docker 容器隔离是同一个设计思路——通过物理边界限制 AI 的操作半径,即使 AI 出错也只影响自己的地盘。
默认行为
每个 Agent 创建后都会被分配一个独立的 workspace 目录:
~/.openclaw/workspace/ ← 主 Agent 的地盘
~/.openclaw/workspace-feishu/ ← 飞书 Agent 的地盘
~/.openclaw/workspace-support/ ← 客服 Agent 的地盘
默认情况下:
- Agent 只能读写自己 workspace 下的文件
- Agent 不能访问 workspace 之外的目录(即使你"不小心"让它去读)
怎么授权额外目录
如果你确实需要让 Agent 读写 workspace 之外的目录(比如让主 Agent 处理 C:\Users\me\work\ 下的文件),需要显式授权:
配置文件方式:在 Agent 配置中添加允许访问的目录列表:
{
"agents": {
"list": [
{
"id": "main",
"workspace": "~/.openclaw/workspace",
"allowedDirs": [
"C:\\Users\\me\\work",
"C:\\Users\\me\\desktop-data"
]
}
]
}
}
对话方式:
"允许我访问 C:\Users\me\work 目录,这个目录里有我要处理的数据"
沙箱 + 结果校验 = 双重保护
文件沙箱负责"物理边界"——Agent 不能碰地盘外的文件。但如果 Agent 在自己的地盘里做了危险操作(比如 rm -rf *),沙箱拦不住。
这时需要结果校验规则(见上一篇)来补:
- 禁止执行
rm、format等破坏性命令 - 文件操作前先备份
- 写入前先 diff 审阅
两层叠加,即使 AI 出问题也有兜底。
一个配置实例
假设你有以下目录结构:
C:\Users\me\
├── work\ ← 正式工作目录,允许读写
├── personal\ ← 个人文档,允许读不允许写
├── backup\ ← 备份目录,只读
├── .openclaw\ ← Sophclaw 自己的目录
└── ...其他系统目录 ← 一律不允许访问
对应的 Agent 配置:
{
"id": "main",
"workspace": "~/.openclaw/workspace",
"allowedDirs": [
"C:\\Users\\me\\work",
"C:\\Users\\me\\personal",
"C:\\Users\\me\\backup"
],
"dirPermissions": {
"C:\\Users\\me\\personal": "read",
"C:\\Users\\me\\backup": "read"
}
}
沙箱会带来什么限制
沙箱不是零成本——它在保护你的同时也限制了灵活性:
- Agent 不能"顺手"访问 workspace 外的任何文件,即使你之前在那个目录里放了相关数据
- 多 Agent 之间默认看不到对方的文件(这通常是好事)
- 某些 Skills 需要访问特定目录时,需要额外授权
遇到"Sophclaw 说找不到某个文件"时,先检查是不是那个文件在被禁止访问的目录里——90% 的"找不到文件"问题根因在这里。
安全 vs 便利的权衡
文件沙箱是典型的安全-便利 tradeoff:
- 全放开(不推荐):Sophclaw 能在整个磁盘上操作,方便但风险高
- 按 Agent 精确授权(推荐):每个 Agent 只给需要的目录,安全且够用
- 极端收紧:什么都不允许访问,Sophclaw 退化成纯聊天助手
推荐按 Agent 精确授权——先从收紧开始,遇到需要额外访问的情况再逐步放开。比反过来(先全放开再逐步收紧)安全得多。
个人用户的最小可用配置
如果你是个人用户、只有一个主 Agent:
- 给 Agent 一个独立的 workspace(Sophclaw 默认就会分配)
- 授权你的工作目录(比如
C:\Users\me\work) - 其他目录一律不授权
就这么简单。其他什么都不用改——默认安全配置模板够个人用了。