DSH(DeepSeek Harness)允許智能體在沙箱環境中執行 Shell 命令。傳統的安全策略往往基於命令名稱(如 rm 或 cat)來判斷危險程度,這種方式容易導致誤判,或者讓看似無害的命令由於名字被阻止。dsh-allow 插件改變了這一邏輯,它分析命令實際需要訪問的文件系統路徑和操作能力,以此決定是否授予權限。
是什麼¶
dsh-allow 是一個爲 DSH 提供的文件系統權限層插件,由開發者 DWJZ 維護。它的核心作用是將權限控制從“按命令名”轉移到“按路徑和能力”。
該插件在 tools/pre-execute 鉤子中介入,解析命令的文件系統效果,結合預定義的規則生成 Seatbelt 配置文件。這意味着,沙箱內的子進程、命令行中未顯示的內聯代碼,以及通過該命令啓動的程序,都會被強制遵守這些權限規則。
核心功能¶
- 路徑級權限控制:支持對特定路徑進行
read(讀取/列表)、write(修改)、create(創建)、delete(刪除)、execute(執行)五種能力的細粒度控制。 - 策略模式:支持
deny(拒絕)、allow once(單次允許)、always allow(始終允許)三種策略。 - 工具操作規則:針對請求更寬泛進程權限的管理工具(如
plugin_manager)制定規則。 - Seatbelt 強制執行:將策略編譯爲 macOS 的 Seatbelt 配置文件,在沙箱入口處強制執行。
- 審批界面:提供 Approvals Tab 用於人工審批。
使用示例¶
權限的授予基於路徑和操作類型,而非命令名稱。以下是一些典型的判斷邏輯:
| 命令操作 | 結果 | 說明 |
|---|---|---|
cat README.md |
allow | 讀取工作區內的文件 |
cat ~/.ssh/id_ed25519 |
refused | 用戶數據被隔離,不可讀取 |
echo x > out.md |
allow | 在工作區內創建文件 |
rm -rf build |
prompt | 工作區內刪除操作需要審批 |
gh pr list |
prompt | 執行未在規則中授權的二進制文件 |
echo x > ~/.dsh/dsh-allow.json |
refused | 權限存儲文件受硬保護,不可寫入 |
配置與注意事項¶
- 權限存儲保護:權限存儲文件(通常位於
$DSH_HOME/dsh-allow.json)和審計日誌是“硬保護”的。無論是用戶規則還是智能體,都無法通過文件工具修改這些文件。 - 工作區隔離:插件不會讀取工作區內的
.dsh-allow.json,防止倉庫代碼自行提升權限。 - 系統路徑保護:平臺受保護路徑(如
/System、/bin、/dev等)對任何寫操作(write、create、delete)都是拒絕的,無論用戶規則如何配置。 - 許可證:MIT License。
目前官方未提供特定的安裝命令,可通過 SkillHub 目錄 或 GitHub 倉庫 獲取。
短結尾¶
dsh-allow 通過將安全策略建立在文件系統路徑和操作能力之上,替代了粗糙的命令名過濾機制。配合 Seatbelt 的強制執行,它爲 DSH 智能體提供了更可靠的沙箱隔離能力。