图 02 / PenguinHarness · SeeCode

Session 沙箱管工具执行边界

与源码架构版相同的已核验内容;点节点看完整解释,Path 看路径,◀ ▶ 逐步查看。

与源码架构版相同的已核验内容;点节点看完整解释,Path 看路径,◀ ▶ 逐步查看。执行环境策略受限无附加限制约束写入遮罩网络执行环境Workspace + scratchpad会话策略服务器默认 → Session snapshot工具入口exec / file tools / Hooks沙箱后端Seatbelt / bwrap / WSL 推荐Full access无附加限制才不约束可写范围Workspace / scratchpad / temp路径与网络显式 maskPaths + network图例Input权限与策略组成模块Focal替代入口或例外状态与资源关联关系主要路径
沙箱可关闭。workspace-write 允许会话 Workspace、scratchpad 与默认 temp 写入,不等于只能读取这些目录;maskPaths 显式限制读写。Full access 无附加限制才可原样执行;后端无法实施全部要求时拒绝执行。Workspace 不必位于 Project 目录,不保证默认强租户隔离。

Sources (17)
session — packages/server/src/services/workspace-guard.ts:4 · Workspace 是会话选定的实际宿主目录,并不被 workspace-guard 强制限定到 Project 目录。会话自己的 scratchpad 是运行产物目录;它们与应用层 Project 资源归属要分开。 固定源码:https://github.com/Prism-Shadow/penguin-harness/blob/7e97d50b6f6aa48d635aacb681fa43511e3e57bc/packages/server/src/services/workspace-guard.ts#L4-L40
session — packages/server/src/sandbox/service.ts:237 · 固定源码:https://github.com/Prism-Shadow/penguin-harness/blob/7e97d50b6f6aa48d635aacb681fa43511e3e57bc/packages/server/src/sandbox/service.ts#L237-L250
settings — packages/server/src/services/session-service.ts:101 · 新会话继承服务器设置并保存沙箱策略快照;子 Agent 会话使用顶层会话策略。非管理员的文件/网络级别不得超过服务器 ceiling,但这不是 Project/Agent/Session 三层独立策略取交集。 固定源码:https://github.com/Prism-Shadow/penguin-harness/blob/7e97d50b6f6aa48d635aacb681fa43511e3e57bc/packages/server/src/services/session-service.ts#L101-L144
settings — packages/server/src/runtime/session-manager.ts:2756 · 固定源码:https://github.com/Prism-Shadow/penguin-harness/blob/7e97d50b6f6aa48d635aacb681fa43511e3e57bc/packages/server/src/runtime/session-manager.ts#L2756-L2767
settings — packages/server/src/services/sandbox-ceiling.ts:11 · 固定源码:https://github.com/Prism-Shadow/penguin-harness/blob/7e97d50b6f6aa48d635aacb681fa43511e3e57bc/packages/server/src/services/sandbox-ceiling.ts#L11-L38
tools — packages/server/src/sandbox/service.ts:224 · exec/Hooks 的受约束 spawn 使用会话 confiner。read_file/write_file/edit_file 的文件操作通过 Session FsPort;受限时用沙箱 helper,否则用宿主进程权限。不是整个 Server 和所有插件都装进一个沙箱。 固定源码:https://github.com/Prism-Shadow/penguin-harness/blob/7e97d50b6f6aa48d635aacb681fa43511e3e57bc/packages/server/src/sandbox/service.ts#L224-L268
tools — packages/core/src/environment/tools/write-file.ts:164 · 固定源码:https://github.com/Prism-Shadow/penguin-harness/blob/7e97d50b6f6aa48d635aacb681fa43511e3e57bc/packages/core/src/environment/tools/write-file.ts#L164-L174
tools — packages/core/src/environment/tools/read-file.ts:431 · 固定源码:https://github.com/Prism-Shadow/penguin-harness/blob/7e97d50b6f6aa48d635aacb681fa43511e3e57bc/packages/core/src/environment/tools/read-file.ts#L431-L440
backend — packages/server/src/sandbox/service.ts:272 · 按请求的文件、网络、mask 等能力选择已挂载且能完整实施的 backend;无匹配者拒绝执行,不静默降级。推荐映射不等于后端已安装或实际可用。 固定源码:https://github.com/Prism-Shadow/penguin-harness/blob/7e97d50b6f6aa48d635aacb681fa43511e3e57bc/packages/server/src/sandbox/service.ts#L272-L289
backend — packages/server/src/sandbox/settings-status.ts:22 · 固定源码:https://github.com/Prism-Shadow/penguin-harness/blob/7e97d50b6f6aa48d635aacb681fa43511e3e57bc/packages/server/src/sandbox/settings-status.ts#L22-L34
full — packages/server/src/sandbox/service.ts:227 · Full access 且无额外网络/mask 限制会原样 spawn。若仍要求断网或路径 mask,则依然必须通过能实施那些维度的 backend。审批弹窗不是 OS 沙箱。 固定源码:https://github.com/Prism-Shadow/penguin-harness/blob/7e97d50b6f6aa48d635aacb681fa43511e3e57bc/packages/server/src/sandbox/service.ts#L227-L233
full — packages/server/src/sandbox/settings-policy.ts:122 · 固定源码:https://github.com/Prism-Shadow/penguin-harness/blob/7e97d50b6f6aa48d635aacb681fa43511e3e57bc/packages/server/src/sandbox/settings-policy.ts#L122-L134
write-roots — packages/server/src/sandbox/service.ts:234 · workspace-write 给当前 Workspace、该会话 scratchpad 与默认可写 temp 写权限;改变某条命令的 cwd 不会扩大可写根。read-only 仍可能允许 temp,因此不能解释为绝对零写入。 固定源码:https://github.com/Prism-Shadow/penguin-harness/blob/7e97d50b6f6aa48d635aacb681fa43511e3e57bc/packages/server/src/sandbox/service.ts#L234-L256
masks — packages/server/src/sandbox/service.ts:245 · maskPaths 限制指定路径读取/写入;网络等级另行配置。所核查 confiner 直接使用策略中给定的 maskPaths,不能画成“Project ACL 自动转换为所有其他 Project 的文件遮罩”。 固定源码:https://github.com/Prism-Shadow/penguin-harness/blob/7e97d50b6f6aa48d635aacb681fa43511e3e57bc/packages/server/src/sandbox/service.ts#L245-L256
masks — plugins/sandbox-seatbelt/src/index.ts:168 · 固定源码:https://github.com/Prism-Shadow/penguin-harness/blob/7e97d50b6f6aa48d635aacb681fa43511e3e57bc/plugins/sandbox-seatbelt/src/index.ts#L168-L172
masks — plugins/sandbox-bwrap/src/index.ts:161 · 固定源码:https://github.com/Prism-Shadow/penguin-harness/blob/7e97d50b6f6aa48d635aacb681fa43511e3e57bc/plugins/sandbox-bwrap/src/index.ts#L161-L170
scope — 版本与边界 · 上半图是用户与资源授权;下半图是 Session 的实际执行边界。两层不能混为一谈。 同 Project 成员协作共享;进入其他 Project 要另有成员资格。工具文件/网络边界再由会话沙箱实施。 沙箱是可配置的宿主执行约束,不是每个 Project 自动拥有独立容器。当前快照的干净设置可为关闭;跨 Project 的文件读取还取决于 Workspace、maskPaths、宿主权限与有效沙箱配置。 SeeCode 对比沿用上一版内容与固定提交;不是实际运行 Penguin。