2.4 权限系统
预计耗时:12 分钟
本关任务简报
你有没有想过:Claude Code 能读你的文件、执行 shell 命令、甚至删除东西——这些操作是怎么被控制的?为什么有时候它会停下来问你"是否允许执行这个操作"?
这就是权限系统在起作用。理解它,你就知道为什么 Claude 有时候会弹出确认框、什么情况下可以让它自动放行、以及如何避免它在你不注意时做了你不想要的事。
通关奖励:解锁以下技能
- 🔐 理解权限系统的运转逻辑
- 🔄 掌握三种权限模式的区别,能根据场景主动切换
- ⚙️ 能在配置文件里设置精细的允许/拒绝规则
- ⚠️ 了解高危启动模式及其适用边界
开始前先检查装备
| 前置知识 | 说明 |
|---|---|
| 2.3 斜杠命令指南 → | Shift+Tab 切换权限模式是一个快捷键操作,知道斜杠命令的基本交互有助于理解权限弹窗 |
机制解析
工具调用为什么需要确认
Claude Code 能调用很多工具:读文件、写文件、执行命令、抓取网页……其中有些是安全的(读文件),有些是不可逆的(删文件、执行 rm -rf)。
权限系统的核心逻辑是:对可能产生副作用的操作,在执行前暂停,让你确认。
这既是保护你的文件不被误操作,也是让你随时知道 Claude 正在做什么。
会话内的权限模式
在 Claude Code 对话中,按 Shift+Tab 循环切换权限模式:
默认模式(无标记)
只有"读取"类操作(读文件、搜索)自动放行;会改动的操作——写文件、执行 shell 命令、联网——发起前都暂停等你确认。最保险,不知道该用什么就用这个。
⏵⏵ accept edits on(自动接受文件编辑)
文件读写操作自动放行,不再弹确认。Shell 命令(Bash 工具)仍然需要手动确认。
适合场景:你已经看过 Claude 的计划,确认它不会乱改东西,想减少反复确认的打断。
⏸ plan mode on(仅规划不执行)
Claude 只输出它打算怎么做,不实际执行任何工具。看完方案后,切回默认模式再执行。
适合场景:让 Claude 先出方案,你审核通过后再动手。处理重要或复杂任务时的标准做法。
⏵⏵ auto mode on(自动放行 + 后台把关)
由一个独立的分类器模型在每步操作前审查:安全的操作(读文件、工作目录内编辑、装依赖等)自动放行,危险的(往生产部署、curl | bash、强推 main、删库等)直接拦下。比 accept edits 更省心,又不像完全放行那样裸奔。
适合场景:你信任任务大方向、想让 Claude 长时间少打断地连续干活。
⚠️ auto 模式有门槛
auto 是较新的模式(研究预览),需要账号满足条件才会出现在 Shift+Tab 循环里(接在 plan 之后):要求较新的模型(如 Opus 4.6+ / Sonnet 4.6),团队 / 企业版还需管理员先开启。很多第三方中转平台暂不支持,可能根本看不到这个模式。它能减少弹窗但不等于绝对安全,敏感操作仍建议自己把关。
高危启动模式(启动时才能用)
除了上面三种可以随时切换的模式,还有一种需要在启动时加参数才能开启的模式:
claude --dangerously-skip-permissions这个模式会跳过所有权限检查,Claude 全程不打断地干活,体验很丝滑——很多人(包括日常重度使用者)就常开它。代价是它不再帮你拦任何操作。
用在你信任 Claude 全权接管的工作区
开它的前提很简单:在一个你愿意让 Claude 放手去做的工作区里用。 最稳妥的几种环境——有 Git 兜底的项目(随时能 git checkout 还原)、Docker 容器、或 3.15 沙箱模式 隔离的环境。在这些地方它很好用、很省心;只是别在放着重要文件、又没有任何回滚手段的目录里裸跑。
想要"少打断"又保留一道安全底线,比起全部放行,更推荐 3.15 沙箱模式——用系统级围栏圈住 Claude 能碰的文件和网络。
可以和会话参数组合:
claude --dangerously-skip-permissions --continue
claude --dangerously-skip-permissions --resume2
精细权限规则:在配置文件里设白名单和黑名单
除了切换模式,你还可以在 settings.json 里针对具体工具配置允许/拒绝规则,让某些常用操作永远自动放行:
文件位置:
- 全局:
~/.claude/settings.json - 项目级:
.claude/settings.json(仅对当前项目生效)
配置格式:
{
"permissions": {
"allow": [
"Bash(git *)",
"Bash(npm run *)",
"Bash(npm test)",
"Read",
"Edit"
],
"deny": [
"Bash(rm -rf *)",
"Bash(sudo *)"
]
}
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
常用工具名和匹配写法:
| 写法 | 含义 |
|---|---|
Read | 所有文件读取(通常安全,可以放进 allow) |
Edit | 文件编辑 |
Write | 新建文件 |
Bash(git *) | 只允许 git 开头的命令 |
Bash(npm run *) | 只允许 npm run 开头的命令 |
Bash(rm -rf *) | 匹配并拒绝危险删除命令 |
WebFetch | 抓取网页 |
优先级规则:deny 优先于 allow,allow 优先于弹窗询问。
临时指定(启动时,本次会话有效)
如果想在这次启动里临时允许或禁止某些操作,不修改配置文件的方式:
# 允许 git 和 npm run 操作,不需要确认
claude --allowedTools "Bash(git *)" "Bash(npm run *)" "Read" "Edit"
# 禁止执行任何 Bash 命令
claude --disallowedTools "Bash"2
3
4
5
开始闯关
目标:体验三种模式的差异,然后为你的项目配置一条 allow 规则。
第 1 步:切换到 plan 模式观察行为
按 Shift+Tab 切换到 ⏸ plan mode on,然后让 Claude 做一件需要修改文件的事:
在当前目录创建一个 hello.txt,内容写"Hello World"观察:Claude 应该告诉你它打算怎么做,但不会真的创建文件。
第 2 步:切回默认模式让它执行
按 Shift+Tab 切换回无标记的默认模式,让 Claude 重新做这件事,这次应该会弹出确认。
第 3 步:添加一条 allow 规则
在项目目录下创建 .claude/settings.json(如果已有就编辑),添加一条允许 git 命令的规则:
{
"permissions": {
"allow": [
"Bash(git *)",
"Read"
]
}
}2
3
4
5
6
7
8
保存后重启 Claude Code,让它执行一次 git status,确认不再弹出确认框。
通关检定
- [ ] 知道
Shift+Tab几种模式(默认 / accept edits / plan,以及条件满足时的 auto)的区别和适用场景 - [ ] 用 plan 模式让 Claude 先出方案,再切回默认执行
- [ ] 知道
--dangerously-skip-permissions是什么,以及为什么不能随便用 - [ ] 在
settings.json里写了至少一条 allow 规则 - [ ] 知道
deny和allow的优先级关系
全部点亮就算通关 ✓
卡关了?翻车指南在这
settings.json 里加了 allow 规则,但仍然弹确认
踩坑清单:① JSON 格式是否正确(多余的逗号、引号不匹配会导致整个文件无效);② 工具名大小写必须正确(Read 不是 read,Bash 不是 bash);③ 需要重启 Claude Code 才能加载新配置。
弄不清楚某个操作用的是哪个工具名
在默认模式下让 Claude 执行一次操作,在弹出确认框时仔细看工具名称(比如 Bash(npm test)),然后把这个名称用到 allow 规则里。
--dangerously-skip-permissions 启动后出了问题
这个模式不会保护你的文件。如果用了它却出了问题,先检查 git 历史(git log --oneline),看文件有没有在 git 追踪范围内,如果有可以 git checkout 还原。以后只在有 git 保护的项目里使用这个模式。
下一关
知道了 Claude 能做什么之后,这一关告诉你如何精准控制"Claude 能看到什么"——@ 和 ! 是向它主动提供上下文的核心工具。