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 在特定權限環境下的兼容性問題,通過犧牲部分完整性標籤機制換取功能可用性。隨着上游沙箱包升級或問題修復,建議及時卸載。

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

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

小夜