安全性

受信任的資料夾

透過受信任的資料夾安全性,控制哪些專案可以使用 Bob Shell 的完整功能。

受信任的資料夾讓你可以控制哪些專案可以與 Bob Shell 搭配使用。你必須核准一個資料夾,Bob Shell 才會載入任何專案特定的設定,以保護你免受潛在惡意程式碼的侵害。

注意:

受信任資料夾功能預設為停用。若要啟用,請開啟 /settings 選單,並將 Folder Trust 設為 true。變更必須重新啟動後才會生效。

受信任的資料夾的運作方式

當你第一次從某個資料夾執行 Bob Shell 時,會自動彈出信任對話方塊,提示你做出選擇:

  • 信任資料夾:授予目前資料夾完全信任(例如 my-project
  • 信任父資料夾:授予父目錄(例如 safe-projects)信任,這將自動信任其所有子目錄。如果你將所有安全專案儲存在同一個位置,請使用此選項
  • 不信任:將資料夾標記為不受信任。Bob Shell 在受限安全模式下執行

你的選擇將儲存在 ~/.bob/trustedFolders.json 中,因此每個資料夾只需選擇一次。

信任層級

~/.bob/trustedFolders.json 檔案為每個資料夾儲存一筆信任記錄。每筆記錄使用以下三種信任層級之一:

信任層級效果
TRUST_FOLDER授予精確資料夾路徑完全信任。專案設定、鉤子、模式、技能和 MCP 伺服器均正常載入。
TRUST_PARENT授予指定目錄及其下所有子目錄完全信任。用於涵蓋包含多個程式庫的工作區根目錄。
DONT_TRUST將資料夾標記為不受信任。Bob Shell 在受限安全模式下執行並封鎖所有專案特定的設定。請參閱不受信任的資料夾的影響

~/.bob/trustedFolders.json 中沒有記錄的資料夾稱為_未解析_資料夾。Bob Shell 對未解析資料夾的處理方式取決於受信任資料夾功能是否已啟用。詳情請參閱非互動式工作階段

不受信任的資料夾的影響

當資料夾不受信任時,Bob Shell 會在受限安全模式下執行。以下功能會被停用或忽略:

功能安全模式下的行為
專案設定不會載入 .bob/settings.json。自訂工具和可能有風險的設定會被封鎖。
工具自動核准即使你已全域啟用自動核准,在任何工具執行之前也會始終提示你進行確認。
MCP 伺服器Bob Shell 不會嘗試連線至任何 MCP 伺服器。
自訂模式在專案資料夾中定義的模式無法使用。你只能使用內建模式和全域定義的模式。
Skills專案隨附的 skills 不會被載入。只有全域可用的 skills 和內建能力會保持啟用。
Subagents專案資料夾中的自訂 subagents 無法使用。代理無法將工作委派給專案提供的輔助代理。
專案指示不會讀取 AGENTS.md 之類的指引檔案和自訂專案規則。代理會在沒有專案自訂指示的情況下運作。

授予資料夾信任將為該工作區解鎖 Bob Shell 的完整功能。

管理信任設定

信任如何判定
Bob Shell 會檢查 ~/.bob/trustedFolders.json,查看目前資料夾是否已有既有的信任決定。
變更目前資料夾的信任
在 Bob Shell 中執行 /permissions 斜線指令。彈出互動式對話方塊,讓你變更目前資料夾的信任層級。
檢視所有信任規則
檢查主目錄中的 ~/.bob/trustedFolders.json,即可查看所有受信任與不受信任資料夾規則的完整清單。

非互動式工作階段

與互動模式不同,非互動式工作階段(bob run)從不顯示信任對話方塊。Bob Shell 根據預先存在的信任決定靜默執行。

功能停用時的預設行為

當受信任資料夾功能處於停用狀態(預設),Bob Shell 將所有資料夾視為受信任。無論 ~/.bob/trustedFolders.json 中是否存在記錄,專案設定、鉤子、模式、技能和 MCP 伺服器都會為每個資料夾無限制地載入。

功能啟用時的行為

當受信任資料夾功能已啟用時,Bob Shell 在載入任何專案特定內容之前會評估工作資料夾的信任層級:

  • 未解析資料夾~/.bob/trustedFolders.json 中無記錄):資料夾被視為受信任。專案設定和鉤子正常載入。
  • TRUST_FOLDERTRUST_PARENT 記錄:資料夾受信任。全部功能可用。
  • DONT_TRUST 記錄:Bob Shell 拋出錯誤並拒絕執行:
    <folder> is not a trusted folder. Pass --trust to run in this folder,
    or run Bob Shell interactively and choose a trust level.
