Claude Code 的权限系统让你精确控制 AI 可以执行哪些操作——从完全自动到严格审批,从全局策略到按工具精细配置。
权限层级
三类工具的默认审批规则:
| 工具类型 | 示例 | 默认需要审批 | "不再询问" 行为 |
|---|---|---|---|
| 只读操作 | 读文件、Grep | 否 | N/A |
| Bash 命令 | Shell 执行 | 是 | 按项目目录 + 命令永久记住 |
| 文件修改 | Edit/Write 文件 | 是 | 本次会话结束前记住 |
三种规则类型
用 /permissions 命令查看和管理权限规则:
- Allow:无需手动审批直接执行
- Ask:每次使用时提示确认
- Deny:完全阻止该工具
规则优先级:deny → ask → allow,第一条匹配的规则生效,deny 始终最优先。
五种权限模式
在 settings.json 中设置 defaultMode:
| 模式 | 说明 |
|---|---|
default | 标准模式:首次使用每种工具时提示 |
acceptEdits | 本次会话自动接受所有文件编辑权限 |
plan | Plan 模式:只能分析,不能修改文件或执行命令 |
dontAsk | 自动拒绝所有未通过 /permissions 或 allow 规则预批准的工具 |
bypassPermissions | 跳过所有权限提示(仅限容器/VM 等隔离环境) |
⚠️
bypassPermissions会禁用所有权限检查,仅在 Claude Code 无法造成损害的隔离环境中使用。企业管理员可通过disableBypassPermissionsMode: "disable"在 Managed 设置中永久禁用此模式。
权限规则语法
基础格式
工具名 // 匹配该工具的所有用法
工具名(限定符) // 精细匹配
匹配所有用法
| 规则 | 效果 |
|---|---|
Bash | 匹配所有 Bash 命令 |
WebFetch | 匹配所有 web 请求 |
Read | 匹配所有文件读取 |
Bash(*) 等同于 Bash。
精细匹配(带限定符)
| 规则 | 效果 |
|---|---|
Bash(npm run build) | 精确匹配 npm run build 命令 |
Read(./.env) | 精确匹配读取 .env 文件 |
WebFetch(domain:example.com) | 匹配对 example.com 的请求 |
通配符模式
* 可出现在命令任意位置:
{
"permissions": {
"allow": [
"Bash(npm run *)",
"Bash(git commit *)",
"Bash(git * main)",
"Bash(* --version)",
"Bash(* --help *)"
],
"deny": [
"Bash(git push *)"
]
}
}关键细节:* 前的空格很重要
Bash(ls *)— 匹配ls -la,不匹配lsof(有空格,有词边界)Bash(ls*)— 同时匹配ls -la和lsof(无空格,无词边界)
Claude Code 能识别 Shell 操作符(如 &&),所以 Bash(safe-cmd *) 不会给 safe-cmd && other-cmd 权限。
各工具权限规则
Read / Edit
"Read(~/.zshrc)" // 允许读取特定文件
"Read(./.env)" // 拒绝读取 .env
"Read(./secrets/**)" // 拒绝读取 secrets 目录
"Edit(./src/**)" // 限制编辑范围到 src/WebFetch
"WebFetch(domain:github.com)" // 只允许访问 github.com
"WebFetch(domain:*.internal)" // 只允许内网域名⚠️ WebFetch 只限制
web_fetch工具,不限制 Bash 中的curl/wget。如需彻底限制网络访问,同时 deny Bash 网络工具。
MCP 工具
"mcp__my-server__tool-name" // 允许特定 MCP 工具
"mcp__my-server__*" // 允许某个 MCP 服务器的所有工具Agent(子代理)
"Agent" // 允许启动任意子代理
"Agent(explore)" // 只允许启动 explore 子代理实用配置示例
安全的 CI 环境(只允许测试相关命令)
{
"permissions": {
"allow": [
"Bash(npm run lint)",
"Bash(npm run test *)",
"Bash(git status)",
"Bash(git diff *)"
],
"deny": [
"Bash(rm *)",
"Bash(git push *)",
"Bash(curl *)",
"Bash(wget *)"
]
}
}保护敏感文件
{
"permissions": {
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)",
"Edit(./.env)",
"Edit(./secrets/**)"
]
}
}Managed 设置(企业专属)
通过 Managed 作用域部署的权限无法被用户或项目设置覆盖:
{
"disableBypassPermissionsMode": "disable",
"permissions": {
"deny": ["Bash(rm -rf *)"]
}
}原文:Configure permissions - Claude Code Docs | 来源:Anthropic 官方文档