Claude Code 权限
权限决定 Claude Code 能读取、编辑、运行或通过工具访问什么。好的权限设计需要在效率和仓库风险之间取得平衡。
- 最近核验
- 适用版本
- 适用于 Claude Code 2.1.x。本机使用 2.1.198 检查 CLI 拼写;当前官方文档可能包含更新的 2.1.x 行为。
- 核验方式
- 2026-07-19 对照官方文档、CLI reference 和 changelog。本机检查 permission modes 和 flags;deny precedence 与文件规则限制依据官方文档。
可复现实践
设计 read-first 权限配置并验证拒绝路径
从 plan mode 开始,只允许必要检查工具,拒绝读取秘密,并在实现前验证拒绝确实可见。
准备
- 允许在所有真实仓库之外创建一次性目录的 shell 会话。
- 不含真实秘密的 placeholder .env;不得在已有 settings 上运行本练习。
- 列出任务实际需要的命令。
执行步骤
创建一次性仓库和 local-only deny rule
先创建唯一临时仓库,再拒绝读取 .env;命令不会打开或覆盖已有仓库的 settings。
步骤 1 PERMISSION_LAB=$(mktemp -d "${TMPDIR:-/tmp}/claude-permissions.XXXXXX") printf '%s\n' "$PERMISSION_LAB" cd "$PERMISSION_LAB" git init -q mkdir .claude printf '%s\n' '{"permissions":{"deny":["Read(.env)"]}}' > .claude/settings.local.json printf '%s\n' 'placeholder-only' > .env验证配置语法
可解析是必要条件,但不证明 rule 行为。
步骤 2 jq -e . .claude/settings.local.json >/dev/null用窄工具和 plan mode 启动
允许研究需要的读取和搜索,不启用编辑。
步骤 3 claude --permission-mode plan --allowedTools "Read" "Grep" "Bash(git status --short)"覆盖允许和拒绝路径
先请求读取正常源码,再请求读取 .env;第二个请求应被 deny rule 阻止。
预期结果
正常检查可用,秘密路径请求被拒绝,plan mode 中不发生文件编辑。
验证
- 检查真实 permission prompt 或 denial,不依赖模型叙述。
- 运行 git status,确认只有预期 local settings 和 fixture 变化。
- 每个新增 allowed tool 都应对应任务真实需要。
失败处理
Deny 未匹配
使用官方 Read/Edit path syntax 并检查 anchor,不要假设不受支持的 Write(path) 生效。
subprocess 仍能读取
文件规则不控制任意 subprocess;需要更强约束时启用 OS sandbox。
清理或回退
- 返回原目录,确认 PERMISSION_LAB 是刚才打印的 mktemp 路径,只删除该一次性目录。
- 为不同任务扩大权限前先退出当前会话。
边界与不适用场景
- 任意 scope 的 deny 都优先于 allow 和 hooks。
- plan mode 和 permission rules 属于应用控制,不能替代 OS 隔离和秘密管理。
权限模式
不同阶段适合不同模式。探索阶段可从较窄访问开始,实现阶段可能需要编辑权限,敏感命令仍应保持显式审批。
允许和拒绝规则
规则适合重复命令和已知安全路径。拒绝规则可保护生成文件、密钥、基础设施状态或不应自动运行的命令。
审批提示
审批提示是安全模型的一部分。它用于检查命令意图、工作目录、影响文件,以及动作是否符合计划。
敏感仓库
生产基础设施、安全敏感代码或私有数据仓库中,应从最小可用访问开始。只有任务和验证路径明确后,再扩大范围。
| Command | Description |
|---|---|
/permissions | 在会话内配置审批规则。 |
--permission-mode plan | 在允许编辑前先进入 plan 模式。 |
--permission-mode bypassPermissions | 跳过提示;仅用于有审查门禁的可信自动化。 |
--allowedTools "Read" | 调研任务中自动批准只读操作。 |
--disallowedTools "Edit" | 从模型上下文中完全移除编辑能力。 |
权限设计示例
好的权限规则应贴合团队习惯:安全只读命令自动批准,破坏性命令拒绝,其余动作人工审查。