场景:专用 Windows 测试机,命令可执行,但 Node Sandbox 不可用
这篇文章讨论一个不太漂亮、但很真实的工程状态:Agent 已经能控制 Windows 机器,沙箱却不可用。继续做实验可以;假装有隔离,不行。
屏幕上那句警告意味着什么
DESKTOP-HT6EO5E 的 OpenClaw Companion 提示过一句话:Windows build 19045 不是 MXC supported build 26300,Node Sandbox unavailable,commands run uncontained。
翻译成工程语言:
Agent command = 宿主机命令
隔离边界 = 不存在 Node Sandbox 兜底
风险承担 = 由测试机专用性、权限管理、日志、快照和人工审计补偿这不是小字免责声明。它会改变后续所有实验的写法:命令输出可以作为实测证据,但文章不能把它描述成沙箱内结果。
AppContainer 缺席后,少了哪层保护
Microsoft 对 AppContainer 的定义很清楚:隔离是它的主要目标。它按最小权限限制身份、设备、文件、网络、进程和窗口等资源。对 Agent runner 来说,这类机制的价值在于把错误命令或被注入的动作关在较小范围里。
没有这层保护时,风险变化很直接:
| 维度 | 有 AppContainer / 沙箱 | 当前测试机 uncontained |
|---|---|---|
| 文件系统 | 可限制读写范围 | 取决于宿主用户权限 |
| 进程影响 | 低完整性/边界限制 | 可能影响同用户上下文 |
| 设备资源 | 需要 broker 或授权 | 取决于系统与应用权限 |
| 网络行为 | 可做策略隔离 | 需靠防火墙、工具策略、审计 |
| 清理回滚 | 环境可丢弃 | 需要显式清理或快照 |
这也是为什么“全权授权”不等于“无记录执行”。权限可以放开,证据链不能放掉。
我给这类机器建一张风险账本
当前全能力节点:
node id: 59b4419240fc95695a2e171924b0ad6f2b070679d6e64e3aab8f6d6a42bc4e79
host: DESKTOP-HT6EO5E
caps: browser,camera,canvas,device,location,screen,stt,system,tts
commands: browser.proxy,camera.list,device.info,device.status,location.get,screen.snapshot,system.run,system.which只读基线显示:
Microsoft Windows NT 10.0.19045.0
PSVersion 5.1.19041.6456
CurrentUser RemoteSigned
Process Bypass风险账本应至少记录:
- 这是一台专用测试机,不是办公主机;
- 命令 uncontained;
- 管理员级安装和配置允许直接执行;
- 实验目录固定,例如
%USERPROFILE%\openclaw-article-evidence; - 文章中必须区分“真实实测”和“设计建议”。
补偿控制不是口号,是操作顺序
我会按下面这个顺序使用这台机器。它不复杂,但能避免很多糊涂账。
任务开始前
- 写清楚要验证的问题:命令、配置、日志,还是失败模式。
- 限定工作目录,不把实验产物散落到用户目录各处。
- 读取初始状态:OS build、PowerShell 版本、关键策略、服务状态。
- 需要改系统设置时,先导出原配置或记录回滚命令。
执行过程中
- 避免把多个高影响动作塞进一条巨型命令。
- stdout/stderr 直接保存到 evidence 文件。
- 需要截图时,用
screen.snapshot,不要靠记忆描述 UI。 - 涉及 App Control / WDAC 时先 audit mode,再考虑 enforcement。
收尾时
- 记录做了哪些持久改变:服务、计划任务、注册表、安装包、浏览器 profile。
- 清理临时文件,只保留写作证据。
- 把失败输出写进文章。失败通常比成功路径更有信息量。
写文章时的证据合同
以后 Windows 相关文章可以把测试证据写成一个固定块,但正文结构不要固定。证据块像这样:
Evidence bundle
- host: DESKTOP-HT6EO5E
- OS/build: Windows NT 10.0.19045.0
- runner: OpenClaw full-capability node
- sandbox: unavailable / uncontained
- command transcript: stdout/stderr saved
- screenshot: only when it adds semantic value
- event logs: included when topic involves audit/detection这个块的价值是防止文章把“我推测可以”写成“我实际跑过”。
哪些事即使在测试机上也不该混写
- 不能把本地高风险实验写成可直接攻击公共目标的教程。
- 不能把 Defender 关闭状态写成推荐配置。
- 不能把 uncontained 命令写成沙箱内安全执行。
- 不能把截图、录屏、日志说成已经生成,除非确实生成并审计过。
这次实测里,screen.snapshot 可用;screen.record 被 Windows 平台命令 allowlist 拦截。因此本文只引用命令证据和可用截图能力,不声称录屏已完成。
最后给流程定个调
没有沙箱时,实验不是不能做,而是要换一种诚实的方式做:专用机器、限定路径、保留证据、写清边界、审计结论。透明边界比“看起来安全”的措辞更重要。



