2026 DeepSeek Harness Mac 沙箱安全吗:Seatbelt 验收清单

工作区外的配置文件被 Agent 读到,或者沙箱报错后命令仍然继续执行,这是最需要先排查的症状。
获胜者:通过 read-only、workspace-write、fail-closed 和一次性权限升级验收的受控 Mac 环境。 但 Seatbelt 主要约束文件效果,不能等同于完整的主机、网络或进程隔离;遇到不可信仓库、共享用户或高敏感凭据,应改用独立远程 Mac 或更强隔离环境。
这篇文章适合三类读者:个人开发者想确认 DeepSeek Harness 会不会越界改写文件;安全与平台工程师需要把官方沙箱能力转成上线检查项;团队负责人正在比较共享办公 Mac、专用远程 Mac 与隔离环境。
⚠️ 截至 2026 年 8 月 21 日,DeepSeek Harness 仍是 developer preview,官方明确提醒可能出现破坏兼容性的变更。本文应作为上线前验收标准,而不是长期不变的安全承诺。版本状态请以官方仓库与 Release 页面为准。
先区分文件防护与完整隔离
Mac 上的 DeepSeek Harness 本地后端使用 Seatbelt,并通过 sandbox-exec 执行受限命令。项目文档把 SandboxMode 定义为文件效果策略:read-only 拒绝写入,workspace-write 允许工作区和后端承诺的临时目录写入,danger-full-access 则绕过文件约束。官方沙箱说明同时明确指出,网络访问和进程可见性不属于这套模式的控制范围。
这意味着“文件写不出去”不等于“Agent 无法接触敏感信息”。如果运行账户本身可以读取项目外目录、环境变量、会话日志或网络端点,Seatbelt 并不会自动替平台团队完成凭据隔离。Apple 对沙箱的定位也是限制资源访问、降低被攻破后的损害,而不是保证应用不会被攻破。Apple 的沙箱设计说明可作为理解边界的参照。
最低上线门槛应写成四个可验证条件:
- ✅ 受限模式确实生效,并能显示实际模式与执行结果。
- ✅ 工作区外写入被拒绝,临时目录写入范围符合文档。
- ✅ 沙箱运行器不可用时返回
SANDBOX_UNAVAILABLE,不转为非隔离执行。 - ✅ 权限扩大必须有具体理由、明确批准,并且只作用于当前调用。
只要其中一项无法复现,个人受控项目可以暂停上线;不可信代码、第三方插件或共享团队任务则不应继续使用同一台主机。
read-only 与 workspace-write 的边界如何验收
验收时不要只检查界面上显示的模式名称。真正要观察的是命令解析后的实际路径,包括符号链接、相对路径、.. 路径和临时目录。官方策略文档说明,工作区根目录会按文件系统语义解析为绝对路径;因此表面上看起来位于工作区内的路径,最终可能解析到工作区之外。策略解析文档对此有明确说明。
建议准备一个空的测试工程,至少记录以下四组结果:
| 测试对象 | read-only 预期 |
workspace-write 预期 |
验收记录 |
|---|---|---|---|
| 工作区内文件 | 写入被拒绝 | 可以写入 | 记录实际绝对路径 |
| 工作区外文件 | 写入被拒绝 | 仍应被拒绝 | 不接受只看字符串路径 |
| 平台临时目录 | 仅允许必要 sink | 允许后端承诺的临时区域 | 记录具体目录 |
符号链接、..、相对路径 |
不能绕过策略 | 不能越出规范根目录 | 保存命令与返回信息 |
测试命令不需要复杂。可以让 Agent 尝试创建一个文件、修改一个已有文件,再通过符号链接指向工作区外的保护文件。每项都要保存:命令、当前工作目录、解析后的目标路径、退出状态、标准错误、沙箱事实字段。
danger-full-access 不应被当作“经常拒绝时的修复方案”。它的语义就是绕过限制,适合一次性人工处置,不适合作为默认运行模式。
这里还有一个容易忽略的区别:workspace-write 主要承诺写入边界。若任务要求“Agent 完全看不到工作区之外的文件”,当前模式不能直接满足这个目标。文件读取、网络访问和进程可见性应另外设计,而不是从模式名称推导出不存在的能力。
怎么确认 sandbox-exec 失效后不会绕过沙箱
正常命令失败、文件访问被拒绝和沙箱运行器故障,必须分成三类记录。
| 结果类型 | 代表什么 | 是否说明沙箱失效 |
|---|---|---|
| 普通命令失败 | 命令自身退出,或参数、依赖有问题 | 不一定 |
| 文件访问被拒绝 | 命令已经启动,策略阻止了文件效果 | 否,属于预期拒绝 |
SANDBOX_UNAVAILABLE / runnerFailed |
受限运行器未能可靠执行 | 是,需要停止并调查 |
官方 Shell 文档规定,前台调用在没有可用后端、运行器拒绝配置或启动失败时,应返回 SANDBOX_UNAVAILABLE;后台任务则记录 runnerFailed。关键点是:运行器故障发生在命令真正执行之前,不能把“报错”笼统归类为安全。官方 Shell 子系统文档给出了这三类结果的区分方式。
验收可以按以下步骤执行:
- 在受控测试机上确认当前模式为
read-only或workspace-write。 - 临时改变
sandbox-exec的可执行条件,例如使用不存在的运行器路径或模拟不可执行状态。 - 发起一个不会产生破坏的测试命令,例如读取工作区内固定文件。
- 检查是否返回
SANDBOX_UNAVAILABLE,并确认没有生成命令副作用。 - 对后台任务单独检查
runnerFailed字段,不能只看最终进程退出码。 - 将普通退出、策略拒绝和运行器故障分别写入验收报告。
sandbox-exec 已被 Apple 标记为 deprecated,但当前事实边界只能写到“项目仍使用它,且它仍随部分 macOS 环境提供”。未来是否被移除不能提前当成已确认事件。平台团队应把“运行器存在、可执行、配置被接受”作为每次主机交付后的健康检查,而不是假定它永久可用。
权限升级是一次批准,不是永久放权
DeepSeek Harness 允许 Agent 在受限调用被拒绝后,提出更宽的 sandbox_permissions,并附带 justification。这条链路的安全重点不是“能不能升级”,而是“升级是否绑定到具体调用”。官方文档说明,批准服务需要先授予该次调用,批准后的更宽模式不能自动沿用到下一次请求。
验收时应覆盖三种异常路径:
- ❌ 用户拒绝:命令不执行,返回拒绝事实。
- ❌ 用户取消或审批服务不可用:命令不执行,不回退到宽权限。
- ✅ 用户批准:只执行本次具体命令,下一次调用重新按原模式判断。
批准理由不能写成“需要修改项目”。合格理由应包含目标路径、操作类型和后果,例如“需要在当前会话工作区生成测试报告,不访问工作区外目录”。如果 Agent 只给出宽泛理由,平台策略应拒绝。
还要检查批准后的状态是否被写入持久配置。一次批准不应改变默认模式、项目配置或后续会话权限。官方策略文档将默认模式、会话覆盖和显式批准区分处理;部署团队应保存每次模式变化的审计记录。
自托管 DeepSeek V4 的端点与密钥要单独隔离
Seatbelt 只解决文件效果,不会自动保护模型请求、网络连接和密钥。接入自托管 DeepSeek V4 或其他 OpenAI-compatible endpoint 时,至少应拆成两个组件:
| 组件 | 需要保护的对象 | 推荐边界 |
|---|---|---|
| Harness 主机 | 工作区、会话日志、环境变量、Provider 配置 | 专用用户、最小目录、可重置主机 |
| 推理端点 | base URL、Provider ID、模型服务凭据、访问日志 | 独立网络区、独立密钥、限制来源 |
| 项目工作区 | 可编辑配置、脚本、插件和环境文件 | 不放受信任凭据,不允许重定向生产端点 |
官方 Provider 指南要求配置 Provider ID、base URL、协议、凭据和至少一个模型;模型发现可能调用 OpenAI-compatible 的 /models 端点。Provider 配置指南还说明,保存后的密钥不会以明文回显,凭据引用与实际密钥分开保存。
但这不等于项目配置可以安全地接触凭据。应重点测试:
- 项目内可编辑配置能否修改 Provider ID。
- 项目内脚本能否读取
DEEPSEEK_API_KEY或其他环境变量。 DEEPSEEK_BASE_URL是否能被工作区文件或启动脚本重定向。- 会话日志是否包含完整请求头、密钥、提示词或返回内容。
- 推理端点是否限制来源、记录调用,并能单独撤销密钥。
自托管端点最好放在 Agent 可修改工作区之外。更稳妥的方式是由运行器注入短期凭据,或让 Harness 只访问一个不具备管理权限的中间服务。若必须把 Provider 配置放在本机,至少应使用独立用户目录,并让项目文件无法覆盖该目录。
本文不把 MIT 许可证解释为“调用免费”。开源许可只说明代码使用条件;模型调用、自托管推理和 Mac 运行环境仍可能产生独立成本。官方项目页面确认 Harness 采用 MIT,但没有因此承诺模型服务或基础设施免费。官方 Harness 页面可用于核对许可和预览状态。
本机、共享 Mac 与专用远程 Mac 的上线选择
安全验收通过后,仍要判断运行环境是否匹配任务风险。个人项目、短时间运行、代码来源明确,并且凭据不敏感时,本机可以保留。共享办公 Mac 则容易出现用户权限、历史会话、SSH 配置和系统级工具混杂的问题。
| 运行场景 | 主要风险 | 推荐方案 | 上线条件 |
|---|---|---|---|
| 个人可信项目 | 文件误改、配置误用 | 本机 Mac | 四项最低门槛全部通过 |
| 共享团队项目 | 用户串扰、日志泄露、权限残留 | 专用远程 Mac | 独立账户、独立目录、可重置 |
| 不可信仓库 | 恶意脚本、提示注入、插件风险 | 更强隔离环境 | 不能只依赖 Seatbelt |
| 长期在线 Agent | 凭据长期暴露、故障恢复困难 | 专用远程 Mac | 健康检查、日志审计、环境重置 |
| 高敏感端点 | API Key、内部代码、生产网络 | 隔离主机或中间服务 | 端点与工作区分离 |
可以采用一个简单的上线评分法。代码可信度、共享用户数量、持续运行时间、凭据敏感度、故障恢复要求五项分别评为低、中、高。只要出现以下任一情况,就不建议留在日常办公 Mac:
- 代码来源无法确认,或会自动安装依赖和执行脚本。
- 同一台 Mac 由多个用户共享。
- Agent 需要持续在线,且无人值守。
- 项目可以接触生产密钥、内部仓库或私有网络。
- 无法证明运行器故障时会停止执行。
- 主机无法快速清理会话目录、环境变量和 Provider 凭据。
需要临时测试环境时,专用远程 Mac 的价值不只是“换一台机器”。它可以把 Harness 主机、工作区、日志和凭据放到独立交付单元中,测试结束后重新初始化。若现有设备不具备专用主机、持续在线或环境重置条件,可以先参考 ProxyMac 的帮助文档整理交付要求,再决定是否采用按需远程 Mac。
当前方案如果是共享办公 Mac,常见缺点是用户边界不清、凭据残留难审计、系统环境变化不可控;如果是普通云主机,又可能缺少 Mac 专属工具链、远程桌面体验和稳定的图形开发环境。长期运行 DeepSeek Harness 时,专用远程 Mac 通常比把 Agent 放进个人工作机更容易验收、重置和追责。若只是短期试验,本机通过全部测试即可;若需要临时算力、独立环境或持续在线,再评估 ProxyMac 的远程 Mac 方案,不要为了省一次部署时间而牺牲凭据边界。
最终验收清单:缺一项就回退
上线前应把以下结果复制到变更单或安全评审记录中:
- [ ] 记录 Harness 版本、提交号和 macOS 版本。
- [ ] 确认当前仍是 developer preview,并接受兼容性变化风险。
- [ ]
read-only下,工作区内外写入均按预期拒绝。 - [ ]
workspace-write下,只允许工作区和文档承诺的临时区域写入。 - [ ] 已测试符号链接、相对路径、
..和真实解析路径。 - [ ] 已区分普通命令失败、文件拒绝、
runnerFailed。 - [ ]
sandbox-exec不可用时返回SANDBOX_UNAVAILABLE,且命令没有执行。 - [ ] 权限升级包含具体
justification,拒绝或审批不可用时不执行。 - [ ] 一次批准没有自动沿用到下一次调用。
- [ ] 项目工作区不能覆盖受信任 Provider 配置或重定向生产端点。
- [ ] API Key 不写入可编辑项目文件,日志中没有完整密钥。
- [ ] 已决定本机、专用远程 Mac 或更强隔离环境,并写明回退条件。
最终判断很明确:2026 DeepSeek Harness Mac 沙箱安全的合格标准,不是看到 Seatbelt 正常启动,而是证明文件边界、故障闭锁、权限升级和凭据隔离都能被复现。无法证明其中任何一项,就不要把 danger-full-access 当作补丁,也不要继续在共享 Mac 上运行不可信 Agent。