Claude Code 权限配置避坑指南:一文带你彻底攻略Claude Code权限配置

第一章. 权限系统深度解析

本章摘要:基础篇里,我们每次让 Claude 执行命令都要点 “确认”,烦不烦?但如果让它完全自主,又怕它 “删库跑路”。本章将彻底讲透 Claude Code 的权限系统,让你在 “安全” 和 “效率” 之间找到最佳平衡点。

本章学习路径

阶段内容解锁能力
第一阶段权限模式全景图理解五种权限模式的本质区别
第二阶段权限规则配置能够精细控制 Claude 对每个工具的访问权限
第三阶段实战配置为不同场景选择最合适的权限策略

1.1. 权限模式全景图

“为什么我每次让 Claude 改个文件,它都要问我一遍?”

这是新手最常见的抱怨。但换个角度想:如果 Claude 不问你就直接执行 rm -rf /,你怕不怕?

Claude Code 的权限系统就是为了解决这个矛盾——既要让 AI 足够自主以提高效率,又要保留人类的最终控制权以确保安全

版本重大更新提示:如果你之前听说过 “Permission Modes”(权限模式),请注意:Claude Code 在最新版本中进行了一次 底层逻辑重构。它从粗放的 “模式切换” 进化为了更精细的 “规则(Rules)管理”。

现在的权限系统不再是简单的 “开关”,而是一个 动态的白名单系统。它覆盖了从 “事事请示” 到 “完全放飞” 的所有场景。

1.1.1. 新版核心逻辑:Allow, Ask, Deny

当你输入 /permissions 时,你不再会看到几个固定的模式选项,而是会看到一个类似图中的 规则配置面板

image-20260107163117209

这个新系统的核心在于三个状态(按 Tab 键切换):

  1. Ask (默认):Claude 想执行任何新操作时,都会弹窗问你。
  2. Allow (信任):你 已经授权 的操作(也就是白名单)。在这个列表里的命令,Claude 会自动执行,不再废话。
  3. Deny (禁止):你明确禁止的操作,Claude 连问都不会问,直接跳过。

这和旧版有什么区别?

旧版就像手机的 “情景模式”(静音、户外、会议),一键切换全局状态。新版就像手机的 “应用权限管理”,你可以允许微信访问相册,但禁止它访问麦克风。颗粒度更细,安全性更高。

1.1.2. Default 状态:从 “模式” 到 “渐进式信任”

在旧教程中,我们称之为 default 模式。在新版中,这就是你的 初始状态

核心逻辑

  • 读取/搜索 → 自动执行(默认安全)。
  • 修改/执行 → 都在 Ask 列表中,需要你点击确认。

但新版有个巨大的改进:“记住我的选择”

当你允许 Claude 运行一次 npm test 后,它会变聪明。如果你选择了 “Always allow”(总是允许),这条规则就会被移动到 Allow 标签页下(就像截图里的 Bash(pnpm create:*))。

这意味着:你不需要手动切换到 “高效模式”,随着你使用的深入,Allow 列表越来越长,Claude 就会变得越来越顺手,自动进化为你的专属形态。

1.1.3. 模拟 acceptEdits:打造 “只动口不动手” 的 AI

很多老用户怀念旧版的 acceptEdits 模式(允许改代码,不允许跑命令)。在新版中,你可以通过配置规则完美复刻这个体验。

如何实现

  1. 当 Claude 请求修改文件(File Edit)时,选择 Always Allow
  2. 或者在 /permissions 的 Allow 列表中,添加文件修改相关的工具权限。
  3. 保持 Bash 命令在 Ask 或 Deny 状态。

这样,Claude 就可以疯狂写代码(因为有权限),但想运行命令时必须停下来问你。

适用场景

  • 大规模重构(让它自动改几十个文件)。
  • 你想专注于 Code Review,而不是由着它乱跑脚本。

1.1.4. bypassPermissions:上帝模式(危险但高效)

危险警告:这个模式会让 Claude 完全自主执行所有操作,包括删除文件、执行任意命令。除非你 100% 清楚自己在做什么,否则不要使用。

无论版本如何更新,这个 “核按钮” 依然保留。如果你想让 Claude 全自动干活,完全不因权限问题中断,你可以绕过整个规则系统。

启用方式

这个模式 不能/permissions 菜单里开启(那里是管规则的),必须在 启动时 显式指定参数:

1
claude --dangerously-skip-permissions

注意那个 dangerously(危险地)——官方特意用这个词来警告你。开启后,Allow/Ask/Deny 的规则将被全部无视,Claude 获得最高权限。

适用场景

  • 完全隔离的沙盒环境(如 Docker 容器)。
  • 无人值守的自动化脚本。

1.1.5. 本节小结

从 “模式” 到 “规则”,Claude Code 的权限管理变得更加理性。

旧版概念新版对应操作适用场景
default保持默认,遇到弹窗手动确认日常开发,安全第一
acceptEditsFileEdit 相关操作加入 Allow 列表大规模重构代码
planBash/Edit 相关操作加入 Deny 列表只读分析,严禁动手
bypass启动时加 --dangerously-skip-permissions沙盒/全自动运行

