dsh-acl-sandbox-patch:DSH 0.1.7 Windows 沙箱非系统盘工作区修复

DSH 0.1.7 引入了基于 ACL 的沙箱机制,要求 workspace-write 策略下的命令在 spawn 前必须通过权限授权。在非系统盘工作区(如 D:/E:/F:)下,由于目录默认 ACL 不含创建者 FullControl、且 DSH 运行在 UAC 过滤令牌下,调用 SetNamedSecurityInfoW 时因缺少 WRITE_OWNER 权限返回 Win32 5 错误,导致沙箱 fail-closed。dsh-acl-sandbox-patch 是一个临时修复插件,通过包装底层 API 恢复命令执行能力。

插件信息

dsh-acl-sandbox-patch 是一个针对 DSH 0.1.7 Windows ACL 沙箱在非系统盘工作区下全部命令 spawn 前失败的临时修复插件。

核心功能

  1. 修复非系统盘工作区失败:解决 DSH 0.1.7 在非系统盘工作区下,grantWrite 授权调用失败导致命令无法 spawn 的问题。
  2. API 包装与降级:包装 SetNamedSecurityInfoW。当写入 Low 完整性标签失败时,自动降级为仅注入 DACL(剥离 LABEL_SECURITY_INFORMATION),依赖属主隐式 WRITE_DAC 权限完成授权。
  3. 令牌完整性控制:包装 SetTokenInformation。检测工作区是否包含 Low 完整性强制标签。若不存在,跳过子进程令牌降级,避免因 no-write-up 策略导致写操作被拒。
  4. 平台限制:仅限 Windows 平台,其他平台自动 no-op。
  5. 版本兼容:支持 DSH >= 0.1.7-rc.1。

安装

通过官方插件命令安装,该命令会链接包并记入依赖。

dsh plugin --profile web add github:masknull/dsh-acl-sandbox-patch

安装后需重启 DSH 使新 bundle 层生效。重启日志应显示激活信息。

典型用法

安装并重启 DSH 后,新会话中的 workspace-write 命令将直接执行,无需逐条批准。

  1. 执行基础命令:
    • whoami
    • echo hi
  2. 验证文件操作:
    • 在沙箱内执行 New-Item 建立文件。
    • 覆写已存在文件。

注意事项

  1. 生效方式:必须重启 DSH。插件通过 NODE_OPTIONS 注入预加载,仅对重启后的新进程生效。
  2. 性能影响:重启后首条 workspace-write 命令较慢(需传播 DACL)。实测在 44,251 个文件的工作区上约需 20 秒;同进程后续命令约 1.7 秒;新开会话约 2 秒。
  3. 旧 Runner 问题:重启前已建立的会话,其命令通道可能由旧 runner 处理(重启不回收),行为可能异常。新开会话即可恢复正常。
  4. 安全边界变化:
    • 保留:WRITE_RESTRICTED 令牌、capability SID Allow ACE、world SID Deny ACE、fail-closed 策略。
    • 失去:仅在降级场景下,移除了 Low 完整性强制标签这一层纵深防御。
  5. 供应链安全:建议使用固定提交版本,例如 github:masknull/dsh-acl-sandbox-patch#<commit sha>。

总结

该插件解决了 DSH 0.1.7 在特定权限环境下的兼容性问题,通过牺牲部分完整性标签机制换取功能可用性。随着上游沙箱包升级或问题修复,建议及时卸载。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