理解 Claude Code 的安全机制:Sandbox、Trust 与 Approval
Claude Codeのセキュリティの仕組み - Sandbox・Trust・Approvalを理解する
总结了「Claude Code」的安全机制。
目次
- 1. 前言
- 2. Sandbox - 限制可操作范围
- 2-1. 什么是Sandbox
- 2-2. 工作文件夹和保护文件
- 2-3. 权限(Permissions)是什么
- 2-4. 常见误解
- 3. Trust - 启用项目特定设置
- 3-1. 什么是Trust
- 3-2. 常见误解
- 4. Approval - 批准操作执行
1. 前言
Anthropic的「Claude Code」是一个能够自主进行程序创建、修改、测试和命令执行的AI编码代理。
由于AI会操作本地PC的文件并执行命令,因此存在误操作或安全风险。为此,Claude Code配备了限制AI操作并在必要时由用户授权的机制。
在实际使用Claude Code时,会遇到以下场景:
・无法在沙箱中执行命令
・询问是否信任(Trust)工作文件夹
・询问是否批准(Approval)文件编辑或命令执行
这些看起来像是类似的安全功能,但各自的作用不同。
本次将基于Anthropic的官方文档「Configure permissions」和「Configure the sandboxed Bash tool」,介绍Sandbox、Trust和Approval之间的区别。
2. Sandbox - 操作できる範囲を制限する
2-1. Sandboxとは
「Sandbox」(サンドボックス)は、Claude Codeが実行するコマンドに対して、ファイル操作やネットワーク通信などを制限する仕組みです。主にシェルコマンドを対象とし、ファイル編集ツールなどは別の仕組みで制御されます。
主に2種類の状態があります。
・disabled:Sandboxの制限を適用しない
・enabled:ファイルの書き込み先やネットワーク通信を制限。作業フォルダや一時フォルダなどへの書き込みは許可
Claude Codeでは、Sandboxはデフォルトで無効です。通常の開発では、有効にすることをおすすめします。
将应用了沙箱限制的状态称为“沙箱内”,将不受该限制而执行命令的状态称为“沙箱外”。

