权限与安全
Permission modes 与最佳实践。
权限与安全
这一课你将能做到
- 读懂权限提示与三种模式(default / acceptEdits / plan)的适用场景,按任务风险选择放权程度
- 在 settings.json 中编写 allow / ask / deny 规则,实现「安全命令免打扰、危险操作必拦截」
- 说明三层配置文件(用户级 / 项目共享级 / 项目本地级)的优先级与团队协作分工
为什么要学
权限系统决定你敢不敢放手让 agent 干活。放得太紧:每个文件保存都点一次确认,一天点几百次;放得太松:rm -rf、git push --force、读 .env 不再有人拦。成熟用法是把权限当成代码来管理:团队共享一份 allow/deny 清单进 git,个人差异放本地配置,审查时有据可查。这是 Claude Code 用于生产环境的必修课,也是面试里「如何安全使用 coding agent」的标准答案来源。
人话:权限规则就是小区门禁。快递(跑测试)刷白名单直接进;陌生人(改配置)登记放行;劫匪(删库跳表)直接拒之门外。
先建立图像
一次敏感操作的默认流程,与三层配置的优先级:
Claude 想执行 Bash(npm run test)
↓ 命中 allow 规则?→ 直接执行
↓ 命中 deny 规则?→ 直接拒绝,不执行
↓ 其余:弹窗问你
├─ Yes(仅这次)
├─ Yes, and don't ask again(写入配置)
└─ No(本次拒绝,它换思路)
配置优先级(高 → 低):
企业策略 > 命令行参数 > .claude/settings.local.json
> .claude/settings.json > ~/.claude/settings.json
跟着做
步骤 1:体验一次完整权限弹窗
新会话里让它执行一条命令:
帮我在项目里跑一下单测
弹窗出现时注意三个选项的含义,本课原则:只对确定安全的操作选 "don't ask again"。
步骤 2:用 /permissions 管理规则
/permissions
面板中可查看与增删 Allow / Ask / Deny 三类规则,选作用域(用户 / 项目 / 本地)。先在这里加两条感受一下:
Allow: Bash(npm run test:*)
Deny: Read(./.env)
步骤 3:手写团队共享配置
创建 .claude/settings.json(进 git,全团队生效):
{
"permissions": {
"allow": [
"Bash(npm run build)",
"Bash(npm run test:*)",
"Bash(git diff:*)",
"Bash(git log:*)"
],
"ask": [
"Bash(git push:*)",
"Edit(.github/**)"
],
"deny": [
"Read(./.env*)",
"Bash(rm -rf:*)",
"Bash(git push --force:*)"
]
}
}
规则语法要点:Bash(前缀:*) 匹配以该前缀开头的命令;Read/Edit(路径模式) 用 glob;WebFetch(domain:example.com) 限定域名;MCP 工具用 mcp__服务器名__工具名(或 mcp__服务器名 整体放行)。
步骤 4:个人差异放本地文件
创建 .claude/settings.local.json(默认被 git 忽略,只影响自己):
{
"permissions": {
"allow": [
"Bash(mvn test:*)",
"Bash(docker compose up:*)"
]
}
}