第 03 期 | 理解 Claude Code 的底层信任模型
🎯 学习目标
学完本期你将理解:
- Claude Code 的权限分层机制(Plan / Default / Auto / BypassPermissions)
- 哪些操作需要用户确认,哪些自动放行
- 如何配置自定义权限规则保护敏感文件
📖 核心概念讲解
3.1 四种权限模式
Claude Code 通过 Permission Modes 控制 AI 的行为边界:
╭─ 权限模式对比 ──────────────────────────────────────╮
│ │
│ 🔒 Plan Mode 只读分析,不修改任何文件 │
│ ├── 可用工具: Read, Glob, Grep, WebFetch │
│ └── 不可用: Write, Edit, Bash, Git │
│ │
│ 🔐 Default Mode 读写执行,敏感操作需确认 │
│ ├── 自动放行: Read, Glob, Grep │
│ └── 需确认: Write, Edit, Bash │
│ │
│ ⚡ Auto Mode 根据预设规则自动放行 │
│ ├── 用户预定义允许列表 │
│ └── 不在列表中的仍需确认 │
│ │
│ ⚠️ BypassPermissions 跳过所有权限检查 │
│ ├── 所有操作自动执行 │
│ └── 仅用于 CI/CD 等受信环境 │
│ │
╰──────────────────────────────────────────────────────╯
📚 官方文档参考: Permission Modes
3.2 工具权限分类
每个 Tool 都有明确的权限需求:
| 权限级别 | 工具 | 说明 |
|---|---|---|
| 无需确认 | Read, Glob, Grep, LS, WebFetch |
只读操作,安全 |
| 需用户确认 | Write, Edit, Bash, NotebookEdit |
会修改文件或执行命令 |
| 特殊权限 | EnterWorktree, CronCreate |
创建 worktree 或定时任务 |
3.3 自定义权限规则
通过 .claude/settings.json 或用户全局 ~/.claude/settings.json 配置:
{
"permissions": {
"allow": [
"Bash(npm test)",
"Bash(npm run lint)",
"Bash(git status)",
"Bash(git diff *)",
"Bash(git log *)"
],
"deny": [
"Bash(rm -rf *)",
"Bash(sudo *)",
"Bash(curl * | bash)"
]
}
}
规则语法:
Bash(npm test)— 精确匹配Bash(git *)— 通配符匹配所有 git 子命令Write(src/**)— 只允许写入 src 目录Edit(*.config.*)— 禁止编辑配置文件
💻 模拟 Claude TUI 交互
场景 1:Default Mode 下的权限确认
> 删除 src/legacy/ 目录下所有废弃文件
╭─ Claude ────────────────────────────────────────────╮
│ │
│ 我来帮你清理废弃文件。首先让我查看有哪些文件: │
│ │
│ 🔍 Using tool: Glob (src/legacy/**) │
│ → Found 12 files │
│ │
│ 以下是 src/legacy/ 下的文件列表: │
│ • src/legacy/old-router.ts (已被 app-router 替代) │
│ • src/legacy/utils-v1.ts (已迁移到 utils-v2.ts) │
│ • ... 共 12 个文件 │
│ │
│ ⚠️ Tool request: Bash │
│ Command: rm -rf src/legacy/ │
│ │
│ ╭─────────────────────────────────────────────╮ │
│ │ [Y] Allow [n] Deny [e] Edit command │ │
│ │ [a] Always allow this tool │ │
│ ╰─────────────────────────────────────────────╯ │
│ │
╰──────────────────────────────────────────────────────╯
注意这里 Glob(只读)自动执行了,但 Bash(删除命令)需要你确认。
场景 2:切换到 Plan Mode
> (按 Shift+Tab)
╭─ Mode Switched ─────────────────────────────────────╮
│ │
│ 🔒 Plan Mode activated │
│ │
│ Claude can only: │
│ ✅ Read files ✅ Search code │
│ ✅ Analyze structure ✅ Ask questions │
│ │
│ Claude cannot: │
│ ❌ Write/edit files ❌ Run commands │
│ ❌ Create commits ❌ Modify anything │
│ │
╰──────────────────────────────────────────────────────╯
> 分析这个项目的认证模块有什么安全隐患
╭─ Claude (Plan Mode) ────────────────────────────────╮
│ │
│ 🔍 Using tool: Read (src/auth/jwt.ts) │
│ 🔍 Using tool: Read (src/middleware/auth.ts) │
│ 🔍 Using tool: Grep ("secret" across src/**) │
│ │
│ ## 安全分析报告 │
│ │
│ ⚠️ 发现 3 个潜在问题: │
│ │
│ 1. JWT Secret 硬编码在 jwt.ts 第 12 行 │
│ → 应迁移到环境变量 │
│ │
│ 2. Token 过期时间设置为 30 天,建议 ≤ 24 小时 │
│ │
│ 3. 缺少 refresh token 机制 │
│ → 用户登出后旧 token 仍然有效 │
│ │
│ 📝 这些是纯分析结果,我没有修改任何文件。 │
│ 切换到 Default Mode 后可以帮你修复。 │
│ │
╰──────────────────────────────────────────────────────╯
💻 代码演示:配置 Auto Mode
# 查看当前 Auto Mode 默认规则
claude auto-mode defaults
# 将默认规则导出为 JSON 文件
claude auto-mode defaults > auto-rules.json
# 编辑后加载自定义规则
claude auto-mode config
# 在启动时指定 Auto Mode
claude --permission-mode auto
Auto Mode 规则配置示例
{
"auto_approve": [
"Read",
"Glob",
"Grep",
"Bash(npm test *)",
"Bash(npm run *)",
"Bash(git status)",
"Bash(git diff *)",
"Bash(git add *)",
"Write(src/**)",
"Edit(src/**)"
],
"always_deny": [
"Bash(rm -rf *)",
"Bash(sudo *)",
"Write(.env*)",
"Edit(.env*)"
]
}
🔧 涉及的 Tools / CLI
| 工具/命令 | 作用 |
|---|---|
Shift+Tab |
在终端内切换权限模式 |
claude --permission-mode plan |
启动时指定为 Plan Mode |
claude --permission-mode auto |
启动时指定为 Auto Mode |
/permissions |
在会话中查看当前权限规则 |
claude auto-mode defaults |
查看/导出 Auto Mode 规则 |
.claude/settings.json |
项目级权限配置 |
~/.claude/settings.json |
全局权限配置 |
📝 本期要点回顾
- Claude Code 有 四种权限模式:Plan、Default、Auto、BypassPermissions
- 读取类工具(Read, Glob, Grep)默认自动放行
- 写入/执行类工具(Write, Edit, Bash)需要用户确认
- 使用
.claude/settings.json可以精细化配置每个工具的权限规则 - Plan Mode 是陌生代码库的安全起点——先分析再动手