peUgnMD.png

 找回密码
 立即注册

QQ登录

只需一步,快速开始

peUfSYR.png
查看: 43|回复: 0

Day 4 权限管理:别让 AI 把你家拆了

[复制链接]

858

主题

13

回帖

2746

积分

管理员

积分
2746
发表于 2026-3-29 16:11:34 | 显示全部楼层 |阅读模式
Claude Code 从入门到脱发 · Day 4

Claude Code 能读文件、写文件、跑命令、删东西。这种能力用好了是生产力工具,用不好就是定时炸弹。

想象一下:你随口说"帮我清理一下项目",它理解成了
  1. 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 可以回滚),但跑命令前还是问一下——毕竟
    1. rm -rf
    复制代码
    可没有后悔药。

    3. plan 模式

    Claude Code 只规划不执行。它会告诉你打算做什么,但不会真正动手。适合审查方案或者让它出设计文档。

    4. bypassPermissions 模式

    所有操作自动批准,不问你任何问题。也叫"YOLO 模式"。

    启用方式:
    1. claude --dangerously-skip-permissions
    复制代码

    注意那个
    1. dangerously
    复制代码
    ——Anthropic 故意把这个词放在命令里提醒你:这很危险。

    这个模式只适合在隔离环境中使用,比如 Docker 容器、CI/CD 流水线、一次性的沙盒环境。在你的开发机上用这个模式,就像开着眼睛在高速公路上松开方向盘。

    ━━━━━━━━━━━━━━━━━━━━

    allowedTools:精细化控制

    四种模式是粗粒度的,有时候你需要更精细的控制。比如你希望 Claude Code 可以自由编辑文件和运行
    1. npm test
    复制代码
    ,但不能执行其他 shell 命令。

    这就是
    1. allowedTools
    复制代码
    的用途。

    1. .claude/settings.json
    复制代码
    中配置:
    1. {
    2.   "permissions": {
    3.     "allowedTools": [
    4.       "Read",
    5.       "Write",
    6.       "Edit",
    7.       "Glob",
    8.       "Grep",
    9.       "Bash(npm test)",
    10.       "Bash(npm run lint)",
    11.       "Bash(git status)",
    12.       "Bash(git diff)"
    13.     ]
    14.   }
    15. }
    复制代码

    这份配置的意思是:Claude Code 可以自由读写文件、搜索文件、运行测试和 lint,但其他任何命令都需要你确认。

    常用的 allowedTools 配置

    保守型(适合生产项目):
    1. {
    2.   "permissions": {
    3.     "allowedTools": [
    4.       "Read",
    5.       "Glob",
    6.       "Grep"
    7.     ]
    8.   }
    9. }
    复制代码

    只允许读,所有写操作和命令都要确认。

    日常开发型(适合大多数场景):
    1. {
    2.   "permissions": {
    3.     "allowedTools": [
    4.       "Read",
    5.       "Write",
    6.       "Edit",
    7.       "Glob",
    8.       "Grep",
    9.       "Bash(npm test)",
    10.       "Bash(npm run lint)",
    11.       "Bash(npx tsc --noEmit)",
    12.       "Bash(git status)",
    13.       "Bash(git diff)",
    14.       "Bash(git log)"
    15.     ]
    16.   }
    17. }
    复制代码

    读写文件自由,允许跑测试和 lint,Git 只允许查看操作。

    自动化型(适合 CI/CD 或沙盒环境):
    1. {
    2.   "permissions": {
    3.     "allowedTools": ["*"]
    4.   }
    5. }
    复制代码

    允许一切。前面说了,只在隔离环境用。

    ━━━━━━━━━━━━━━━━━━━━

    settings.json 在哪里

    Claude Code 的配置文件有三个层级:

    | 位置 | 作用域 | 适合放什么 |
    |------|--------|-----------|
    |
    1. ~/.claude/settings.json
    复制代码
    | 全局 | 个人偏好、通用权限 |
    |
    1. .claude/settings.json
    复制代码
    | 项目级(提交到 Git) | 团队统一规范 |
    |
    1. .claude/settings.local.json
    复制代码
    | 项目级(不提交) | 个人在此项目的特殊配置 |

    项目级配置覆盖全局配置,
    1. .local.json
    复制代码
    覆盖
    1. .json
    复制代码


    一个完整的项目级
    1. .claude/settings.json
    复制代码
    长这样:
    1. {
    2.   "permissions": {
    3.     "allowedTools": [
    4.       "Read",
    5.       "Write",
    6.       "Edit",
    7.       "Glob",
    8.       "Grep",
    9.       "Bash(npm test)",
    10.       "Bash(npm run lint)"
    11.     ],
    12.     "disallowedTools": [
    13.       "Bash(rm -rf *)",
    14.       "Bash(git push --force)"
    15.     ]
    16.   }
    17. }
    复制代码
    1. disallowedTools
    复制代码
    是黑名单,明确禁止某些操作。即使在 bypassPermissions 模式下,黑名单里的操作也会被阻止。

    ━━━━━━━━━━━━━━━━━━━━

    实际场景的权限策略

    场景一:个人业余项目

    你一个人玩,代码在 Git 里,随时可以回滚。

    策略:acceptEdits 模式 + 允许常用命令。
    1. {
    2.   "permissions": {
    3.     "allowedTools": [
    4.       "Read", "Write", "Edit", "Glob", "Grep",
    5.       "Bash(npm *)", "Bash(git status)", "Bash(git diff)", "Bash(git log)"
    6.     ]
    7.   }
    8. }
    复制代码

    场景二:公司项目

    多人协作,有 CI/CD 流水线,主分支受保护。

    策略:标准模式 + 白名单。
    1. {
    2.   "permissions": {
    3.     "allowedTools": [
    4.       "Read", "Glob", "Grep",
    5.       "Bash(npm test)", "Bash(npm run lint)"
    6.     ],
    7.     "disallowedTools": [
    8.       "Bash(git push *)",
    9.       "Bash(git commit *)"
    10.     ]
    11.   }
    12. }
    复制代码

    改文件和 Git 操作都需要确认。

    场景三:CI/CD 自动化

    在 Docker 容器里跑自动化任务。

    策略:bypassPermissions + 超时限制。
    1. claude --dangerously-skip-permissions -p "运行测试并生成报告" --max-turns 20
    复制代码

    ━━━━━━━━━━━━━━━━━━━━

    常见问题 Q&A

    Q1:设置了权限但 Claude Code 好像没生效?

    检查配置文件的位置和语法是否正确。用
    1. claude config list
    复制代码
    命令查看当前生效的配置。另外,修改配置后需要重新启动 Claude Code。

    Q2:怎么防止它执行危险的 Git 操作?

    1. disallowedTools
    复制代码
    里加入:
    1. "disallowedTools": [
    2.   "Bash(git push --force*)",
    3.   "Bash(git reset --hard*)",
    4.   "Bash(git clean -f*)"
    5. ]
    复制代码

    这些操作即使在 YOLO 模式也会被拦截。

    Q3:allowedTools 里的通配符怎么用?
    1. Bash(npm [i])
    复制代码
    表示允许所有以
    1. npm
    复制代码
    开头的命令。
    1. Bash(git log[/i])
    复制代码
    允许
    1. git log
    复制代码
    及其所有变体。但要注意:通配符越宽松,风险越大。

    ━━━━━━━━━━━━━━━━━━━━

    小结

    今天学了 Claude Code 的权限管理:

  • 四种模式:标准 > acceptEdits > plan > bypassPermissions,风险递增
  • allowedTools/disallowedTools 提供精细化的工具级权限控制
  • 配置文件有全局/项目/本地三个层级
  • 不同场景用不同策略,在效率和安全之间找平衡

    权限管理是"被动防守"——你设好规则,Claude Code 遵守。但有没有更主动的方式?比如每次它编辑完文件自动跑 Prettier 格式化,每次提交前自动检查有没有 console.log?

    明天 Day 5,我们聊 Hooks 系统——给 Claude Code 装上自动挡,让它在你的规则里全自动运转。

    ━━━━━━━━━━━━━━━━━━━━

    系列进度:4/10
  • 您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    冒险岛079
    扫码关注微信公众号

    Archiver|手机版|小黑屋|风叶林

    GMT+8, 2026-5-3 08:17 , Processed in 0.178778 second(s), 20 queries .

    Powered by 风叶林

    © 2001-2026 Discuz! Team.

    快速回复 返回顶部 返回列表