Documentation
¶
Overview ¶
Package sandbox 执行沙箱的档位语义与后端协议(门面)。
核心已下沉 `github.com/oagentkit/guardx/sandbox`:隔离档位与执行后端的协议 是通用的执行环境原语,与编排无关,故归 guardx(tier 0 安全层)。本包只做 一件事——保住调用路径稳定,宿主与本仓 `ptc` 的 `sandbox.Level` / `sandbox.Provider` / `sandbox.Registry` 调用点一行不动。
为什么档位语义归上游而不是留在本仓 ¶
本仓 invoke 包的立论之一是「信任边界移动了,沙箱没跟着移动」——而它指出的 正是缺少一个**可声明的档位概念**:此前只有「有没有沙箱」的二元说法,没有 「够不够强」的说法,于是「隔离降级了」这类事故无法在装配期被发现,只能靠 事后审计。档位语义与判定语义同族(都是「要求 vs 实际」的对照),故与 invoke / permgate 同处安全层。
核心语义(在上游,此处只转发) ¶
- **选不到满足档位的后端即拒绝,绝不降级**:降级会让「宿主声明的强度」与 「实际执行的强度」之间没有信号,档位整套机制就成了装饰。
- **档位序即强弱**:要求档位是下限,满足下限者取最弱(够用且最省)。
- **档位是后端自报的,上游不校验其真实性**:宿主若不信任某后端,唯一的 办法是不登记它。
本包不认识任何领域概念,也不替宿主决定档位要求——要求是宿主按自己的风险面 声明的(那是判断,不是机制)。
Index ¶
Constants ¶
const ( LevelNone = upstream.LevelNone LevelProcess = upstream.LevelProcess LevelOS = upstream.LevelOS LevelMachine = upstream.LevelMachine )
档位常量别名。
const ( EgressUnrestricted = upstream.EgressUnrestricted EgressProxy = upstream.EgressProxy EgressDenied = upstream.EgressDenied )
出站档位常量别名。
Variables ¶
var ( ErrNoProvider = upstream.ErrNoProvider ErrDuplicateProvider = upstream.ErrDuplicateProvider )
哨兵错误别名。
Functions ¶
func SupportsBasic ¶
SupportsBasic 是一个 Capable:只兑现基本三闸(墙钟 / 调用数 / 输出字节), **不兑现内存**。
进程内解释器后端用它——Go 运行时没有「只给一个 VM 限内存」的开关, 解释器本身也没有内存限制 API,故这类后端**如实**只能兑现三闸。
Types ¶
type Capable ¶
Capable 可选能力面:后端能否兑现某组预算。
**不实现 Capable 的后端只兑现基本三闸、不兑现内存**——漏声明得到的是 「兜不住」,不是「兜得住」。方向与安全语义一致。
type EgressEnforcer ¶
type EgressEnforcer = upstream.EgressEnforcer
EgressEnforcer 可选能力面:后端声明它能**强制**哪一档出站。
**不实现它即视为没有做出任何声明**——在安全判据里,沉默按最弱处理 (见 goagent-kernel 的 egress.Spec.SatisfiedBy)。与 Capable 同一条方向: 漏声明得到的是「兜不住」,不是「兜得住」。
type EgressMode ¶
type EgressMode = upstream.EgressMode
EgressMode 出站档位(序即强弱)。
为什么它在**执行后端**这一层而不是在出口策略包:能力声明的返回值类型必须 唯一,而声明者是后端——见 EgressEnforcer。