先这样答
模型生成的代码必须按不可信代码处理,不能直接在宿主机执行,否则等于把任意代码执行权交给模型。设计时先根据风险选隔离层级,再收紧网络、文件系统和资源权限,最后规定结果回传方式,并让每次任务使用独立、用完即弃的环境。
隔离从弱到强可以是同机进程限制、容器、gVisor 一类的沙箱运行时,以及 Firecracker 一类的微虚拟机。进程和容器启动快,但仍共享较多宿主机内核能力;沙箱运行时和微虚拟机隔离更强,代价是启动延迟和运维复杂度更高。环境默认不联网,需要外部访问时只放行白名单域名。文件系统只读挂载必要依赖,另给临时工作目录,不暴露宿主机凭证和敏感路径。同时限制 CPU、内存、执行时间、进程数和输出大小,超限就终止任务。
执行结束后只回传受控的 stdout、stderr、退出状态和允许导出的产物文件,再销毁整个环境。面试时可以收束为:先把代码当攻击输入,再按业务风险在启动速度和隔离强度之间选运行时,其余权限一律默认关闭。
面试官会怎么追问
- 「容器隔离还不够吗?」 容器适合低风险、短任务,因为启动快、成本低,但它和宿主机共享内核,内核漏洞或错误配置会扩大影响。涉及陌生依赖、用户数据或高权限工具时,我会考虑 gVisor 或微虚拟机,并配合内核加固和权限裁剪。
- 「代码必须联网下载依赖怎么办?」 不直接开放公网,而是优先使用预构建镜像、内部依赖缓存或代理服务。确实需要外部访问时,只放行指定域名和协议,记录请求,并限制下载大小,防止数据外传和恶意载荷进入。
- 「执行结果怎么安全地交回 Agent?」 标准输出和错误输出要截断并标记执行状态,不能无限写入。产物文件只从指定目录读取,还要检查路径、类型和大小,避免目录穿越、符号链接绕过,以及把可执行文件直接带回宿主环境。
回答的坑
- 只说「用 Docker 就安全了」是把容器当成安全边界,正确方向是根据威胁模型选择进程、容器、沙箱运行时或微虚拟机,并继续限制权限。
- 只关注代码能否运行,不提网络、文件、资源和结果回传,会漏掉主要攻击面,正确方向是坚持默认拒绝、最小权限和一次性环境。
同系列的题
—— 本题完 ——