前言¶
DeepSeek Harness (DSH) 依赖插件实现进程隔离。在 Windows 平台上,原生沙箱通常需要内核补丁或严格的容器支持。dsh-sandbox-mxc 提供了一个基于 Microsoft eXecution Containers (MXC) 的解决方案,它通过 wxc-exec.exe 包装进程参数,在无需内核补丁的情况下实现沙箱隔离。
这是什么¶
这是一个 DeepSeek Harness 沙箱提供者实现,由 dsh-sandbox-mxc-dev 维护,采用 MIT 许可证。
它实现了 Harness 的进程隔离 seam(ctx.sandbox,即 @deepseek-ai/dsh-sandbox 中的 SandboxProvider),将调用方即将启动的 argv 包装为以下形式:
wxc-exec.exe --config-base64 <policy-json> -- <original argv...>
该插件仅有一个运行时依赖:@microsoft/mxc-sdk。SDK 仅用于定位 wxc-exec.exe 可执行文件,并未在代码中导入,因此不受 SDK 关于 Node.js 版本(24.21.0 或 26.8.0)的严格限制,可在 Node.js 22 及以上版本运行。
安装与配置¶
安装¶
使用官方安装命令将插件添加到指定 Profile:
dsh plugin --profile <profile> add dsh-sandbox-mxc
安装后,插件的 cordis.patch.yml 会生效,禁用默认的 @deepseek-ai/dsh-sandbox-local 提供者,并插入此插件作为 sandbox 服务提供者。
前置要求¶
- 操作系统:仅支持 Windows。
- Node.js:版本需
>= 22。 - 可执行文件:需要
wxc-exec.exe。优先级为config.wxcExecPath> 环境变量DSH_MXC_WXC> 从已安装的@microsoft/mxc-sdk推导。 - PowerShell:Profile 中指向的
pwsh必须是未打包(unpackaged)版本。MXC 容器无法启动 MSIX 打包的应用(如 Store 版 PowerShell),否则会报错。 - 可读性:Shell 的安装目录必须在容器内可读,否则容器无法解析自身路径。
配置项¶
| 配置项 | 默认值 | 说明 |
|---|---|---|
wxcExecPath |
'' |
wxc-exec.exe 的绝对路径。为空时尝试环境变量或 SDK 导出路径。 |
readonlyPaths |
[] |
容器可读取的额外根目录。 |
extraWritablePaths |
[] |
容器可写入的额外根目录。 |
deniedPaths |
[] |
容器严禁访问的根目录。 |
network |
omitted | 未设置时,MXC 默认策略为阻断出站网络。 |
timeoutMs |
0 |
单次执行超时时间(毫秒),0 表示无超时。 |
containerIdPrefix |
'dsh-mxc' |
诊断容器名称的前缀。 |
sandboxEnv |
[] |
注入到容器进程环境变量中的 KEY=VALUE 条目。 |
injectNodePipeShim |
true |
注入 Node 管道 shim,使容器内 Node 能通过文件句柄捕获子进程输出。 |
重要说明¶
- Windows 10 限制:在 Windows 10 上,MXC 使用
appcontainer-dacl等级。如果路径的 DACL 无法被修改(例如属于其他 SID 的卷),插件会自动丢弃该路径并打印原因,而不是导致命令失败。如果路径不存在,也会被自动过滤。 - 权限隔离:默认策略为阻断出站网络,剪贴板与宿主机隔离。
- SDK 限制豁免:由于不导入 SDK 原生绑定,该插件避开了 SDK 对 Node.js 版本的特定要求。
总结¶
dsh-sandbox-mxc 为 DeepSeek Harness 在 Windows 环境下提供了一个基于 MXC 的轻量级沙箱方案。它通过标准的 wxc-exec 工具实现隔离,无需内核补丁,并具备默认的网络安全阻断策略。