重要:

僅啟用受信任資料夾功能並不能阻止沒有信任決定的資料夾執行鉤子。_未解析_資料夾(例如在 CI/CD 管線中首次複製的程式庫)會被視為受信任。只有明確的 DONT_TRUST 記錄才能阻止鉤子和專案設定的載入。

無頭模式下的鉤子執行

~/.bob/settings/settings.json 中定義的全域鉤子會在所有未明確標記為 DONT_TRUST 的資料夾(包括未解析資料夾)中執行。專案內 .bob/settings.json 中定義的工作區鉤子同樣受資料夾信任約束:只有在資料夾受信任或未解析時才會載入,當資料夾為 DONT_TRUST 時會被靜默略過。

要在對不熟悉的程式庫執行 bob run 之前了解設定了哪些鉤子及其作用,請參閱生命週期鉤子

不同模式下的 flag 行為

--trust--auto-approve flag 的行為會依 Bob Shell 的啟動方式而不同。選擇你的模式以查看對應的行為:

--trust
該資料夾會被持久儲存為受信任。Bob Shell 會將目前目錄的受信任項目寫入 ~/.bob/trustedFolders.json,並跳過首次存取時的信任對話方塊。這等同於開啟資料夾後手動選擇「信任資料夾」。
--auto-approve
在不受信任的資料夾中,自動核准會被靜默抑制。你仍然會在每次工具執行前收到確認提示。
--trust
該資料夾只會在本次執行中被視為受信任。這個信任決定不會被持久儲存,也不會向信任儲存寫入任何內容。

加固自動化管線

如果你在 CI/CD 管線中對你不控制的程式庫(例如作為建置的一部分複製的第三方或開源程式庫)執行 bob run,請執行以下步驟以防止不受信任的鉤子程式碼執行。

開始前:在 ~/.bob/settings/settings.json 中將 security.folderTrust.enabled 設為 true 以啟用受信任資料夾功能。變更必須重新啟動後才會生效。

  1. 確定你控制的目錄,並為每個目錄在 ~/.bob/trustedFolders.json 中新增 TRUST_PARENT 記錄。這將涵蓋已知工作區根目錄下的所有程式庫,並將該樹之外的所有內容保留為未解析狀態。
    {
      "/home/runner/work/my-org": "TRUST_PARENT"
    }
  2. 對於從外部或不受信任來源複製的任何程式庫,在執行 bob run 之前新增 DONT_TRUST 記錄:
    {
      "/home/runner/work/my-org": "TRUST_PARENT",
      "/home/runner/work/third-party-repo": "DONT_TRUST"
    }
  3. 檢查 ~/.bob/settings/settings.json 中設定的全域鉤子。全域鉤子會在所有受信任或未解析的資料夾中執行,包括 TRUST_PARENT 記錄涵蓋的所有程式庫。刪除或限制範圍任何不得針對不受信任程式碼執行的鉤子。
  4. 在對任何複製的程式庫執行 bob run 之前,像檢查 Makefile 或 CI 設定檔一樣,檢查該程式庫內的 .bob/settings.json 中的工作區鉤子。工作區鉤子會在所有受信任或未解析的資料夾中載入。

完成這些步驟後,Bob Shell 會封鎖含有 DONT_TRUST 記錄的資料夾載入專案設定和鉤子,同時允許 bob run 在你控制的工作區中正常執行。

最佳實踐

  • 僅信任包含你自己已審查或建立的程式碼的資料夾
  • 對包含多個安全專案的目錄使用 TRUST_PARENT,以避免管理個別資料夾記錄
  • 定期審查 ~/.bob/trustedFolders.json 以稽核哪些資料夾受信任
  • 在處理不熟悉的程式碼時,執行 bob run 之前為複製的目錄新增 DONT_TRUST 記錄
  • 定期檢查 ~/.bob/settings/settings.json 中的全域鉤子 — 它們會在每個受信任和未解析的資料夾中執行
這個主題如何?