Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Deno L0 运行时与权限白名单

Portico 将系统运行时刚性锁定在 Deno + TypeScript(L0),这是整个项目的安全架构基石。


为什么选择 Deno L0?

传统 Node.js 运行时的最大软肋在于:一旦引入第三方 npm 依赖包,任何包均默认拥有全量的磁盘读写、子进程拉起和网络发起权限

在治理多 Agent 的系统中,恶意依赖或投毒包极易直接读取系统私钥或修改底层数据。Deno 提供了与操作系统契合的原生默认拒绝权限沙箱

  1. 默认无权:任何未经命令行显式授权的 Deno.readTextFilefetchDeno.Command 都会直接崩溃抛出安全异常。
  2. 细粒度白名单:网络连接精确限定到特定的 IP(--allow-net=127.0.0.1),文件读写精确限定到特定路径。
  3. 消除第二运行时:禁止把 Node.js 或 Bun 纳入生产依赖或发布产物,消除维护两套包管理器和锁文件的脆弱性。

各组件权限集定义清单

系统各进程的权限声明集中维护在 src/perms.ts,确保 up supervisor、build 编译器与自动化测试执行同一份事实基准:

运行产物读权限 (--allow-read)写权限 (--allow-write)环境变量 (--allow-env)网络权限 (--allow-net)
Portico CLI✅ 允许读取配置文件✅ 允许原子写入数据文件✅ 允许读取 PORTICO_* 变量❌ 严禁发起网络请求
Portal 服务✅ 允许读取静态与数据文件❌ 严格禁止写操作✅ 允许读取 PORTICO_* 变量✅ 允许绑定本地回环端口
MCP 网关✅ 允许读取数据文件✅ 仅限写入 gateway-audit.json✅ 允许读取 PORTICO_* 变量✅ 允许绑定本地回环端口
MCP 服务端✅ 允许读取数据文件❌ 严格禁止写操作✅ 允许读取 PORTICO_* 变量✅ 允许绑定本地回环端口

Caution

绝对禁止使用 --allow-all:在 Portico 的 CI、测试用例或运行脚本中,任何试图使用 -A--allow-all 的修改均会被 CI 静态检查或代码审计直接驳回。