权限系统
Claude Code 使用分层权限系统来平衡功能和安全性:管理权限
您可以使用/permissions 查看和管理 Claude Code 的工具权限。此 UI 列出所有权限规则及其来源的 settings.json 文件。
- Allow 规则让 Claude Code 使用指定的工具而无需手动批准。
- Ask 规则在 Claude Code 尝试使用指定工具时提示确认。
- Deny 规则防止 Claude Code 使用指定的工具。
权限模式
Claude Code 支持多种权限模式来控制工具的批准方式。在您的设置文件中设置defaultMode:
权限规则语法
权限规则遵循格式Tool 或 Tool(specifier)。
匹配工具的所有使用
要匹配工具的所有使用,请使用不带括号的工具名称:Bash(*) 等同于 Bash 并匹配所有 Bash 命令。
使用说明符进行细粒度控制
在括号中添加说明符以匹配特定的工具使用:通配符模式
Bash 规则支持带有* 的 glob 模式。通配符可以出现在命令中的任何位置。此配置允许 npm 和 git commit 命令,同时阻止 git push:
* 前的空格很重要:Bash(ls *) 匹配 ls -la 但不匹配 lsof,而 Bash(ls*) 匹配两者。旧版 :* 后缀语法等同于 * 但已弃用。
工具特定的权限规则
Bash
Bash 权限规则支持带有* 的通配符匹配。通配符可以出现在命令中的任何位置,包括开头、中间或结尾:
Bash(npm run build)匹配确切的 Bash 命令npm run buildBash(npm run test *)匹配以npm run test开头的 Bash 命令Bash(npm *)匹配任何以npm开头的命令Bash(* install)匹配任何以install结尾的命令Bash(git * main)匹配命令,如git checkout main、git merge main
* 出现在末尾且前面有空格时(如 Bash(ls *)),它强制执行单词边界,要求前缀后跟空格或字符串结尾。例如,Bash(ls *) 匹配 ls -la 但不匹配 lsof。相比之下,Bash(ls*) 没有空格匹配 ls -la 和 lsof 都因为没有单词边界约束。
Read 和 Edit
Edit 规则适用于所有编辑文件的内置工具。Claude 尽力尝试将 Read 规则应用于所有读取文件的内置工具,如 Grep 和 Glob。
Read 和 Edit 规则都遵循 gitignore 规范,具有四种不同的模式类型:
示例:
Edit(/docs/**):编辑<project>/docs/中的文件(不是/docs/)Read(~/.zshrc):读取您主目录的.zshrcEdit(//tmp/scratch.txt):编辑绝对路径/tmp/scratch.txtRead(src/**):从<current-directory>/src/读取
在 gitignore 模式中,
* 匹配单个目录中的文件,而 ** 递归匹配目录。要允许所有文件访问,请使用不带括号的工具名称:Read、Edit 或 Write。WebFetch
WebFetch(domain:example.com)匹配对 example.com 的获取请求
MCP
mcp__puppeteer匹配由puppeteer服务器提供的任何工具(在 Claude Code 中配置的名称)mcp__puppeteer__*通配符语法,也匹配来自puppeteer服务器的所有工具mcp__puppeteer__puppeteer_navigate匹配由puppeteer服务器提供的puppeteer_navigate工具
Task(subagents)
使用Task(AgentName) 规则来控制 Claude 可以使用哪些 subagents:
Task(Explore)匹配 Explore subagentTask(Plan)匹配 Plan subagentTask(my-custom-agent)匹配名为my-custom-agent的自定义 subagent
deny 数组或使用 --disallowedTools CLI 标志来禁用特定代理。要禁用 Explore 代理:
使用 hooks 扩展权限
Claude Code hooks 提供了一种方法来注册自定义 shell 命令以在运行时执行权限评估。当 Claude Code 进行工具调用时,PreToolUse hooks 在权限系统之前运行,hook 输出可以确定是否批准或拒绝工具调用来代替权限系统。工作目录
默认情况下,Claude 可以访问启动它的目录中的文件。您可以扩展此访问:- 启动期间:使用
--add-dir <path>CLI 参数 - 会话期间:使用
/add-dir命令 - 持久配置:添加到设置文件中的
additionalDirectories
权限如何与沙箱交互
权限和沙箱是互补的安全层:- 权限控制 Claude Code 可以使用哪些工具以及可以访问哪些文件或域。它们适用于所有工具(Bash、Read、Edit、WebFetch、MCP 和其他)。
- 沙箱提供操作系统级别的强制执行,限制 Bash 工具的文件系统和网络访问。它仅适用于 Bash 命令及其子进程。
- 权限 deny 规则阻止 Claude 甚至尝试访问受限资源
- 沙箱限制防止 Bash 命令到达定义边界之外的资源,即使提示注入绕过 Claude 的决策制定
- 沙箱中的文件系统限制使用 Read 和 Edit deny 规则,而不是单独的沙箱配置
- 网络限制结合 WebFetch 权限规则与沙箱的
allowedDomains列表
托管设置
对于需要对 Claude Code 配置进行集中控制的组织,管理员可以将managed-settings.json 文件部署到系统目录。这些策略文件遵循与常规设置文件相同的格式,不能被用户或项目设置覆盖。
托管设置文件位置:
- macOS:
/Library/Application Support/ClaudeCode/managed-settings.json - Linux 和 WSL:
/etc/claude-code/managed-settings.json - Windows:
C:\Program Files\ClaudeCode\managed-settings.json
这些是系统范围的路径(不是用户主目录,如
~/Library/...),需要管理员权限。它们设计用于由 IT 管理员部署。仅托管设置
某些设置仅在托管设置中有效:设置优先级
权限规则遵循与所有其他 Claude Code 设置相同的设置优先级:托管设置具有最高优先级,其次是命令行参数、本地项目、共享项目和用户设置。 如果权限在用户设置中被允许但在项目设置中被拒绝,项目设置优先,权限被阻止。示例配置
此存储库包括常见部署场景的启动设置配置。使用这些作为起点并根据您的需要调整它们。另请参阅
- Settings:完整的配置参考,包括权限设置表
- Sandboxing:Bash 命令的操作系统级文件系统和网络隔离
- Authentication:设置用户对 Claude Code 的访问
- Security:安全保障和最佳实践
- Hooks:自动化工作流并扩展权限评估