跳到主要内容

权限系统

权限系统是 Claude Code 的安全基石。每一次工具调用都会经过权限系统的检查,确保 AI 不会执行未经授权的操作。

设计理念

权限先行:所有外部操作都必须经过权限审核。

Claude Code 在安全性和可用性之间找到了平衡——默认安全,但允许用户根据需要放宽限制。

权限模式

模式代码标识行为
默认模式default危险操作需要用户确认
计划模式plan只允许只读操作
跳过权限bypassPermissions跳过所有权限检查
自动模式auto智能判断是否需要确认
接受编辑acceptEdits自动接受文件编辑
不询问dontAsk直接执行,不询问

权限检查流程

工具调用请求

检查权限模式

╔══════════════════════════╗
║ bypassPermissions? ║──→ 直接执行
║ plan 模式? ║──→ 是否只读?
║ 工具在白名单中? ║──→ 直接执行
║ 工具是否 isReadOnly? ║──→ 直接执行
║ 用户已预先授权? ║──→ 直接执行
╚══════════════════════════╝
↓(都不满足)
提示用户确认

用户允许 → 执行
用户拒绝 → 跳过,通知 LLM

权限配置

settings.local.json 中可以预先授权特定工具:

{
"permissions": {
"allow": [
"WebSearch",
"mcp__context7__query-docs",
"mcp__plugin_telegram_telegram__reply"
]
}
}

全局配置 vs 项目配置

配置文件路径范围
全局设置~/.claude/settings.json所有项目
本地设置~/.claude/settings.local.json所有项目(不提交)
项目设置.claude/settings.json当前项目
项目本地.claude/settings.local.json当前项目(不提交)

工具分类

安全工具(不需要确认)

  • FileReadTool — 只读操作
  • GlobTool — 文件搜索
  • GrepTool — 内容搜索
  • WebSearchTool — 网络搜索

需要确认的工具

  • BashTool — 可能执行危险命令
  • FileWriteTool — 文件写入
  • FileEditTool — 文件修改
  • AgentTool — 启动子 Agent

危险操作检测

Claude Code 内置了危险操作检测:

危险操作示例:
- rm -rf / ← 删除根目录
- git reset --hard ← 丢弃未提交变更
- git push --force ← 强制推送
- DROP TABLE ← 删除数据库表
- kubectl delete ← 删除 K8s 资源

检测到危险操作时,即使在宽松权限模式下也会发出警告。

用户拒绝处理

当用户拒绝工具调用时,LLM 会收到通知:

  1. 不再重试相同的调用
  2. 分析拒绝原因
  3. 调整方案重新尝试
  4. 如果不理解原因,询问用户