LuoLuoLuoLuo Wiki
Claude Code

权限模型

Claude Code 的权限规则、权限模式与安全边界

Claude Code 在调用工具前会经过权限系统。理解这套机制,重点不是背某个版本的弹窗文案,而是知道三件事:

  • 工具权限:哪些工具能用,哪些命令或路径必须先问你
  • 权限模式:默认模式、计划模式、自动模式等会改变审批策略
  • 安全边界:显式拒绝规则、受保护路径、沙盒和企业策略会继续生效

权限规则

settings.json 中可以用 permissions.allowpermissions.askpermissions.deny 精细控制工具权限。

{
  "permissions": {
    "allow": [
      "Read",
      "Glob",
      "Grep",
      "Bash(pnpm test)",
      "Bash(pnpm build)"
    ],
    "ask": ["Bash(git push *)"],
    "deny": ["Read(.env)", "Bash(rm -rf *)"]
  }
}

规则按安全优先级处理:deny 高于 askask 高于 allow。也就是说,一个宽泛的拒绝规则不会被更窄的允许规则绕过。

规则语法

  • "Bash(pnpm test)":只匹配这个命令
  • "Bash(pnpm *)":匹配 pnpm 前缀命令
  • "Read(.env)":阻止读取当前目录及子目录里的 .env
  • "Edit(/src/**/*.ts)":匹配项目根目录下的 TypeScript 文件
  • "mcp__github__*":匹配某个 MCP server 暴露的工具

Bash 规则会理解常见的 shell 分隔符和子命令。比如只允许 Bash(git status),并不等于允许 git status && git push

权限模式

模式行为适用场景
default标准模式,首次使用需要审批的工具会询问入门使用、敏感项目
acceptEdits自动接受文件编辑和常见工作区文件操作日常编码迭代
plan读取文件和运行只读命令,不编辑源码代码探索、重构规划
auto在后台安全检查下自动批准更多工具调用长时间任务、减少频繁确认
dontAsk未预先允许的工具自动拒绝CI、脚本化、确定性流程
bypassPermissions跳过大多数权限提示仅限隔离容器或 VM

auto 仍是偏激进的模式,适合你已经能接受自动化执行风险的环境。bypassPermissions 更进一步,不适合日常开发主机;如果要用,最好放在一次性容器、临时 worktree 或 VM 里。

切换权限模式

快捷键

在交互模式中按 Shift+Tab 可以在常用模式之间切换。具体循环顺序会随版本和配置变化,以终端底部显示为准。

如果你想让 bypassPermissions 出现在快捷键循环里,需要显式允许。

启动时指定

claude --permission-mode acceptEdits

也可以在 CI 或脚本里使用更严格的 dontAsk

claude -p "检查这次 diff 是否有安全问题" \
  --permission-mode dontAsk \
  --allowedTools "Read,Grep,Glob,Bash(git diff *)"

设为默认

~/.claude/settings.json 或项目的 .claude/settings.json 中配置:

{
  "permissions": {
    "defaultMode": "acceptEdits"
  }
}

Hooks 与权限

PreToolUse Hook 可以参与权限决策,比如拒绝危险命令、要求人工确认、给工具输入加额外校验。

权限规则适合表达稳定边界;Hook 适合表达项目里的动态逻辑,例如:

  • 阻止向生产数据库执行写入 SQL
  • 阻止编辑 .env、证书、私钥
  • 在写文件后自动运行格式化,但失败时提醒你

受保护路径与沙盒

Claude Code 会对关键路径、凭证文件、配置文件和 destructive shell 命令施加额外保护。具体规则会随版本、企业管理策略和沙盒配置变化,但下面这些区域应该默认当成高风险:

  • .git/
  • .claude/
  • .ssh/
  • shell 启动文件,如 .zshrc.bashrc
  • IDE、hook、容器和包管理器配置目录
  • 密钥、令牌、生产配置、数据库连接串

如果你需要让 Claude 在更大范围内操作,优先用沙盒、临时目录或独立 worktree 隔离风险,而不是简单把权限模式调到最宽。

On this page