ADR-0004 隔离:引擎沙箱 + 专用用户 + systemd 加固
- 状态:Superseded by ADR-0009 · 日期:2026-10-22
决策
三层叠加,暂不使用 Docker:
- 专用系统用户
agentsvc
- systemd 服务加固(ProtectHome/ProtectSystem/ReadWritePaths/资源上限)
- 引擎自带沙箱:Claude
sandbox.enabled + failIfUnavailable + allowUnsandboxedCommands:false;Codex workspace-write + on-request
另外加一层应用层校验(路径、WebFetch 私网拦截、MCP Gateway 审批)。
理由
- 使用者可信、单机部署,Docker 的复杂度不划算
- 引擎沙箱只管 shell 命令,并且默认可读大部分文件系统;systemd 和专用用户正好补上"读"的缺口
- 专用用户的代价只是一次性 CLI 登录,换来配置失误时的兜底,以及服务与个人 CLI 状态的分离
被否决的方案
- 只用 systemd、不建专用用户:同 UID 时信号和非 home 文件仍可达,且 systemd 249 不支持 PrivatePIDs
- Docker / Podman:留作以后需要可复现环境或执行不可信代码时的选项
- gVisor / Firecracker:过重
约束
systemd 中不能开启 RestrictNamespaces(bubblewrap 需要 user namespace)。
详见 design/06-security.md。