第十二篇:权限系统深度解析:Default、Plan、Bypass、Auto四种模式如何保护代码安全?

📌 标签#权限系统 #安全 #模式切换 #配置管理

Claude Code 拥有强大的自主能力,但这种能力必须被关进"安全的笼子"。权限系统就是那个笼子------它决定了 AI 什么时候可以放手去做,什么时候必须停下来问你。


1. 为什么需要权限系统?

Agent 模式的本质是"AI 替你执行操作"。但如果 AI 可以随意修改文件、删除目录、运行危险的 shell 命令,后果不堪设想。

想象一下这些场景:

  • 你在生产服务器上运行 claude,AI 误以为需要删除 node_modules 并重新安装,执行了 rm -rf node_modules(虽然不会直接删库,但也很麻烦)
  • AI 在重构代码时,错误地覆盖了重要的配置文件
  • 你在 CI 环境中让 AI 自动修复代码,但它陷入了无限循环,不断提交修改

权限系统的目标

  • 让 AI 能够完成工作,但默认不信任任何写操作或危险命令
  • 提供灵活的模式,让用户根据场景平衡"便利性"与"安全性"
  • 记录所有操作,便于审计和回滚

Claude Code 提供了四种权限模式,从最安全到最自动,依次为:Plan → Default → Bypass → Auto


2. 四种模式速览

模式 读操作 写操作(Edit/Write) Shell 命令 典型场景
Plan 允许(自动) 禁止(只输出计划,不执行) 禁止(除非只读命令如 ls 高风险任务前的审核
Default 允许(自动) 请求确认(显示 diff) 请求确认(显示完整命令) 日常开发(推荐)
Bypass 允许 自动允许(需用户预先批准) 自动允许(需预先配置白名单) 信任的本地项目
Auto 允许 自动允许(无确认) 自动允许(无确认) CI/CD、自动化脚本

注意:即使是 Auto 模式,Claude Code 也不会执行某些极度危险的命令(如 rm -rf /),内置了硬编码黑名单。


3. 模式详解

3.1 Plan 模式------先看方案,再动手

适用场景:你不确定 AI 的计划是否合理,或者任务涉及修改重要配置、生产环境相关代码。

行为

  • AI 会完整分析任务,输出详细的执行计划(包括要修改哪些文件、执行哪些命令)
  • AI 不会调用任何修改性工具(Write、Edit、Bash 执行非只读命令)
  • 你可以审核计划,然后手动切换到其他模式让 AI 执行,或修改指令后重新生成计划

如何进入

bash 复制代码
/mode plan

对话示例

复制代码
Claude Code > /mode plan
Switched to Plan mode. I will only propose plans, not execute changes.

Claude Code > 帮我将项目中的 axios 替换为 fetch

AI 输出:

复制代码
[Plan] 将 axios 替换为 fetch

我将执行以下步骤:
1. 搜索所有 import axios from 'axios' 或 require('axios') 的文件(预计约 8 个文件)
2. 读取这些文件,分析 axios 的使用方式(主要是 .get/.post 和拦截器)
3. 对于每个文件:
   a. 移除 axios 导入
   b. 添加 fetch 包装函数(复用已有的 fetch 配置,或创建新的)
   c. 将 axios 调用改为 fetch 调用,处理响应和错误
4. 移除 package.json 中的 axios 依赖
5. 运行 npm test 确保功能正常

是否继续?输入 "execute" 让我切换到 Default 模式并执行,或 "modify" 修改计划。

你审阅后可以输入 execute,AI 会提示你先手动切换到 Default 或 Auto 模式,然后重新触发任务。

Plan 模式的技巧

  • 可以用 /mode default 后再执行,或者直接说"按照上面的计划执行,但每次修改前让我确认"
  • Plan 模式也能帮助你自己理清思路------让 AI 输出计划后再决定是否真的需要改动

3.2 Default 模式------日常开发的安全平衡点

适用场景:绝大多数开发任务,你想要效率,但又希望控制风险。

行为

  • 读操作(Read、LS、Grep):自动执行,无需确认
  • 写操作(Write、Edit):弹出确认提示,显示将要修改的文件和 diff 内容
  • Shell 命令 :弹出确认提示,显示完整命令,并标注是否危险(如 rm, sudo, chmod 等)
  • 你可以在确认时选择:
    • y - 执行本次操作
    • n - 拒绝本次操作,AI 会尝试其他方案
    • a - 本次会话中对此类操作全部允许(类似于临时 Bypass)
    • N - 拒绝并禁止 AI 再次尝试相同操作

如何进入

bash 复制代码
/mode default

确认提示示例

复制代码
Claude Code wants to edit src/utils.js

Diff:
@@ -12,6 +12,7 @@
 function formatPrice(price) {
+  if (price < 0) return 'Invalid price';
   return `$${price.toFixed(2)}`;
 }

Allow this edit? (y/n/a/N) 

Default 模式的最佳实践

  • 保持默认模式,不要轻易切换,除非你完全信任当前项目
  • 对于频繁确认的操作(比如一次重构需要修改 20 个文件),可以临时使用 a 允许本次会话的所有同类操作,但不要全局 Bypass
  • 定期检查 /cost 和操作历史,了解 AI 做了哪些事

3.3 Bypass 模式------信任项目的半自动模式

适用场景:你完全信任当前项目(如个人 side project、完全受控的开发容器),不想每次操作都点确认,但仍希望对某些危险命令保持警惕。

行为

  • 读操作:自动
  • 写操作:自动允许,但会记录日志
  • Shell 命令:根据白名单 判断。默认白名单包含 npm, yarn, pip, git 等常见安全命令;危险命令(如 rm, mv 覆盖重要文件, sudo)仍需确认
  • 你可以自定义白名单(见下文配置)

如何进入

bash 复制代码
/mode bypass

配置白名单 (在 ~/.config/claude-code/config.toml 或项目 .claude/config.toml):

toml 复制代码
[permissions.bypass]
# 自动允许的命令前缀
allowed_commands = [
    "npm run",
    "npm test",
    "git status",
    "git diff",
    "ls",
    "cat",
    "echo",
    "python",
    "node"
]

# 仍然需要确认的命令(可覆盖默认危险模式)
dangerous_commands = [
    "rm -rf",
    "sudo",
    "chmod",
    "kill"
]

注意 :Bypass 模式不是"无限制"。内置的安全黑名单(如 rm -rf /, :(){ :|:& };: 等 fork bomb)在任何模式下都不会执行。


3.4 Auto 模式------无人值守的完全自动化

适用场景:CI/CD 流水线、自动化脚本、预提交钩子等非交互环境。

行为

  • 所有操作(读、写、Shell)自动允许,无任何确认提示
  • 但仍然遵循内置安全黑名单
  • 适合与 --print 非交互参数结合使用

如何进入

bash 复制代码
/mode auto

或在启动时指定:

bash 复制代码
claude --mode auto

CI 示例(GitHub Actions):

yaml 复制代码
- name: Run Claude Code to fix lint issues
  run: |
    echo "修复 ESLint 错误" | claude --mode auto --print
  env:
    ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}

