mirror of
https://github.com/ThearchyHelios/AgentLab.git
synced 2026-11-15 04:31:58 +00:00
7d00c24ab1
Seatbelt 在 macOS 上最难受的缺口是 RLIMIT_AS 不被强制——设 256MB 仍能分配 900MB。microVM 不是"更严格的访问控制",是换了一类边界:宿主 Darwin 27.0.0, VM 里 Linux 6.12.99(libkrunfw),PID 1 是 init.krun,/Users 根本不存在, free 只看得见 512MB。申请 900MB 会被 OOM killer 杀掉而 VM 照常存活。 实现按实测契约写,不按别的 SDK 的惯例推断:create() 直接返回已启动的 Sandbox,没有 handle/connect 两层;cwd/env/timeout 都是 exec 的原生参数; 超时抛 ExecTimeoutError 而不是返回非零码。 必须写明的缺口:network=false 时 HTTP/HTTPS 与域名解析都断得掉,但 UDP/53 拦不住,手写 DNS 包仍能拿到真实响应。default_egress=DENY、Rule.deny_dns()、 显式 deny UDP、max_connections=0 全试过都堵不上——deny_dns 生成的规则只针对 宿主,DNS 出口在 microsandbox 网络栈里是硬编码放行的。所以 health 里 network 标成 partial 而不是 true,设置页对应显示黄色「部分生效」:拦了一半要是显示成 全绿,比显示成全红更危险。 成本也照实说:首次拉 OCI 镜像实测 54.5s,之后热启动 0.19s、执行 7~30ms。 贵的只是第一次,所以 auto 在镜像没缓存时先用 Seatbelt,不让人干等一分钟; 显式选 strict 档不受此限——那是使用者自己要的硬隔离。 端到端 17 项验证通过:隔离、内存拦截、超时 124、退出码透传、多文件与 env、 会话间互不可见、VM 回收。Seatbelt 那档回归未受影响。