dsh-fleet-audit:給 DSH agent 機器做一次只讀的憑據衛生審計

前言

多 agent 時代的開發機上,憑據散落在 ~/.gitconfig、agent 配置、.git/config 和各種 .env 裏。git 的 url.*.insteadofpushurl 一旦嵌了 token(例如 https://oauth2:<token>@gitlab.example.com/...),任何一次 git remote -v 都會把密鑰打印進日誌、對話或 CI。

以往的做法是手工逐個檢查文件權限、grep 一遍 remote 配置,費時且容易漏。dsh-fleet-audit 把這件事做成了 DSH 裏的一條指令:一鍵只讀審計,輸出全程脫敏。DSH 的理念是「一切皆插件」,這類安全基線體檢正適合以插件形式掛進來。下面介紹這個插件的定位、功能、安裝與用法。

這是什麼

dsh-fleet-audit 是一個 DSH agent 艦隊衛生審計插件,由 LeslieWylie 維護,當前版本 0.0.1,採用 MIT 許可證。它只做三件事:檢查憑據文件權限、掃描 git remote 中內嵌的憑據、識別常見 provider token 前綴字面量。整個插件只讀、零依賴、確定性,發現問題時只報告,不修改任何文件。

核心功能

憑據文件權限檢查

檢查 ~/.gitconfig~/.netrc~/.npmrc~/.env~/.ssh/ 等常用憑據文件的權限。這類文件應收緊爲 600/700,只要組或其他用戶可讀,就標記爲 tooOpen

git remote 內嵌憑據掃描

掃描 ~/.gitconfig 與給定目錄下的 .git/config,識別 https://user:pass@hosthttps://oauth2:TOKEN@host、token 型用戶名等內嵌憑據。輸出中 URL 裏的憑據部分以 *** 掩碼,逐字節保證不泄露原文。

provider token 前綴字面量掃描

按 github / github-fine-grained / gitlab / gitlab-ci / slack / aws / openai / jwt 等常見前綴做字面量掃描,只報「類型 × 出現次數」,不輸出內容本身。這項檢查可通過 scanSecrets 參數關閉。

安全邊界

  • 只讀:不寫文件、不啓進程、不訪問網絡、不保存狀態。
  • 脫敏:所有疑似憑據一律掩碼,測試同時斷言輸出 JSON 不含原始密鑰。
  • 有界:git config 數量(默認 200,上限 2000)與遞歸深度(默認 5,上限 20)均設上限,防掃描失控。

安裝與啓用

插件通過 dsh plugin 命令安裝到指定 profile:

dsh plugin --profile web add github:LeslieWylie/dsh-fleet-audit

本地驗證時可以直接指向本地路徑:

dsh plugin --profile web add /path/to/dsh-fleet-audit

運行環境要求 Node ^22.19.0 || >=24.0.0,peer 依賴爲 @deepseek-ai/cordis ^4.0.1@deepseek-ai/dsh-tools ^0.1.0-rc.6。安裝後重啓 dsh web,直接說「審計一下本機憑據衛生 / run fleet_audit」即可執行。

典型用法

審計通過一個工具調用完成,參數如下:

參數 類型 說明
roots string[] 遞歸掃描 .git/config 的目錄(可選;默認只查 ~/.gitconfig
files string[] 額外要查權限的憑據文件絕對路徑
scanSecrets boolean 是否掃描 token 前綴字面量(默認 true
maxGitConfigs number git config 掃描上限(默認 200,上限 2000)
maxDepth number 目錄遞歸深度(默認 5,上限 20)

輸出是一份脫敏的 JSON 報告,包含權限問題、git 泄漏和 token 出現情況的彙總:

{
  "ok": true,
  "summary": { "files": 5, "tooOpen": 1, "gitLeaks": 2, "secretFiles": 1, "issues": 4, "scannedGitConfigs": 12 },
  "checks": {
    "credentialFiles": [
      { "path": "/Users/alice/.gitconfig", "exists": true, "mode": "644", "tooOpen": true }
    ],
    "gitRemoteLeaks": [
      { "file": "/Users/alice/code/proj/.git/config", "host": "gitlab.example.com", "maskedUrl": "https://***:***@gitlab.example.com/group/proj.git" }
    ],
    "secrets": [
      { "file": "/Users/alice/.gitconfig", "providers": [ { "provider": "github", "count": 1 } ] }
    ]
  },
  "note": "Read-only audit; secret-like values are masked in the output. Fix permissions with chmod 600 and rotate any exposed credentials."
}

適用場景與注意

這個插件適合在多 agent 共用的開發機、CI 容器或長期運行的 agent 環境裏做定期體檢:確認憑據文件權限沒收得過寬、remote 配置裏沒嵌 token、代碼與配置中沒有散落的密鑰前綴。

使用前先明確它的邊界:

  • 僅掃描文本類配置文件,不解析加密存儲、系統鑰匙串、二進制文件。
  • token 前綴識別是啓發式規則,可能漏報(非常規前綴),也可能誤報(需人工複覈)。
  • 默認只檢查固定的憑據文件列表;任意路徑要靠 roots / files 顯式指定。
  • 插件不主動修改任何文件。發現泄漏後需自行 chmod 600 並輪換密鑰。
  • 插件以當前 dsh 進程的權限運行,安裝前建議檢查源碼與許可證。

需要卸載時執行:

dsh plugin --profile <p> remove dsh-fleet-audit

或者從 dsh.profile.bundles 中刪除對應行。插件只讀、無狀態,卸載不影響任何用戶數據。

最後說明一點:這是獨立社區插件,與 DeepSeek 官方或其 DSH 倉庫無隸屬關係,倉庫發佈時會添加 dsh-plugin topic 便於發現。

小結

dsh-fleet-audit 用一個只讀、零依賴、輸出脫敏的插件,把「憑據權限是否收緊、remote 裏有沒有嵌 token、有沒有裸露的密鑰前綴」這三件容易被忽略的事變成一條指令。裝上跑一遍,再按報告手動收緊權限、輪換密鑰,就是一次完整的衛生審計。

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

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

小夜