dsh-file-integrity-check:清理 DSH 工作區沙箱 ACL 殘留

前言

在 Windows 上,DeepSeek Harness(DSH)爲受限工作區會把目錄完整性降到 Low,並寫入顯式的 S-1-4-* 沙箱授權 ACE,好讓受限令牌能寫入。這些標記寫在磁盤 ACL 裏,不隨會話結束而消失;工作區從 DSH 移除或 DSH 升級之後,目錄上仍可能留着 Low 標籤和沙箱 ACE。安裝器、IDE、備份工具再訪問這些路徑時,可能觸發權限檢查失敗或表現異常。手動用 icacls 逐目錄排查既費事,又容易誤改正常授權。下面介紹社區插件 dsh-file-integrity-check,它按 DSH 實時工作區列表做只讀掃描、確認後修復、復掃校驗,併爲每個工作區保留一條可替換的 ACL 回滾記錄。

這是什麼

dsh-file-integrity-check 由維護者 Dofang-C 發佈,分類爲 admin-security,當前 package 版本爲 1.2.0(MIT 許可證)。它是 僅 Windows 的 DSH 插件:側邊欄提供白色工作區映射頁,底層還有可脫離 DSH 單獨運行的 PowerShell 引擎。插件不掃全盤,只讀 DSH 工作區註冊表裏的路徑;掃描階段不改 ACL,修復前需確認,默認行爲等價於只讀 dry run。

核心功能

插件只處理與 DSH 沙箱殘留相關的三類發現:

  1. Low 完整性標籤(SACL Mandatory Label,S-1-16-4096)
  2. 非繼承的顯式 S-1-4-* 沙箱授權 ACE
  3. Everyone:(DENY)(DC),且僅當同一目錄已命中 Low 或 S-1-4 時才納入修復

正常的 X2\<用戶名>:(F) 等工作區授權不會被修改;單獨出現的 Everyone 拒絕項不算命中,也不會被碰。

已覈實的能力包括:

  • 掃描:單個工作區,或 掃描全部工作區 一次請求覆蓋當前列表。
  • 修復:確認後保存當前 ACL,再改標籤與 DACL;未確認時只讀。
  • 校驗:修復後復掃,報告剩餘 Low / S-1-4 數量。
  • 回滾:每個工作區最多一條回滾記錄;下一次成功修復會原子替換舊記錄。無發現時不產生備份與記錄。
  • 工作區映射:來自 DSH 實時列表;在 DSH 中刪除工作區後,插件頁面對應卡片消失。
  • 無第三方依賴:引擎爲 Windows PowerShell 5.1 / PowerShell 7,配合內聯 C# P/Invoke 與 icacls。

重目錄(如 node_modules、.git、dist、.venv、AppData\Local\Temp)會跳過;重解析點與 junction 不跟隨;長路徑使用 \\?\ 前綴。

安裝與啓用

catalog 條目合併後,可在 dsh-market 中搜索 文件完整性檢查 / File Integrity Check 並安裝。社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。

從源碼安裝時,通過 Plugin Manager 將插件目錄作爲本地 bundle 安裝,例如使用 DSH agent 工具:

plugin_manager action=install_bundle target="<path-to>\dsh-file-integrity-check"

安裝後刷新 DSH Web GUI。側邊欄會出現盾牌圖標 文件完整性檢查。若 Host 半有變更,需完全退出並重新打開 DSH,而不是僅刷新頁面。

環境要求:

  • Windows 10 或 Windows 11
  • DSH 0.2.1 或更新(桌面或 Web)
  • Windows PowerShell 5.1 或 PowerShell 7

典型用法

側邊欄

  1. 打開側邊欄 文件完整性檢查。
  2. 每個 DSH 工作區對應一張卡片。
  3. 掃描 (Scan):只讀。
  4. 修復 (Fix):確認後保存 ACL 並修改。
  5. 校驗 (Verify):復掃並報告計數。
  6. 掃描全部工作區 (Scan all):一次掃描當前全部工作區。

修復成功後卡片顯示 可回滾 (Rollback available);詳情裏可 回滾到上次狀態 或 刪除記錄(刪除記錄需確認,會永久移除記錄目錄)。

回滾記錄路徑(僅 ACL 元數據,不含文件內容):

%LOCALAPPDATA%\dsh-lowlabel-fix\rollback\<first-16-hex-of-path-sha256>\

獨立 PowerShell CLI

不依賴 DSH 界面時,可調用倉庫內 scripts/DshWorkspaceAcl.ps1:

# 掃描單個工作區目錄樹
powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\DshWorkspaceAcl.ps1 `
  -Action scan -Path "D:\project" -Deep

# 修復(無 -Apply 時爲 dry run)
powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\DshWorkspaceAcl.ps1 `
  -Action fix -Path "D:\project" -Apply

# 校驗
powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\DshWorkspaceAcl.ps1 `
  -Action verify -Path "D:\project"

# 列出回滾記錄
powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\DshWorkspaceAcl.ps1 `
  -Action records

# 回滾
powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\DshWorkspaceAcl.ps1 `
  -Action rollback -Path "D:\project"

# 永久刪除一條記錄
powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\DshWorkspaceAcl.ps1 `
  -Action delete-record -Path "D:\project"

加 -Json 時,機器可讀結果寫到 stdout,進度與階段信息寫到 stderr。

適用場景與注意

適合在 Windows 上長期使用 DSH、且工作區目錄曾以受限模式運行、又希望在不誤傷正常授權的前提下清理 Low 標籤與 S-1-4-* 殘留的用戶。修復邏輯有明確邊界:只移除非繼承的 S-1-4-* allow ACE;只把 Low 標籤恢復爲可繼承的 Medium(icacls /setintegritylevel "(OI)(CI)M");改前會保存 SDDL 與 icacls /save 的 .acl 到回滾目錄。

對當前用戶擁有的目錄,通常不需要管理員權限;受保護的系統位置可能仍不可讀或不可寫,插件會報告並跳過,不會強行修改。不可讀目錄同樣會報告並跳過,批次內其餘路徑繼續處理。

插件以 當前 DSH 進程權限 運行;安裝前應自行查看源碼與 MIT 許可證,確認行爲符合預期。DSH 生態理念是「一切皆插件」;本插件 GitHub 倉庫當前約 2 stars,可作爲 admin-security 類補充工具使用。

結尾

經過上面的步驟,你可以在 DSH 側邊欄或 PowerShell 裏對工作區做掃描、確認修復、校驗與回滾,避免沙箱 ACL 長期留在磁盤上干擾其他工具。目錄頁與源碼:

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

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

小夜