第 6 章
权限系统
三级安全护栏 — 让 Agent 安全地工作
🎯
像公司里的审批流程
想象你是一家公司的员工。查看文件(只读操作)你可以自己做。但如果要花一大笔钱(危险操作),需要经理审批。如果是在做年度审计(规划模式),你就只能看报表不能动钱。Agent 的权限系统也是同样的逻辑 —— 不同的操作需要不同级别的许可。
为什么权限系统如此重要?
想象一下,如果 Agent 没有任何权限限制会怎样:
• 它可能会误删重要文件
• 它可能会执行危险的 Shell 命令
• 它可能会泄露敏感信息
• 它可能会在你不知情的情况下修改代码
权限系统就是 Agent 的「安全护栏」。它确保 Agent 在执行每个操作之前,都经过适当的检查。
三种权限模式
OpenHarness 提供三种权限模式,适用于不同场景:
🟢 默认模式(Default)
• 读取操作自动通过(读文件、搜索等无害操作)
• 写入操作需要用户确认(修改文件、执行命令等)
• 适用于日常开发
🔵 规划模式(Plan)
• 只允许读取操作
• 所有写入操作都被阻止
• 适用于大型重构前的代码探索阶段
🔴 全自动模式(Full Auto)
• 所有操作自动通过
• 适用于沙箱环境或完全信任的场景
• ⚠️ 生产环境不建议使用
🛡️ 权限模拟器 — 试试切换不同模式
默认模式:读取操作自动通过,写入操作需要用户确认
📖读取文件
自动通过🔍搜索文件
自动通过📝写入新文件
需要确认✏️编辑现有文件
需要确认💻执行 Shell 命令
需要确认🗑️删除文件
需要确认 ⚠️📦安装依赖
需要确认🚀Git push
需要确认 ⚠️🌐搜索网页
自动通过🤖启动子 Agent
需要确认权限检查的流程
openharness/permissions/checker.py
1class PermissionChecker:2 async def check(self, tool_name, params, mode):3 # 第 1 步:检查工具是否在拒绝列表中4 if tool_name in self.denied_tools:5 return PermissionResult.DENIED67 # 第 2 步:检查路径规则8 if not self.check_path_rules(params):9 return PermissionResult.DENIED1011 # 第 3 步:根据权限模式判断12 if mode == "plan":13 # 规划模式只允许只读操作14 return ALLOW if is_read_only(tool_name) else DENIED1516 if mode == "full_auto":17 return PermissionResult.ALLOW1819 # 默认模式:只读自动通过,写入需确认20 if is_read_only(tool_name):21 return PermissionResult.ALLOW22 return PermissionResult.ASK_USER
每次工具执行前,都会经过权限检查:
细粒度控制
除了三种模式之外,OpenHarness 还支持更细粒度的权限控制:
• 路径规则(Path Rules):可以禁止访问特定目录,比如 /etc/*
• 命令拒绝列表(Denied Commands):禁止执行特定危险命令
• 工具拒绝/允许列表:控制哪些工具可用
这些规则可以在配置文件中设置,给 Agent 划定精确的安全边界。
📌 关键要点
权限检查发生在每次工具执行之前
权限系统不是事后审计,而是事前检查。在 Agent Loop 的每一次工具调用中,Harness 都会先通过 PermissionChecker 检查,只有通过了才会真正执行工具。这确保了安全性是内建的,而不是附加的。
🧠 检验理解
在默认权限模式下,Agent 执行 Read(读取文件)操作时会发生什么?
🧠 检验理解
什么场景最适合使用「规划模式」?