第 03 期 | 理解 Claude Code 的底层信任模型

更新于 2026/4/5

🎯 学习目标

学完本期你将理解:

  1. Claude Code 的权限分层机制(Plan / Default / Auto / BypassPermissions)
  2. 哪些操作需要用户确认,哪些自动放行
  3. 如何配置自定义权限规则保护敏感文件

📖 核心概念讲解

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 全局权限配置

📝 本期要点回顾

  1. Claude Code 有 四种权限模式:Plan、Default、Auto、BypassPermissions
  2. 读取类工具(Read, Glob, Grep)默认自动放行
  3. 写入/执行类工具(Write, Edit, Bash)需要用户确认
  4. 使用 .claude/settings.json 可以精细化配置每个工具的权限规则
  5. Plan Mode 是陌生代码库的安全起点——先分析再动手

🔗 参考资料