前言¶
在 DeepSeek Harness(DSH)裏給 agent 開 PowerShell,授權往往按「能碰哪些目錄、要不要審批、沙箱開不開」來管範圍;一條已經落在授權範圍內的 Remove-Item -Recurse -Force 仍然可能是不可逆操作。現有控制面通常不會按命令文本本身再判一檔風險。
下面介紹的 dsh-ps-preflight(維護者 dingchenhui0618-arch,分類 admin-security)在命令進 shell 之前做同步靜態分級:刪除、覆蓋、網絡下載、觸碰憑據等維度,高風險要求二次確認,每條判定寫入本地 JSONL 審計。實現爲零依賴、不聯網、不調模型;判定是純函數,README 稱單條命令亞毫秒級出結果。
這是什麼¶
dsh-ps-preflight 是 DSH 社區插件(目錄頁:skillhub.cn/plugins/dingchenhui0618-arch/dsh-ps-preflight)。它在 pwsh / powershell 工具調用上掛 tools/pre-execute 鉤子:每條命令得到 none / low / medium / high 之一,附帶命中規則、評分與命令摘要。社區目錄與 DeepSeek / 幻方無官方從屬關係;DSH 生態理念是「一切皆插件」,裝插件前建議自行查看源碼與 MIT 許可證。插件與宿主同進程運行,不能當作獨立安全邊界。
核心功能¶
全量預檢與四類必測¶
- 默認攔截工具名:
pwsh、powershell(可在配置裏改tools列表)。 - 必測四類:刪除、覆蓋、網絡下載、觸碰憑據;另覆蓋動態執行(如
iex、-EncodedCommand、ScriptBlock::Create)、系統改動、權限改動。 - 組合升級:例如「下載且執行」「讀憑據且外發」會直接升到
high,即使單步看起來不致命。
風險檔與動作¶
| 檔位 | 含義 | 動作 |
|---|---|---|
none |
只讀、查詢等 | 放行 |
low |
可恢復的寫 | 放行 |
medium |
單文件刪除、覆蓋、下載、讀憑據路徑等 | 記錄,不攔 |
high |
遞歸刪除、強制推送、下載並執行、憑據外發、系統/權限改動等 | 二次確認;拒絕或超時則不執行 |
medium 故意不攔,避免日常工作裏頻繁點確認;分界線放在 README 所稱的「不可逆」一側。
二次確認¶
- 面板內確認(默認
confirmMode: auto下優先):「預檢」面板最近 8 秒內仍在輪詢時,命令停住,卡片倒計時,120 秒內未點視爲拒絕(可用confirmTimeoutMs調整)。 - harness 原生審批:面板未打開或在其他窗口時走
tools的ask;會話 approval policy 爲never時失敗關閉,等同拒絕。 mode: audit時只記錄、不攔。
待確認隊列是宿主級:同一 DSH 進程內各會話的高風險命令共用一個隊列。
審計¶
默認路徑爲 $DSH_HOME/ps-preflight-audit.jsonl(通常 ~/.dsh/ps-preflight-audit.jsonl),可通過 auditPath 修改。每行 JSON 含時間、tier、decision、findings、脫敏且截斷至 300 字符的 command 等字段。經人工確認的高風險命令會寫兩行(分析 pending 與結論 allow/deny)。超過 2 MB 輪轉至 .1(只保留一代)。脫敏爲模式匹配,README 明確說明不是保證。
預檢面板¶
裝好後對話視圖頂部多一個「預檢」tab:計數、待確認隊列、「試一試」(只分級不執行)、最近記錄,底部顯示審計文件位置與大小。
與 dsh-warden 的差異(README 自述)¶
同維護者之前的 dsh-warden 在工程骨架上有參考;判定邏輯、面板與審計格式爲本項目新寫。warden 在正則命中後調模型;本插件純規則、每條命令都分級並落審計,高風險必二次確認,命令參數不出本機。
明確不覆蓋的能力¶
README 列出限制:不是安全邊界、不是完整 PowerShell 解析器、只看命令文本、不覆蓋 bash/computer、分析器異常時 degraded 放行、審計寫失敗會被吞掉等。使用前應把這些邊界當作設計前提,而非「已實測某產品」的結論。
安裝與啓用¶
DSH 要求見 package.json:dsh 版本 >=0.2.0-rc.2 <0.3.0。官方 README 安裝方式如下。
# 從 npm(發佈後)
dsh plugin --profile <你的 profile> add dsh-ps-preflight
# 或直接從 GitHub 源碼
dsh plugin --profile <你的 profile> add github:dingchenhui0618-arch/dsh-ps-preflight
README 說明:不需要任何配置即可使用,默認 mode 爲 enforce。
可選配置寫在插件 config(cordis.patch.yml 的 - id: dsh-ps-preflight 條目下),例如:
| 鍵 | 默認 | 說明 |
|---|---|---|
mode |
enforce |
audit = 只記錄不攔 |
confirmMode |
auto |
panel / ask / auto |
confirmTimeoutMs |
120000 |
面板等待超時 |
panelWindowMs |
8000 |
判定面板是否「有人在看」 |
tools |
["pwsh","powershell"] |
攔截的工具名 |
auditPath |
$DSH_HOME/ps-preflight-audit.jsonl |
審計文件 |
maxAuditBytes |
2097152 |
輪轉閾值 |
典型用法¶
- 安裝並打開 DSH 對話,切到「預檢」tab,觀察檢查條數與最近記錄。
- 在「試一試」中粘貼待執行命令,點「預檢」,查看檔位與命中規則,再決定是否讓 agent 真正調用 shell 工具。
- 若 agent 觸發
high,在待確認卡片點「確認執行」或「拒絕」;若未開面板,按 harness 原生審批流程處理。 - 需要只觀測、不攔截時,將
mode設爲audit;需要固定確認通道時,將confirmMode設爲panel或ask。 - 事後複查:
tail或編輯器打開auditPath對應 JSONL,按decision、tier過濾。
適用場景與注意¶
適合:在 Windows 或跨平臺場景下頻繁讓 agent 跑 PowerShell,希望在誤刪、覆蓋敏感文件、一鍵下載執行、憑據外發等路徑上多一層可解釋、可審計的閘門,且不希望把命令發給外部模型。
注意:
- 插件不能防同進程惡意繞過;安裝前請閱讀 GitHub 倉庫 源碼與 MIT 許可證。
- 動態拼接、自定義函數、從文件讀入的腳本等,靜態文本分析可能看不見。
- 社區目錄星標等信息以站點爲準;倉庫 README 標註 136 條測試通過、Node ≥22。
結尾¶
dsh-ps-preflight 補的是「命令進 shell 前」的一層:純規則分級、高風險二次確認、全量本地審計,與範圍類授權互補。目錄頁:https://www.skillhub.cn/plugins/dingchenhui0618-arch/dsh-ps-preflight;源碼與詳細規則表:https://github.com/dingchenhui0618-arch/dsh-ps-preflight。