Open Interpreter 如何配置自定义权限配置文件实现文件与网络最小化授权?
【免费下载链接】openinterpreterA coding agent for open models like Kimi K3 and GLM 5.3项目地址: https://gitcode.com/GitHub_Trending/op/openinterpreter
如果你的 Open Interpreter(面向 Kimi K3、GLM 5.3 等开源模型的编码代理)会频繁执行本地命令,默认的workspace-write沙箱粒度不够细——比如无法单独禁掉.env文件、也无法把网络访问限制到少数几个域名。Open Interpreter 的权限配置文件(permission profiles)就是为此设计的:它比旧的sandbox_mode、sandbox_workspace_write设置更细粒度,可以在一个 profile 里分别声明文件系统的读/写/拒绝规则和域名网络白名单。本文的目标是:在~/.openinterpreter/config.toml(用户级)或项目内.openinterpreter/config.toml(受信任项目级)中定义一个自定义 profile,让代理的命令执行只具备完成任务所需的最小文件与网络权限,并验证配置实际生效。
先确认使用哪套授权系统
权限 profile 和旧的沙箱设置是两套机制,Permissions 文档 明确要求一次只启用一套:如果当前生效的配置里设置了sandbox_mode,或命令行传了--sandbox,旧的沙箱设置会优先,profile 不会生效。
内置的三个 profile 可以直接选用,不需要自定义:
| Profile | 用途 |
|---|---|
:read-only | 只读本地命令执行 |
:workspace | 工作区根目录内可读写 |
:danger-full-access | 无本地沙箱限制 |
选择内置 profile 只需一行配置:
default_permissions = ":workspace"当内置 profile 满足不了"文件级 + 域名级"的最小化要求时,才需要下面自定义 profile 的路径。
在配置文件中定义自定义 profile
权限 profile 是 TOML 配置,顶层用default_permissions指定 profile 名称,profile 的具体规则放在[permissions.<profile名>....]表下。文档给出的完整自定义示例如下(Permissions 原文示例,其中的路径与域名请替换成你自己的项目):
default_permissions = "project-edit" [permissions.project-edit.workspace_roots] "~/code/app" = true "~/code/shared-lib" = true [permissions.project-edit.filesystem] ":minimal" = "read" [permissions.project-edit.filesystem.":workspace_roots"] "." = "write" ".devcontainer" = "read" "**/*.env" = "deny" [permissions.project-edit.network] enabled = true [permissions.project-edit.network.domains] "api.openai.com" = "allow" "**.github.com" = "allow" "tracking.example.com" = "deny"这个 profile 的效果是:通用运行时路径可读、工作区根目录内可写、.devcontainer/保持只读、.env文件被拒绝访问、网络流量限制到指定域名。
配置文件的两个位置(Configuration 文档):
~/.openinterpreter/config.toml.openinterpreter/config.toml其中项目级配置只应对受信任项目使用。配置优先级上,CLI 的-c key=value覆盖只作用于当次调用,用户配置、项目配置、profile 之间有固定优先级;Config Reference 也把default_permissions列为顶层键,并给出了一份更精简的权限表写法([permissions.<name>.filesystem]、[permissions.<name>.network])。
理解文件系统规则
[permissions.<name>.filesystem]下的取值只有三种(Permissions):
| Access | 含义 |
|---|---|
read | 命令可以读取和列出文件 |
write | 命令可以读取、创建、更新、重命名、删除文件 |
deny | 命令无法读取或写入匹配的路径;deny 优先于更宽泛的授权 |
规则可以挂在以下根节点上:
| Root | 含义 |
|---|---|
:minimal | 常用工具需要的运行时路径 |
:workspace_roots | 当前工作区根目录 + profile 中定义的根目录 |
:tmpdir | 当前临时目录 |
:root | 文件系统根目录,谨慎使用 |
/absolute/path | 具体绝对路径 |
~/path | 用户主目录下的路径 |
文档给出的建议:能用精确路径就用精确路径;**/*.env这类 deny glob 适合保护含密钥的文件。另外注意:在部分平台上,deny glob 可能需要设置glob_scan_max_depth来限制启动时的扫描深度,配置后如果启动行为异常可以对照这个说明检查。
配置网络最小授权
权限 profile 中网络访问默认是关闭的,需要显式开启:
[permissions.project-edit.network] enabled = true然后再做域名级 allow/deny:
[permissions.project-edit.network.domains] "example.com" = "allow" "*.example.com" = "allow" "**.example.com" = "allow" "ads.example.com" = "deny"域名模式有四种写法:
| Pattern | 含义 |
|---|---|
example.com | 精确主机 |
*.example.com | 仅子域名 |
**.example.com | 顶层域和子域名 |
* | 大范围公开放行,文档要求刻意使用时才写 |
两个容易踩坑的边界:
- 本地与内网目标单独管控。域名白名单不覆盖本地地址,需要访问
localhost或127.0.0.1时,要显式写上这些字面目标。 - Unix socket 是本地逃生通道。例如需要 Docker 时:
[permissions.project-edit.network.unix_sockets] "/var/run/docker.sock" = "allow"文档要求只有工作流确实依赖该本地服务时才加这条规则。
验证配置是否生效
两处 TUI 命令可以核对:
/permissions:查看或调整当前生效的授权姿态(Sandbox & Approvals);/debug-config:打印解析后的最终配置及其来源(Configuration、Slash Commands),用来确认default_permissions指向了你的自定义 profile,而不是被更高优先级的配置层(如旧的sandbox_mode)覆盖。
如果/debug-config显示仍生效的是sandbox_mode,说明两套系统同时存在,按上一节的规则,先移除sandbox_mode(或去掉--sandbox参数)让 profile 接管。
适用范围与限制
权限 profile 只管辖本地沙箱化命令执行。App 连接器、MCP 服务器、browser/computer-use 界面、已批准的提权(approved escalations)和远程服务各有自己的控制体系,不在 profile 的管辖范围内(Permissions Scope 一节)。另外 profile 在 Config Reference 中被标记为 beta 功能,配置项以codex-rs/core/config.schema.json生成的 schema 为准。
如果当前场景只是粗粒度的"只读 / 工作区可写 / 完全放开",直接用sandbox_mode(read-only/workspace-write/danger-full-access)更简单;只有需要文件级 deny 规则和域名白名单时,才值得切换到权限 profile 这套机制。
【免费下载链接】openinterpreterA coding agent for open models like Kimi K3 and GLM 5.3项目地址: https://gitcode.com/GitHub_Trending/op/openinterpreter
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考