一句话总结:以前是你去适应 Claude 的模式,现在是通过 /permissions 让 Claude 适应你的规矩。

1.2. 权限规则配置

上一节讲的是 “模式”——一种粗粒度的控制方式。但实际工作中,你可能需要更精细的控制:

  • “我想让 Claude 自动运行 npm test,但其他命令还是要问我”
  • “我想禁止 Claude 读取 .env 文件,里面有密钥”
  • “我想让 Claude 可以修改 src/ 目录,但不能动 config/ 目录”

这就需要用到 权限规则配置

1.2.1. allow / deny / ask 三层控制机制

Claude Code 的权限规则分为三层:

  • allow:允许自动执行,不需要确认
  • deny:完全禁止,Claude 无法执行
  • ask:每次执行前询问用户确认

这三层的优先级是:deny > ask > allow。也就是说,如果一个操作同时匹配了 allowdeny 规则,deny 会生效。

配置位置

权限规则配置在 settings.json 文件中。根据作用范围不同,可以放在:

  • ~/.claude/settings.json —— 对所有项目生效
  • .claude/settings.local.json —— 只对当前项目生效

基本语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"permissions": {
"allow": [
"规则1",
"规则2"
],
"deny": [
"规则3"
],
"ask": [
"规则4"
]
}
}

1.2.2. 工具级权限精细化

“规则” 的格式是 工具名(参数模式)。Claude Code 有以下几种核心工具:

工具名作用示例规则
Read读取文件Read(./.env)
Edit修改文件Edit(src/**)
Write创建/覆盖文件Write(*.md)
Bash执行 Shell 命令Bash(npm test)
WebFetch访问网络WebFetch(https://api.example.com/*)

实战示例 1:允许自动运行测试命令

1
2
3
4
5
6
7
8
9
{
"permissions": {
"allow": [
"Bash(pnpm test)",
"Bash(pnpm run lint)",
"Bash(pnpm run build)"
]
}
}

配置后,Claude 运行这三个命令时不再需要你确认。

实战示例 2:禁止读取敏感文件

1
2
3
4
5
6
7
8
9
10
{
"permissions": {
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)",
"Read(~/.ssh/**)"
]
}
}

配置后,Claude 完全无法读取这些文件,即使你明确要求它也不行。

实战示例 3:允许修改源码,禁止修改配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"permissions": {
"allow": [
"Edit(src/**)",
"Write(src/**)"
],
"deny": [
"Edit(config/**)",
"Write(config/**)",
"Edit(*.config.js)",
"Write(*.config.js)"
]
}
}

1.2.3. Bash 命令的特殊处理

Bash 工具的权限规则有一些特殊之处,需要单独说明。

前缀匹配机制

Bash 规则使用 前缀匹配,而不是精确匹配。这意味着:

  • Bash(npm test) 会匹配 npm testnpm test --coveragenpm test src/
  • Bash(git) 会匹配所有以 git 开头的命令

通配符语法

  • Bash(npm run:*) —— 匹配所有 npm run 开头的命令
  • Bash(git log:*) —— 匹配所有 git log 开头的命令

安全警告

Bash 规则的前缀匹配机制存在绕过风险。例如,Bash(ls) 本意是允许列出文件,但也会匹配 ls; rm -rf /(命令注入)。对于安全敏感场景,建议使用更精确的规则或依赖 deny 列表。

推荐的安全配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"permissions": {
"allow": [
"Bash(npm test:*)",
"Bash(npm run lint:*)",
"Bash(git status:*)",
"Bash(git diff:*)",
"Bash(git log:*)"
],
"deny": [
"Bash(rm -rf:*)",
"Bash(curl:*)",
"Bash(wget:*)",
"Bash(sudo:*)"
]
}
}

1.2.4. 敏感文件保护策略

保护敏感文件是权限配置中最重要的部分。以下是一份推荐的 “敏感文件黑名单”:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"permissions": {
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(./.env.local)",
"Read(./.env.production)",
"Read(./secrets/**)",
"Read(./config/credentials.json)",
"Read(~/.ssh/**)",
"Read(~/.aws/**)",
"Read(~/.config/gcloud/**)",
"Edit(./.gitignore)",
"Edit(./package-lock.json)",
"Edit(./yarn.lock)",
"Write(./.git/**)"
]
}
}

为什么要保护这些文件?

文件/目录包含内容泄露风险
.envAPI 密钥、数据库密码账户被盗、数据泄露
~/.ssh/SSH 私钥服务器被入侵
~/.aws/AWS 凭证云资源被滥用
package-lock.json依赖锁定误修改导致构建失败

1.2.5. 本节小结

权限规则配置的核心是 精细化控制——让 Claude 在你信任的范围内自由行动,在敏感区域寸步难行。

配置项作用优先级
deny完全禁止最高
ask每次询问中等
allow自动执行最低

速查配置模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"permissions": {
"allow": [
"Bash(npm test:*)",
"Bash(npm run:*)",
"Bash(git status:*)",
"Bash(git diff:*)"
],
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)",
"Bash(rm -rf:*)",
"Bash(sudo:*)"
]
}
}