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