Claude Code Docs 主页!图片 1:光徽标!图2:黑暗标志
⌘K问AI
克劳德开发者平台 网络上的克劳德代码
配置
配置权限
入门与 Claude 一起构建代码部署管理配置参考什么新资源
配置
使用细粒度的权限规则、模式和托管策略控制 Claude Code 可以访问和执行的操作。
Claude Code 支持细粒度的权限,以便您可以准确指定代理可以做什么和不能做什么。权限设置可以签入版本控制并分发给组织中的所有开发人员,也可以由各个开发人员进行自定义。
权限系统
Claude Code 使用分层权限系统来平衡权力和安全性:
| 工具类型 | 示例 | 需要批准 | “是的,不要再问”行为 |
|---|---|---|---|
| 只读 | 文件读取,Grep | 没有 | 不适用 |
| Bash 命令 | 外壳执行 | 是的 | 每个项目目录和命令永久 |
| 文件修改 | 编辑/写入文件 | 是的 | 直到会议结束 |
管理权限
您可以通过/permissions查看和管理Claude Code的工具权限。此 UI 列出了所有权限规则及其来源的 settings.json 文件。
允许规则允许 Claude Code 使用指定的工具,无需手动批准。
询问规则每当 Claude Code 尝试使用指定工具时都会提示确认。
拒绝 规则阻止 Claude Code 使用指定的工具。
规则按顺序评估:拒绝 -> 询问 -> 允许。第一个匹配的规则获胜,因此拒绝规则始终优先。
权限模式
Claude Code 支持多种控制工具批准方式的权限模式。有关何时使用每种权限模式,请参阅权限模式。在您的设置文件中设置“defaultMode”:
| 模式 | 描述 |
|---|---|
默认 | 标准行为:首次使用每个工具时提示许可 |
接受编辑 | 自动接受会话的文件编辑权限,但写入受保护的目录除外 |
计划 | 计划模式:克劳德可以分析但不能修改文件或执行命令 |
自动 | 自动批准工具调用,并进行后台安全检查,验证操作是否符合您的请求。目前是研究预览 |
别问 | 自动拒绝工具,除非通过“/permissions”或“permissions.allow”规则预先批准 |
绕过权限 | 跳过权限提示,写入受保护目录除外(请参阅下面的警告) |
bypassPermissions 模式会跳过权限提示。写入“.git”、“.claude”、“.vscode”、“.idea”和“.husky”目录仍会提示确认,以防止存储库状态、编辑器配置和 git hook 意外损坏。对“.claude/commands”、“.claude/agents”和“.claude/skills”的写入是豁免的并且不会提示,因为 Claude 在创建技能、子代理和命令时通常会在那里写入。仅在 Claude Code 无法造成损坏的隔离环境(例如容器或虚拟机)中使用此模式。管理员可以通过在托管设置中将“permissions.disableBypassPermissionsMode”设置为““禁用””来阻止此模式。
要防止使用“bypassPermissions”或“auto”模式,请在任何设置文件中将“permissions.disableBypassPermissionsMode”或“permissions.disableAutoMode”设置为““禁用””。这些在托管设置中最有用,因为它们不能被覆盖。
权限规则语法
权限规则遵循“Tool”或“Tool(specifier)”格式。
匹配工具的所有用途
要匹配工具的所有用途,请仅使用不带括号的工具名称:
| 规则 | 效果 |
|---|---|
重击 | 匹配所有 Bash 命令 |
WebFetch | 匹配所有网络获取请求 |
阅读 | 匹配所有文件读取 |
Bash(*) 等同于 Bash 并且匹配所有 Bash 命令。
使用说明符进行细粒度控制
在括号中添加说明符以匹配特定的工具用途:
| 规则 | 效果 |
|---|---|
Bash(npm 运行构建) | 匹配确切的命令 npm run build |
读取(./.env) | 匹配读取当前目录中的.env文件 |
WebFetch(域:example.com) | 匹配对 example.com 的获取请求 |
通配符模式
Bash 规则支持带有“*”的全局模式。通配符可以出现在命令中的任何位置。此配置允许 npm 和 git commit 命令,同时阻止 git Push:
“权限”:{ “允许”:[ ], “否认”:[ “重击(git推*)”
“”之前的空格很重要:“Bash(ls )”匹配“ls -la”,但不匹配“lsof”,而“Bash(ls)”则匹配两者。旧版“:”后缀语法与“*”等效,但已弃用。
工具特定的权限规则
重击
Bash 权限规则支持与“*”进行通配符匹配。通配符可以出现在命令中的任何位置,包括开头、中间或结尾:
Bash(npm run build) 与确切的 Bash 命令 npm run build 匹配
Bash(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”,因为没有字边界约束。
Claude Code 知道 shell 操作符(如 &&),因此像 Bash(safe-cmd *) 这样的前缀匹配规则不会授予它运行命令 safe-cmd && other-cmd 的权限。
当您使用“是,不再询问”批准复合命令时,Claude Code 会为每个需要批准的子命令保存单独的规则,而不是为完整复合字符串保存单个规则。例如,批准“git status && npm test”会保存“npm test”的规则,因此无论“&&”前面的内容是什么,将来的“npm test”调用都会被识别。像“cd”这样的子命令进入子目录会为该路径生成自己的读取规则。单个复合命令最多可以保存 5 条规则。
尝试限制命令参数的 Bash 权限模式很脆弱。例如,“Bash(curl http://github.com/ *)”旨在将curl限制为GitHub URL,但不会匹配以下变体:
URL 之前的选项:curl -X GET http://github.com/...
不同的协议:curl https://github.com/...
重定向:curl -L http://bit.ly/xyz(重定向到 github)
变量:URL=http://github.com && curl $URL
额外空格:curl http://github.com
为了获得更可靠的 URL 过滤,请考虑:
限制 Bash 网络工具:使用拒绝规则阻止 curl、wget 和类似命令,然后对允许的域使用具有 WebFetch(domain:github.com) 权限的 WebFetch 工具
使用 PreToolUse 挂钩:实现一个挂钩来验证 Bash 命令中的 URL 并阻止不允许的域
通过 CLAUDE.md 指导 Claude Code 关于允许的卷曲模式
请注意,单独使用 WebFetch 不会阻止网络访问。如果允许 Bash,Claude 仍然可以使用“curl”、“wget”或其他工具来访问任何 URL。
阅读和编辑
“编辑”规则适用于所有编辑文件的内置工具。 Claude 尽最大努力尝试将“读取”规则应用于所有读取 Grep 和 Glob 等文件的内置工具。
读取和编辑拒绝规则适用于 Claude 的内置文件工具,而不适用于 Bash 子进程。 “Read(./.env)”拒绝规则会阻止读取工具,但不会阻止 Bash 中的“cat .env”。对于阻止所有进程访问路径的操作系统级强制执行,启用沙箱。
读取和编辑规则都遵循 gitignore 规范,具有四种不同的模式类型:
| 图案 | 意义 | 示例 | 比赛 |
|---|---|---|---|
//路径 | 文件系统根目录的绝对路径 | 读取(//Users/alice/secrets/**) | /Users/alice/secrets/** |
~/路径 | home 目录的路径 | 阅读(~/Documents/*.pdf) | /Users/alice/Documents/*.pdf |
/路径 | 路径 相对于项目根目录 | 编辑(/src/**/*.ts) | <项目根目录>/src/**/*.ts |
path 或 ./path | 路径 相对于当前目录 | 读取(*.env) | <cwd>/*.env |
像“/Users/alice/file”这样的模式不是绝对路径。它是相对于项目根目录的。使用“//Users/alice/file”作为绝对路径。
在 Windows 上,路径在匹配之前会标准化为 POSIX 形式。 C:\Users\alice 变为 /c/Users/alice,因此使用 //c/**/.env 来匹配该驱动器上任何位置的 .env 文件。要匹配所有驱动器,请使用“//**/.env”。示例:
Edit(/docs/**):在 <project>/docs/ 中编辑(不是 /docs/ 也不是 <project>/.claude/docs/)
Read(~/.zshrc): 读取主目录的 .zshrc
Edit(//tmp/scratch.txt): 编辑绝对路径/tmp/scratch.txt
Read(src/**): 从 <current-directory>/src/ 读取
在 gitignore 模式中,“*”匹配单个目录中的文件,而“**”则跨目录递归匹配。要允许所有文件访问,请仅使用不带括号的工具名称:“Read”、“Edit”或“Write”。
网页抓取
WebFetch(domain:example.com) 匹配对 example.com 的获取请求
MCP
mcp__puppeteer 匹配 puppeteer 服务器提供的任何工具(在 Claude 代码中配置的名称)
mcp__puppeteer__* 通配符语法也匹配 puppeteer 服务器中的所有工具
mcp__puppeteer__puppeteer_navigate 与 puppeteer 服务器提供的 puppeteer_navigate 工具匹配
代理(子代理)
使用Agent(AgentName)规则来控制Claude可以使用哪些子代理:
Agent(Explore) 匹配 Explore 子代理
Agent(Plan) 匹配 Plan 子代理
Agent(my-custom-agent) 匹配名为 my-custom-agent 的自定义子代理
将这些规则添加到设置中的“deny”数组中,或使用“--disallowedTools”CLI 标志来禁用特定代理。要禁用探索代理:
“权限”:{ "deny": ["代理(探索)"]
使用钩子扩展权限
Claude Code hooks 提供了一种注册自定义 shell 命令以在运行时执行权限评估的方法。当 Claude Code 进行工具调用时,PreToolUse 挂钩会在权限提示之前运行。挂钩输出可以拒绝工具调用、强制提示或跳过提示让调用继续进行。跳过提示不会绕过权限规则。在钩子返回“允许”后,仍然会评估拒绝和询问规则,因此匹配的拒绝规则仍然会阻止调用。这保留了管理权限中描述的拒绝优先优先级,包括托管设置中设置的拒绝规则。阻止挂钩也优先于允许规则。以代码 2 退出的挂钩会在评估权限规则之前停止工具调用,因此即使允许规则允许调用继续进行,该块也会应用。要在没有提示的情况下运行所有 Bash 命令(除了一些您想要阻止的命令之外),请将“Bash”添加到您的允许列表中,并注册一个拒绝这些特定命令的 PreToolUse 挂钩。 See Block edits to protected files 以获得您可以改编的钩子脚本。
工作目录
默认情况下,Claude 可以访问启动目录中的文件。您可以扩展此访问权限:
启动期间:使用 --add-dir <path> CLI 参数
在会话期间:使用 /add-dir 命令
持久配置:添加到[设置文件]中的additionalDirectories(http://code.claude.com/docs/en/settings#settings-files)
附加目录中的文件遵循与原始工作目录相同的权限规则:它们在没有提示的情况下变得可读,并且文件编辑权限遵循当前权限模式。
其他目录授予文件访问权限,而不是配置权限
添加目录扩展了 Claude 可以读取和编辑文件的位置。它不会使该目录成为完整的配置根目录:大多数“.claude/”配置不会从其他目录中发现,尽管少数类型会作为例外加载。以下配置类型是从“--add-dir”目录加载的:
| 配置 | 从 --add-dir 加载 |
|---|---|
.claude/skills/ 中的技能 | 是的,实时重新加载 |
.claude/settings.json 中的插件设置 | 仅限“enabledPlugins”和“extraKnownMarketplaces” |
CLAUDE.md 文件和 .claude/rules/ | 仅当设置“CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1”时 |
其他所有内容,包括子代理、命令、输出样式、挂钩和其他设置,只能从当前工作目录及其父目录、位于“~/.claude/”的用户目录以及托管设置中发现。要跨项目共享该配置,请使用以下方法之一:
用户级配置:将文件放置在 ~/.claude/agents/、~/.claude/output-styles/ 或 ~/.claude/settings.json 中,以使它们在每个项目中可用
插件:将配置打包并分发为团队可以安装的插件
从配置目录启动:从包含所需.claude/配置的目录运行Claude Code
权限如何与沙箱交互
权限和沙盒是互补的安全层: 权限 控制 Claude Code 可以使用哪些工具以及可以访问哪些文件或域。它们适用于所有工具(Bash、Read、Edit、WebFetch、MCP 等)。 沙盒 提供操作系统级别的强制执行,限制 Bash 工具的文件系统和网络访问。它仅适用于 Bash 命令及其子进程。
将两者用于纵深防御: 权限拒绝规则阻止 Claude 尝试访问受限资源 沙箱限制阻止 Bash 命令到达定义边界之外的资源,即使提示注入绕过了 Claude 的决策 沙箱中的文件系统限制使用读取和编辑拒绝规则,而不是单独的沙箱配置 网络限制将 WebFetch 权限规则与沙箱的“allowedDomains”列表相结合
当使用“autoAllowBashIfSandboxed: true”(默认设置)启用沙箱时,即使您的权限包括“ask: Bash(*)”,沙箱 Bash 命令也会在不提示的情况下运行。沙箱边界替代了每个命令提示符。请参阅沙盒模式 更改此行为。
托管设置
对于需要集中控制 Claude Code 配置的组织,管理员可以部署不能被用户或项目设置覆盖的托管设置。这些策略设置遵循与常规设置文件相同的格式,并且可以通过 MDM/OS 级策略、托管设置文件或服务器托管设置 进行传递。有关传送机制和文件位置,请参阅设置文件。
仅限托管设置
以下设置仅从托管设置中读取。将它们放在用户或项目设置文件中没有任何效果。
| 设置 | 描述 |
|---|---|
allowedChannelPlugins | 可能推送消息的通道插件白名单。 |