共计 3204 个字符,预计需要花费 9 分钟才能阅读完成。
文章目录[显示]
Claude Code 从入门到脱发 · Day 4
Claude Code 能读文件、写文件、跑命令、删东西。这种能力用好了是生产力工具,用不好就是定时炸弹。
想象一下:你随口说 " 帮我清理一下项目 ",它理解成了 rm -rf /。虽然这种极端情况不太可能发生(Claude Code 有内置保护),但类似的翻车场景你迟早会遇到——比如它把你还没提交的代码覆盖了,或者直接往生产环境推了一个 commit。
所以,权限管理不是可选项,是必修课。
本文你将学到:
- Claude Code 的四种权限模式
- allowedTools 精细化权限控制
- settings.json 配置详解
- 不同场景下的权限策略
阅读时间 :8 分钟 | 实操时间 :10 分钟 | 难度:中级
四种权限模式
Claude Code 启动时,你可以选择权限模式。每种模式决定了 AI 可以自主执行的操作范围。
1. 标准模式(默认)
每次 Claude Code 要执行 " 危险操作 " 时,都会问你。
危险操作包括:写文件、执行 shell 命令、删除文件等。读文件和搜索文件不算危险操作,可以自动执行。
这是最安全的模式,适合刚上手或者操作敏感项目时使用。缺点是确认太多,干活会被频繁打断。
2. acceptEdits 模式
自动批准文件编辑,但 shell 命令仍需确认。
这是大多数日常开发的甜蜜点。让 Claude Code 自由改文件(反正有 Git 可以回滚),但跑命令前还是问一下——毕竟 rm -rf 可没有后悔药。
3. plan 模式
Claude Code 只规划不执行。它会告诉你打算做什么,但不会真正动手。适合审查方案或者让它出设计文档。
4. bypassPermissions 模式
所有操作自动批准,不问你任何问题。也叫 "YOLO 模式 "。
启用方式:
claude --dangerously-skip-permissions
注意那个 dangerously——Anthropic 故意把这个词放在命令里提醒你:这很危险。
这个模式只适合在隔离环境中使用,比如 Docker 容器、CI/CD 流水线、一次性的沙盒环境。在你的开发机上用这个模式,就像开着眼睛在高速公路上松开方向盘。
allowedTools:精细化控制
四种模式是粗粒度的,有时候你需要更精细的控制。比如你希望 Claude Code 可以自由编辑文件和运行 npm test,但不能执行其他 shell 命令。
这就是 allowedTools 的用途。
在 .claude/settings.json 中配置:
{
"permissions": {
"allowedTools": [
"Read",
"Write",
"Edit",
"Glob",
"Grep",
"Bash(npm test)",
"Bash(npm run lint)",
"Bash(git status)",
"Bash(git diff)"
]
}
}
这份配置的意思是:Claude Code 可以自由读写文件、搜索文件、运行测试和 lint,但其他任何命令都需要你确认。
常用的 allowedTools 配置
保守型(适合生产项目):
{
"permissions": {
"allowedTools": [
"Read",
"Glob",
"Grep"
]
}
}
只允许读,所有写操作和命令都要确认。
日常开发型(适合大多数场景):
{
"permissions": {
"allowedTools": [
"Read",
"Write",
"Edit",
"Glob",
"Grep",
"Bash(npm test)",
"Bash(npm run lint)",
"Bash(npx tsc --noEmit)",
"Bash(git status)",
"Bash(git diff)",
"Bash(git log)"
]
}
}
读写文件自由,允许跑测试和 lint,Git 只允许查看操作。
自动化型(适合 CI/CD 或沙盒环境):
{
"permissions": {"allowedTools": ["*"]
}
}
允许一切。前面说了,只在隔离环境用。
settings.json 在哪里
Claude Code 的配置文件有三个层级:
| 位置 | 作用域 | 适合放什么 |
|---|---|---|
~/.claude/settings.json |
全局 | 个人偏好、通用权限 |
.claude/settings.json |
项目级(提交到 Git) | 团队统一规范 |
.claude/settings.local.json |
项目级(不提交) | 个人在此项目的特殊配置 |
项目级配置覆盖全局配置,.local.json 覆盖 .json。
一个完整的项目级 .claude/settings.json 长这样:
{
"permissions": {
"allowedTools": [
"Read",
"Write",
"Edit",
"Glob",
"Grep",
"Bash(npm test)",
"Bash(npm run lint)"
],
"disallowedTools": ["Bash(rm -rf *)",
"Bash(git push --force)"
]
}
}
disallowedTools 是黑名单,明确禁止某些操作。即使在 bypassPermissions 模式下,黑名单里的操作也会被阻止。
实际场景的权限策略
场景一:个人业余项目
你一个人玩,代码在 Git 里,随时可以回滚。
策略:acceptEdits 模式 + 允许常用命令。
{
"permissions": {
"allowedTools": [
"Read", "Write", "Edit", "Glob", "Grep",
"Bash(npm *)", "Bash(git status)", "Bash(git diff)", "Bash(git log)"
]
}
}
场景二:公司项目
多人协作,有 CI/CD 流水线,主分支受保护。
策略:标准模式 + 白名单。
{
"permissions": {
"allowedTools": [
"Read", "Glob", "Grep",
"Bash(npm test)", "Bash(npm run lint)"
],
"disallowedTools": ["Bash(git push *)",
"Bash(git commit *)"
]
}
}
改文件和 Git 操作都需要确认。
场景三:CI/CD 自动化
在 Docker 容器里跑自动化任务。
策略:bypassPermissions + 超时限制。
claude --dangerously-skip-permissions -p "运行测试并生成报告" --max-turns 20
常见问题 Q&A
Q1:设置了权限但 Claude Code 好像没生效?
检查配置文件的位置和语法是否正确。用 claude config list 命令查看当前生效的配置。另外,修改配置后需要重新启动 Claude Code。
Q2:怎么防止它执行危险的 Git 操作?
在 disallowedTools 里加入:
"disallowedTools": ["Bash(git push --force*)",
"Bash(git reset --hard*)",
"Bash(git clean -f*)"
]
这些操作即使在 YOLO 模式也会被拦截。
Q3:allowedTools 里的通配符怎么用?
Bash(npm *) 表示允许所有以 npm 开头的命令。Bash(git log*) 允许 git log 及其所有变体。但要注意:通配符越宽松,风险越大。
小结
今天学了 Claude Code 的权限管理:
- 四种模式:标准 > acceptEdits > plan > bypassPermissions,风险递增
- allowedTools/disallowedTools 提供精细化的工具级权限控制
- 配置文件有全局 / 项目 / 本地三个层级
- 不同场景用不同策略,在效率和安全之间找平衡
权限管理是 " 被动防守 "——你设好规则,Claude Code 遵守。但有没有更主动的方式?比如每次它编辑完文件自动跑 Prettier 格式化,每次提交前自动检查有没有 console.log?
明天 Day 5,我们聊 Hooks 系统——给 Claude Code 装上自动挡,让它在你的规则里全自动运转。
系列进度:4/10