用Claude Code的开发者想必都经历过这样的崩溃场景我要读取pom.xml文件可以吗——同意我要将依赖写入pom.xml文件可以吗——同意当第10次弹出权限请求时大多数人早已忍无可忍只想大喊我全都同意了你自己去运行吧然而当我们真正去查找解决方案时才发现Claude Code有一个--dangerously-skip-permissions参数可以跳过权限确认。从名称就能看出这是一个危险的选项。我们并不需要采取如此极端的方式。权限系统实际上是我们的安全屏障无需给予Claude Code全部权限。合理分配权限能够在效率与安全之间取得完美平衡。本文将教你如何善用权限系统将那些烦人的权限提示转化为得心应手的工具让它们从拦路虎变成遥控器。五种权限模式从保姆级守护到全自动飙车Claude Code内置了五种权限模式覆盖从最保守到最激进的所有场景可以在会话中按shift tab快速进行切换。模式行为适用场景default默认读文件自动通过写文件需要确认命令需要确认新手优化accept edits on读文件自动通过写文件自动通过命令需要确认日常开发模式plan mode on只能读和分析不能写和执行命令探索不熟悉的代码库代码审查、分析dontAsk读写命令全自动但是不跳过安全检查严格锁定、高度安全的环境需要注意的是所有未经明确授权的操作都会被静默拒绝可能会导致执行任务时由于权限受阻影响任务完成bypass ⚠️完全跳过所有检查目前权限级别最高的模式完全自动化的 CI/CD 或容器环境在交互模式中按ShiftTab你会看到状态栏在三种模式间循环normal-mode → ⏵⏵ accept edits on → ⏸ plan mode on → normal-modedontAsk和bypass模式由于权限较高无法在会话中进行选择需要在开启会话时指定# 开启dontAsk模式,通过 --permission-mode 参数直接指定 claude --permission-mode dontAsk # 开启 bypass 模式 claude --dangerously-skip-permissions日常开发推荐使用acceptEdit模式因为在写代码这件事上大概率是希望 Claude 直接改的——毕竟你都让它写代码了肯定是希望它直接写入文件。但执行 shell 命令比如mvn depoly、git push的时候你还是想看一眼再确认。你也可以直接在配置文件中灵活配置可执行的操作这正是接下来将要讲述的内容。项目自定义权限从统一守则到私人保镖通用权限规则能解决 80% 的日常场景但每个项目都有自己的脾气。这时候就需要你亲自给 Claude Code 下达“私人保镖”级别的专属指令——让它知道在这个项目里哪些命令可以闭眼通过哪些操作必须反复确认。配置文件在哪里配置文件位置适用场景~/.claude/settings.json全局配置所有项目通用对 Claude Code 的底线要求项目根目录/.claude/settings.json项目级配置提交到 Git 跟团队共享这个项目专属的权限规则项目根目录/.claude/settings.local.json个人本地配置不提交到 Git你自己的偏好不影响队友优先级local project global配置文件实操还需要手动维护项目的配置文件吗那也太落后了。在Claude Code的会话中直接让它帮你生成一份项目维度的配置文件吧。请在当前项目根目录下创建 .claude/settings.json 配置文件采用 allow/ask/deny 的权限配置模式 具体要求 1.先扫描分析项目的技术栈如 Node.js、Python、Java、Go 等和常用命令构建、测试、lint、启动等。 2.根据项目实际命令如 npm test → Bash(npm test *)python manage.py runserver → Bash(python manage.py runserver)动态填充 allow 列表。 3.增加常见安全规则如rm -rf、.env 读取等。Claude Code会在项目根目录/.claude/settings.json中生成一份配置文件我们可以修改这个配置文件来控制我们的权限。一个最简单的权限配置文件如下:{ permissions: { defaultMode: acceptEdits, allow: [ Read, Edit(./src/**), Write(./src/**), MultiEdit(./src/**), Bash(mvn clean), Bash(mvn compile), Bash(mvn package), Bash(mvn install), Bash(npx tsc --noEmit), Bash(git status), Bash(git diff *), Bash(git add *), Bash(git commit *), Bash(git log *), Bash(ls *), Bash(cat *), Bash(mkdir *) ], ask: [ Bash(git push *), Bash(npm deploy), ], deny: [ Bash(rm -rf *), Bash(sudo *), Bash(curl *), Read(./.env*), Read(./secrets/**), Edit(./.env*), WebFetch ] } }这份配置翻译成人话就是allow自动通过读任何文件、编辑 src 目录下的代码、跑开发/构建/测试命令、常规 Git 操作——这些都是日常高频操作不用每次都问我。ask问我一声推代码到远程、安装新依赖、执行数据库迁移——这几个操作有一定风险让我确认一下。deny绝对禁止删除操作、sudo 提权、读取环境变量文件——不管什么情况这些操作一律拦截。deny 永远优先级最高。就算你在 allow 里写了允许读.env文件只要 deny 里也有这条规则Claude 就死也读不了。这是安全底线不可妥协。Claude Code所有的配置就都是在这三层里做文章。/permissions 命令不用手写 JSON如果你不想手动编辑 JSON 文件Claude Code 提供了交互式配置界面。在会话中输入/permissions它会弹出一个交互式菜单供你添加或移除权限规则。此外当 Claude 询问你是否允许某个操作时选择Always allow选项会自动将该规则添加到你的允许列表中。这种在使用过程中逐步配置的方式非常符合用户习惯——系统首次询问时用户同意并勾选以后都允许后续便不再重复询问。安全最佳实践权限配得再宽松这三条红线不能碰红线一永远不要允许看不懂的 Bash 命令Claude 有时会生成复杂的 shell 命令。如果你不理解其用途切勿直接执行。应先要求 Claude 解释命令的具体功能和目的确认安全无误后再决定是否执行。红线二.env 文件必须列入拒绝访问名单你的.env文件包含数据库密码、API Key 等敏感信息。请务必将Read(./.env*)和Edit(./.env*)权限加入拒绝列表彻底封堵这一安全隐患。红线三生产环境操作需使用 plan 模式在生产代码库中工作时首先切换至plan模式。让 Claude 仅进行分析和方案制定不直接执行任何修改。确认方案安全可行后再切换回acceptEdits模式执行具体操作。这如同手术前先进行影像检查明确情况——切勿盲目动手操作。一份你能直接复制的全局配置最后送你一份经过实战验证的全局配置模板。把它放到~/.claude/settings.json作为你所有项目的基础配置。{ permissions: { defaultMode: acceptEdits, allow: [ Read, Bash(ls *), Bash(cat *), Bash(head *), Bash(tail *), Bash(wc *), Bash(find *), Bash(grep *), Bash(echo *), Bash(mkdir *), Bash(git status), Bash(git log *), Bash(git diff *), Bash(git branch *), Bash(git show *), Bash(node --version), Bash(npm --version), Bash(npx tsc --noEmit) ], deny: [ Bash(rm -rf *), Bash(sudo *), Bash(curl *), Bash(wget *), Read(./.env*), Read(./secrets/**), Read(./**/credentials*), Edit(./.env*), Edit(./secrets/**), WebFetch ] } }这是全局的安全底线。在具体项目中你再通过项目级的.claude/settings.json添加项目特有的 allow 规则比如mvn clean、mvn install之类的命令。采用全局与项目两层协作机制全局配置作为安全基线及通用便利性设置项目配置则专注于特定项目需求仅对当前项目生效。通过这套配置体系权限提示可减少80%以上同时确保安全基线保持不变。本篇小结三个核心收获第一权限系统的本质是三层过滤器——deny拒绝 ask询问 allow通过优先级从高到低。理解这一模型后所有配置都将变得水到渠成。第二在五种权限模式中acceptEdits是日常开发的首选——代码编辑自动通过命令执行需要确认。按 ShiftTab 可随时切换。第三全局与项目两层协作机制配合使用既便捷又安全。