安全

受信任的文件夹

通过受信任的文件夹安全性,控制哪些项目可以使用 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 中的全局钩子 — 它们会在每个受信任和未解析的文件夹中执行
这个主题怎么样?