Security

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

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

工作区外的配置文件被 Agent 读到,或者沙箱报错后命令仍然继续执行,这是最需要先排查的症状。

获胜者:通过 read-onlyworkspace-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-onlyworkspace-write 的边界如何验收

验收时不要只检查界面上显示的模式名称。真正要观察的是命令解析后的实际路径,包括符号链接、相对路径、.. 路径和临时目录。官方策略文档说明,工作区根目录会按文件系统语义解析为绝对路径;因此表面上看起来位于工作区内的路径,最终可能解析到工作区之外。策略解析文档对此有明确说明。

建议准备一个空的测试工程,至少记录以下四组结果:

测试对象 read-only 预期 workspace-write 预期 验收记录
工作区内文件 写入被拒绝 可以写入 记录实际绝对路径
工作区外文件 写入被拒绝 仍应被拒绝 不接受只看字符串路径
平台临时目录 仅允许必要 sink 允许后端承诺的临时区域 记录具体目录
符号链接、..、相对路径 不能绕过策略 不能越出规范根目录 保存命令与返回信息

测试命令不需要复杂。可以让 Agent 尝试创建一个文件、修改一个已有文件,再通过符号链接指向工作区外的保护文件。每项都要保存:命令、当前工作目录、解析后的目标路径、退出状态、标准错误、沙箱事实字段。

danger-full-access 不应被当作“经常拒绝时的修复方案”。它的语义就是绕过限制,适合一次性人工处置,不适合作为默认运行模式。

这里还有一个容易忽略的区别:workspace-write 主要承诺写入边界。若任务要求“Agent 完全看不到工作区之外的文件”,当前模式不能直接满足这个目标。文件读取、网络访问和进程可见性应另外设计,而不是从模式名称推导出不存在的能力。

怎么确认 sandbox-exec 失效后不会绕过沙箱

正常命令失败、文件访问被拒绝和沙箱运行器故障,必须分成三类记录。

结果类型 代表什么 是否说明沙箱失效
普通命令失败 命令自身退出,或参数、依赖有问题 不一定
文件访问被拒绝 命令已经启动,策略阻止了文件效果 否,属于预期拒绝
SANDBOX_UNAVAILABLE / runnerFailed 受限运行器未能可靠执行 是,需要停止并调查

官方 Shell 文档规定,前台调用在没有可用后端、运行器拒绝配置或启动失败时,应返回 SANDBOX_UNAVAILABLE;后台任务则记录 runnerFailed。关键点是:运行器故障发生在命令真正执行之前,不能把“报错”笼统归类为安全。官方 Shell 子系统文档给出了这三类结果的区分方式。

验收可以按以下步骤执行:

  1. 在受控测试机上确认当前模式为 read-onlyworkspace-write
  2. 临时改变 sandbox-exec 的可执行条件,例如使用不存在的运行器路径或模拟不可执行状态。
  3. 发起一个不会产生破坏的测试命令,例如读取工作区内固定文件。
  4. 检查是否返回 SANDBOX_UNAVAILABLE,并确认没有生成命令副作用。
  5. 对后台任务单独检查 runnerFailed 字段,不能只看最终进程退出码。
  6. 将普通退出、策略拒绝和运行器故障分别写入验收报告。

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 配置指南还说明,保存后的密钥不会以明文回显,凭据引用与实际密钥分开保存。

但这不等于项目配置可以安全地接触凭据。应重点测试:

  1. 项目内可编辑配置能否修改 Provider ID。
  2. 项目内脚本能否读取 DEEPSEEK_API_KEY 或其他环境变量。
  3. DEEPSEEK_BASE_URL 是否能被工作区文件或启动脚本重定向。
  4. 会话日志是否包含完整请求头、密钥、提示词或返回内容。
  5. 推理端点是否限制来源、记录调用,并能单独撤销密钥。

自托管端点最好放在 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。

用 ProxyMac 完成更稳妥的 Mac 沙箱验收

租用 ProxyMac 独享 M4 云端 Mac,为沙箱测试提供独立、可控且不影响本地环境的运行空间。
支持 SSH、VNC 和浏览器接入,方便你逐项验证文件边界、权限控制、失效保护与凭据风险。