⚠️ 警告

  • Auto 模式会自主修改文件、提交代码。务必在 CI 中限制权限(如只允许在 PR 分支上运行,且不自动 push)
  • 建议结合 --allowed-tools 进一步限制(如只允许 Read, Grep,禁止 Write, Bash
  • 始终在 Auto 模式前运行 claude --dry-run 或 Plan 模式预演

4. 模式切换实战

4.1 典型工作流

  1. 新任务/高风险任务

    bash 复制代码
    /mode plan

    让 AI 输出计划 → 审阅 → 满意后,输入 /mode default 或手动执行。

  2. 日常开发

    bash 复制代码
    /mode default

    边确认边执行,既安全又不烦人(批量操作时用 a 暂时允许)。

  3. 重构已熟悉的模块

    bash 复制代码
    /mode bypass

    信任项目,但危险命令仍需确认。

  4. CI 自动修复

    bash 复制代码
    claude --mode auto --print "自动修复 lint 错误"

4.2 单次命令临时提升权限

你不需要全局切换模式。在 Default 模式下,如果 AI 请求执行一个操作,你可以直接回复"允许本次操作"或"允许所有类似的编辑操作(本次会话)"。

例如:

复制代码
Claude Code > 修改 src/theme.js 中的颜色变量

[AI 显示 diff,请求确认]

你输入:a   # 表示本次会话中所有编辑操作都自动允许

这相当于临时进入 Bypass 模式,但仅对写操作有效,且仅限当前会话。


5. 安全边界与黑名单

无论哪种模式,Claude Code 都不会执行以下操作(硬编码保护):

类别 禁止的命令/模式
文件系统破坏 rm -rf /, rm -rf /*, dd if=/dev/zero of=/dev/sda
权限提升 sudo 后跟危险命令(某些白名单内的 sudo 允许,如 sudo apt update 会请求确认)
系统配置 修改 /etc/passwd, /etc/shadow, /etc/sudoers
远程破坏 `curl ...
Fork bomb `:(){ :
加密勒索类 不会执行加密或删除用户数据的命令

同时,Claude Code 在尝试读取 .env, *.pem, id_rsa 等敏感文件时会发出警告,并建议你不要将其包含在上下文中。


6. 常见问题与解决方案

Q1: 我在 Default 模式下,AI 要修改 30 个文件,每个都要按 y,太累了。怎么办?

A : 在第一个确认提示时输入 a(Allow all for this session),后续所有编辑操作会自动允许(但 shell 命令仍需确认)。或者临时切换到 Bypass 模式:/mode bypass

Q2: AI 在 Auto 模式下跑飞了,执行了危险的 rm 命令怎么办?

A : 首先,内置黑名单会阻止最危险的命令。但如果 AI 执行了 rm ./important.log(非全局删除),系统会允许。建议:不要在 Auto 模式下运行未经充分测试的任务。先 Plan 模式审核,或用 --allowed-tools 限制工具集。

Q3: 我想让 AI 永远不需要确认编辑操作,但仍需要确认 shell 命令。

A: 使用 Bypass 模式,并在配置中设置:

toml 复制代码
[permissions.bypass]
allowed_commands = []  # 空列表意味着所有 shell 命令都需要确认

然后手动确认每个命令。或者保持 Default 模式,但回答 a 来允许所有编辑。

Q4: 如何查看当前模式?

A : 输入 /mode 不带参数,会显示当前模式及可用的模式列表。

Q5: 能否为不同项目设置不同的默认模式?

A : 可以。在项目根目录的 .claude/config.toml 中设置:

toml 复制代码
[mode]
default = "bypass"   # 该项目默认使用 bypass 模式

7. 与其他工具的权限对比

工具 权限模型 是否支持计划先行 危险命令黑名单
Claude Code 四级模式 + 用户确认 + 黑名单 ✅ (Plan)
GitHub Copilot 无(只建议,不执行) 不适用
Cursor 需手动点"Apply"或"Run" 有限(需插件)
Aider 自动提交但需确认
AutoGPT 无,用户需时刻监控

Claude Code 的权限系统是目前终端 AI 工具中最完善的,兼顾了安全、灵活性和自动化需求。


8. 下篇预告

权限系统管住了 AI 的"手脚",但要让 AI 发挥最大效用,你需要学会如何"说话"------提示词(Prompt)的核心技巧。下一篇将深入讲解如何编写高效的提示词,让 Claude Code 准确理解你的意图。

👉 下一篇: 提示词(Prompt)核心技巧:上下文、预期行动、成功标准,缺一不可


思考题(自测理解)

  1. 你在 CI 流水线中想要 Claude Code 自动修复常见的 lint 问题并提交 PR。应该使用哪种模式?需要注意哪些安全问题?
  2. 为什么 Plan 模式下仍然允许读操作?如果禁止读操作,Plan 模式还能工作吗?
  3. 假设你想让 AI 在 Default 模式下自动允许 npm test 命令(因为它只是运行测试,不修改代码),但保留对其他命令的确认。能否通过配置实现?如何做?

安全是自由的边界。掌握权限模式,你就能放心地把更多工作交给 AI。下一章,我们将把 AI 的能力发挥到极致------从"会说"到"会做"。

相关推荐
网宿安全演武实验室1 小时前
当AI跑进容器:全链路容器安全检测与智能运营实
人工智能·安全·容器·k8s
老赵聊算法、大模型备案4 小时前
《人工智能应用伦理安全指引1.0》发布
人工智能·安全
Geometry Fu5 小时前
《智能终端与边缘计算》第六章 边缘计算安全平台
人工智能·安全·边缘计算·智能终端
码哥字节5 小时前
Claude Code 装了一堆 Skill,用了三个月,我删掉了 80%
ai 编程工具·claude code
安当加密6 小时前
Kubernetes Secret不安全?External Secrets Operator接入凭据管理服务实战,自动轮转零停机
安全·容器·kubernetes
实在智能RPA6 小时前
实在Agent针对金融行业Agent灾备与高可用是如何进行设计的?深度拆解金融级智能体的架构安全与连续性保障
人工智能·安全·ai·金融·架构
宋浮檀s7 小时前
春秋云镜——CVE-2022-22965
网络·安全·web安全·网络安全
Geometry Fu7 小时前
《智能终端与边缘计算》第四章 边缘计算安全
人工智能·安全·边缘计算·智能终端
2601_959477917 小时前
Vatee:信息披露与运营规范性的评测参考
大数据·人工智能·安全