ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

ReMe路径权限机制解析:防止Agent越权访问文件的设计

2026/9/17 22:07:10 拓冰建站 浏览量
ReMe路径权限机制解析:防止Agent越权访问文件的设计 ReMe路径权限机制解析防止Agent越权访问文件的设计【免费下载链接】ReMeReMe: Memory Management Kit for Agents - Remember Me, Refine Me.项目地址: https://gitcode.com/GitHub_Trending/me/ReMeReMe 是一个面向 AI Agent 的记忆管理工具包Memory Management Kit让智能体能够持续记住你、理解你。但赋予 Agent 文件读写能力的同时如何防止它越权访问工作区内的其他文件ReMe 的路径权限机制通过最小权限 服务端注入 失败即拒绝fail-closed三层设计给出了一个值得借鉴的答案。本文带你快速看懂这套机制的设计思路与实现细节。一、为什么Agent需要路径权限在 ReMe 的记忆体系中Agent 会调用读、写、编辑等工具来维护每日笔记。典型场景如自动记忆auto memory对话结束后Agent 自动把要点写入当天的笔记文件自动打标签auto tagAgent 为新增/变更的 Markdown 文件补全标签 frontmatter。问题在于LLM 的行为本质上是概率性的。模型完全可能因为幻觉或提示注入把path参数填成工作区里另一个文件——比如把隔壁的笔记覆盖掉或去读一份不该看的文档。ReMe 的做法是约束不交给模型自觉而是由服务端强制下发且模型既看不到也改不了这个参数。二、核心设计_allowed_paths请求级权限作用域整套机制围绕一个隐藏的上下文参数_allowed_paths展开它的语义是本次请求中文件工具只允许访问这些路径。权限检查的核心实现在 reme/steps/file_io/_path.py 的_check_path_permission()函数规则非常清晰场景行为未设置_allowed_paths值为None不做额外限制目标是已存在的文件只允许访问该文件的精确路径最小权限目标是已存在的目录允许访问目录下的所有后代文件目标尚不存在按目录式前缀处理允许创建该路径本身及其后代约束非法空列表、../逃逸、绝对路径等失败即拒绝fail closed几个容易忽略但很关键的设计点路径组件级包含判断而非字符串前缀允许daily目录时daily-report/leak.md不会被误放行——比较发生在路径组件边界上而不是字符串startswith。~家目录路径直接拒绝避免~/...被展开成工作区之外的路径。最小权限原则更新已有笔记时作用域就是那一个文件同目录下的兄弟笔记、工作区其他目录的文件一律拒绝。三、服务端注入模型看不到也改不了约束必须来自服务端否则形同虚设。ReMe 通过injected_job_kwargs机制实现服务端拥有的参数注入自动记忆场景在 reme/steps/evolve/auto_memory.py 中当检测到笔记已存在更新场景时服务端注入{_allowed_paths: [note_path]}把 Agent 的活动范围锁死在那一篇笔记上新建笔记则保留模型的date行为不做收窄。自动打标签场景reme/steps/evolve/auto_tag.py 对每个待处理文件注入_allowed_paths与_allowed_frontmatter_keysAgent 只能给这一个文件、只改这一个标签字段。合并即冲突检测在 reme/components/agent_wrapper/base_agent_wrapper.py 中如果模型试图在工具参数里自行提供注入键会直接抛出ValueError报错绝不静默放过——静默让模型的值胜出会使注入约束可被绕过。从工具 Schema 中隐藏_strip_injected_parameters()会把注入键从暴露给模型的参数 Schema 里删掉模型连这个参数的存在都不知道。同样的冲突检测逻辑也覆盖了 MCP 工具注册路径见 reme/components/service/mcp_tools.py。四、落地检查6个文件IO步骤统一拦截权限约束在每次文件操作落盘前逐一执行。以下 6 个步骤全部接入了同一检查逻辑统一调用_check_path_permission未通过则返回no permission读取reme/steps/file_io/read.py编辑reme/steps/file_io/edit.py写入reme/steps/file_io/write.py保存reme/steps/file_io/save.py加载reme/steps/file_io/load.py更新 frontmatterreme/steps/file_io/frontmatter_update.py以读取步骤为例目标路径解析后、触碰文件内容之前就会做权限判断见 reme/steps/file_io/read.py越权请求在验证输入阶段就被挡下。五、测试如何验证这套机制tests/unit/test_path_permission.py 对机制做了系统性覆盖几个代表性用例值得新手学习测试用例验证的知识点test_update_scope_rejects_sibling_note_in_same_daily_dir精确文件作用域下同目录兄弟笔记的读/改/写/改 frontmatter 全部被拒test_directory_scope_allows_nested_paths目录作用域放行嵌套子路径但daily-report前缀近似目录被拒test_invalid_injected_constraints_fail_closed空列表、../escape.md、/etc/passwd、非列表值——一律拒绝访问test_home_relative_paths_are_not_supported~/...目标与~作用域均不支持不授予任何权限test_no_constraint_allows_all未注入约束时步骤本身不引入额外限制保持向后兼容六、给开发者的启示ReMe 的路径权限机制给Agent 安全提供了三条可直接复用的经验最小权限能锁到单文件就不要锁到目录——更新笔记时作用域就是那一篇笔记本身。约束必须由服务端下发且模型不可见通过 Schema 隐藏 冲突报错杜绝模型伪造或覆盖约束参数。失败即拒绝fail closed任何非法、畸形或逃逸的约束输入一律视为无权限而不是宽松放行。如果你想深入源码建议从 reme/steps/file_io/_path.py 的路径解析与权限函数读起再结合 reme/steps/evolve/auto_memory.py 看注入如何发生完整的配置说明可参考 docs/zh/configuration.md整体框架介绍见 docs/zh/framework.md。【免费下载链接】ReMeReMe: Memory Management Kit for Agents - Remember Me, Refine Me.项目地址: https://gitcode.com/GitHub_Trending/me/ReMe创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考