2-2. 工作文件夹与受保护文件
“工作文件夹”是 Claude Code 进行操作的目标文件夹。在沙箱中,除了工作文件夹之外,临时文件夹等也可写入。
如果在 Claude Code 的 GUI 版中选择 my-app 文件夹,则 my-app 将成为工作文件夹。
启用沙箱后,原则上允许对工作文件夹内的内容进行写入。但是,即使在工作文件夹内,部分文件和文件夹的写入也会受到限制。
主要的保护对象如下所示。
・.claude/内的配置文件:Claude Code的配置及代理相关文件
・.git/config・.git/hooks/:Git配置及钩子
・.mcp.json:MCP服务器配置
・.vscode/・.idea/:编辑器配置
在标准沙箱中,这些受保护对象禁止来自沙箱内命令的写入。
不过,并非所有以点开头的隐藏文件都会受到保护。例如,.env和.gitignore等会像普通文件一样被处理。
2-3. 权限(Permissions)是什么
“权限(Permissions)”是管理Claude Code所执行操作的允许、确认与禁止的机制。
沙箱主要限制Shell命令,而权限则涵盖对Read、Edit、Write等内置文件操作以及Shell命令等各类工具操作。
主要有三种规则。
・allow:允许操作
・ask:操作前向用户确认
・deny:禁止操作
Permissions 可以在 `~/.claude/settings.json` 等位置进行设置。
{
"permissions": {
"allow": [
"Bash(npm test)",
"Read(./src/**)"
],
"ask": [
"Bash(git push *)"
],
"deny": [
"Read(./.env)",
"Bash(rm -rf *)"
]
}
}在此示例中,允许运行测试和读取 src 目录中的文件,对 git push 进行确认,并禁止读取 .env 文件和执行指定的删除命令。
当结合使用 Sandbox 和 Permissions 时,两者限制均会生效。不过,在 Sandbox 内执行的 shell 命令可根据配置省略 Permissions 的授权确认。
在日常开发中,无需从一开始就细致地配置 Permissions。
2-4. 常见的误解
误解1:在沙箱中无法执行命令
在沙箱中也可以执行命令。
例如,启用沙箱后,可以编辑工作文件夹中的文件并运行测试。但是,如果尝试进行被禁止的文件操作或通信,则会受到限制。
也就是说,沙箱内并非“禁止执行”,而是“在受限状态下执行”。
误解2:沙箱内指的是工作文件夹内部
沙箱内外表示的是否对命令应用了沙箱限制,而不是文件夹的位置。
例如,即使是对工作文件夹外部文件的操作,如果在沙箱内执行,写入也会受到限制。
误解3:无法访问工作文件夹之外的文件
在标准沙箱中,原则上禁止写入工作文件夹之外,但广泛允许读取。
因此,可能会访问其他项目的源代码或操作系统权限下可读取的机密文件。
仅选择工作文件夹并不能限制可读范围。
3. 信任 - 启用项目特定设置
3-1. 什么是信任
启动 Claude Code 时,系统有时会询问是否将工作文件夹“信任”(Trust)。
Trust是一种机制,用于决定是否启用Claude Code中那些扩大操作权限的项目特定设置等。
Claude Code的设置主要在以下三个地方进行管理。
· 用户通用设置:~/.claude/settings.json
· 项目通用设置:项目/.claude/settings.json
· 项目个人设置:项目/.claude/settings.local.json
根据信任状态的不同,区别如下。
· Trusted(已信任):启用项目特定的操作许可规则等
· Untrusted(未信任):不应用部分设置,如项目特定的操作许可规则等
项目特定的设置包括操作许可规则和额外的工作文件夹等。此外,即使未进行Trust,也有一些设置会被应用。
3-2. 常见的误解
误解1:Trust后,就能读写该文件夹
Trust本身不会授予文件读写权限。
实际的访问范围由沙盒、操作批准规则、操作系统权限等决定。
也就是说,“信任文件夹”和“允许访问文件夹”是不同的操作。
误解2:Trust后,沙盒限制会被解除
仅进行Trust并不会解除沙盒的限制。
但是,如果项目特定配置中包含以下指定,则需要注意。
{
"permissions": {
"allow": [
"Bash(npm run *)"
]
}
}启用这些设置后,指定的命令可能会在无需额外批准的情况下执行。但这并不会解除沙箱本身的限制。
也就是说,Trust 机制意味着接受项目所配置的安全设置。
误解三:如果不信任,就能安全运行
即使不信任,Claude Code 也并非无法访问所有文件。
Trust 主要用于决定是否启用特定于项目的操作许可规则等,而对文件的访问则受沙箱、操作审批规则以及操作系统权限等的限制。
此外,部分 Hooks 等在 Trust 之前也可能生效,因此对于从外部获取的项目需要格外注意。
4. 审批 - 批准执行操作
4-1. 什么是批准(Approval)
在 Claude Code 中,对于文件编辑或命令执行等操作,可能会要求用户进行“批准”(Approval)。
例如以下操作:
・文件操作:源代码的编辑或删除
・网络通信:访问外部网站
・命令执行:运行程序或测试
・命令规则:执行需要事前确认的命令
用户批准后,即可在已授权的范围内执行操作。
这是一种被称为“人在回路”(Human in the Loop)的安全设计,由人类对关键操作进行确认。
在Claude Code的GUI版本中,可以从以下模式中选择批准方式。
・Manual:在执行文件编辑或必要命令前进行确认
・Accept edits:自动批准文件编辑等操作,其他命令执行时视情况确认
・Plan:进行调查和规划,不编辑源代码
・Auto:AI自动审查操作的风险
・Bypass permissions:原则上省略批准确认
在常规开发中,Manual或Accept edits是基本选项。
4-2. Auto mode - AI自动批准
Claude Code还提供一种“Auto mode”(自动模式),由AI代替用户审查操作内容。
在常规的Approval中,由用户确认操作;而在Auto mode中,由另一套AI进行安全性判定处理,评估操作内容和风险,并判断是否可执行。
主要特点如下:
・自动审查:由AI评估操作内容
・风险评估:确认危险命令或信息泄露等风险
・执行与否的判断:根据风险和用户指示判断是否执行操作
在Claude Code的GUI版本中,可以从输入框的批准模式中选择“自动”。
・自动 : 由Claude处理权限决策
・手动 : 每次更改前均需确认
・接受编辑 : 自动批准所有文件编辑
・计划 : 在做出更改前制定计划
・绕过权限 : 在Claude Code设置中启用
自动模式并非解除沙箱限制的功能,而是将通常由用户执行的批准判断部分委托给AI的机制。
不过,由于AI的判断并不总是正确的,因此在处理重要文件或认证信息的系统中使用时需谨慎。
4-3. 常见的误解
误解1:获得Approval后,沙箱的限制会被完全解除
Approval通常是对所请求操作的批准。
例如,即使批准了在沙箱外执行命令,也不会导致所有命令永久在沙箱外执行。
此外,根据操作系统或管理员策略,即使获得批准也可能无法执行。
误解2:在沙箱内允许的操作无需批准即可执行
即使在沙箱内被允许的操作,也可能因批准模式或命令规则等原因而需要批准。
也就是说,沙箱限制与Approval的判断并非一定是一一对应的关系。
5. Sandbox、Trust与Approval的关系
介绍结合这三种机制的具体示例。
在Claude Code中选择my-app作为工作文件夹,并按以下条件运行时的情形。
作業フォルダ:my-app
Sandbox:enabled
Trust:Trusted
Approval Mode:Manual
ネットワーク通信:禁止在这种情况下,操作如下所示。
・编辑 my-app 内的文件:原则上需要批准
・读取其他文件夹的文件:在可访问的情况下可能允许
・向其他文件夹写入:Sandbox 内的命令原则上禁止
・外部网络通信:Sandbox 内的命令禁止
・在 Sandbox 外执行命令:满足批准等条件时可执行
重要的是,并非因为信任了就能读写,而是由 Sandbox 或批准规则决定访问范围。
此外,Sandbox 内不允许的部分操作,可以通过 Approval 例外地执行。
实际的操作是否可行,还取决于操作系统权限、命令规则、管理员策略等因素。
6. 安全使用的基本设置
在常规的 Claude Code 开发中,推荐以下设置。
・沙盒(Sandbox):已启用
・批准模式(Approval Mode):手动或接受编辑
沙盒默认处于禁用状态,因此需要启用它。
Claude Code 的 GUI 版本允许从输入栏中选择批准模式。此外,可以通过以下配置文件启用沙盒:
・~/.claude/settings.json
{
"sandbox": {
"enabled": true
}
}这样可以限制命令的操作范围,并对需要的操作请求用户批准。如果希望在沙盒内无需批准即可执行命令,还可以设置 autoAllowBashIfSandboxed。
此外,根据需要还可以使用详细的安全设置。
・权限规则:允许操作、要求批准、禁止
・沙箱设置:对文件读写和网络等的限制
・网络限制:对通信目标域名的限制
在常规开发中,无需一开始就进行如此细致的配置。建议先理解沙箱(Sandbox)、信任(Trust)和审批(Approval),并在需要时再添加相关设置。
特别是对于从外部获取的项目并授予信任时,重要的是检查 .claude/settings.json 等文件中是否包含危险配置。
来源:npaka · AI与游戏开发技术 · note.com