CellSpec 禁止路径(DenyPaths)
wesgine 的 CellSpec.DenyPaths 声明 Cell 内 Agent 不可读写的文件系统路径。
设计目的
Agent 的 read / write / exec 工具可以访问宿主文件系统。DenyPaths 在 Sandbox 层拦截对敏感路径的访问,保护:
- 引擎自身数据库(
hypervisor.db) - 用户配置文件
- 系统关键目录
- 其他 Cell 的数据
声明方式
CellSpec{
DenyPaths: []string{
filepath.Join(dataDir, "hypervisor.db"),
configFile,
"/etc/passwd",
},
}
检查机制
Sandbox 层的 checkPathAccess() 在每次文件操作前执行路径前缀匹配:
- 规范化请求路径(
filepath.Clean+filepath.Abs) - 逐条比对
DenyPaths的前缀 - 匹配 → 返回
ErrPathDenied - 不匹配 → 放行
与 Compliance 预设的关系
ComplianceClass 的预设(如 PresetFinancial)会注入额外的 DenyPaths:
| 预设 | 注入的 DenyPaths |
|---|---|
PresetFinancial | /credentials、金融数据目录等 |
PresetPIIStrict | 个人信息存储目录等 |
但这些注入的 DenyPaths:
- 创建时一次性注入
- 之后不随
ComplianceClass变化而变化 UpdateSpec(Compliance:)热切只替换RedactorRules,不增删DenyPaths
与 EnginePaths 的区别
| 字段 | 作用 | 谁设定 |
|---|---|---|
DenyPaths | 禁止访问的路径列表 | 消费方声明 + Compliance 注入 |
EnginePaths | 引擎内部保护的路径 | 引擎自动设定 |
两者共同参与 pathaccess 模块的路径边界判定。
运行时修改
DenyPaths 可通过 SpecPatch 修改(mutable 字段):
PATCH /admin/cells/{id}
{
"deny_paths": ["/new/sensitive/path"]
}
相关文档
- 治理管线 →
governance-pipeline.md - 治理预设 →
governance-presets.md - 文件 I/O 模型 →
file-io.md(wesgine AGENTS.md INV-IO)