深度

Claude Code 权限系统深度解析:规则语法、5 种权限模式与 Hooks 扩展

Claude Code 权限系统完整解析:三层工具类型(只读/Bash/文件修改)审批规则、/permissions 管理界面(Allow/Ask/Deny 规则 deny→ask→allow 优先顺序)、5 种权限模式(default/acceptEdits/plan/dontAsk/bypassPermissions 及禁用方式)、权限规则语法(Tool/Tool(specifier)/通配符/空格边界规则/Shell 操作符感知)、四种路径前缀格式(//绝对路径/~/home/项目根/相对)、MCP 工具和 Agent 权限规则、WebFetch 网络控制局限性(无法阻止 Bash curl)及三种可靠 URL 过滤方案、PreToolUse Hooks 扩展权限、工作目录扩展(--add-dir/additionalDirectories),以及权限与沙箱互补关系和两个配置示例。

2026/3/95分钟 阅读ClaudeEagle

Claude Code 的权限系统提供精细的工具访问控制——从允许特定 git 命令到阻止所有网络请求,支持项目级、用户级和企业托管三层配置,可提交到版本控制共享给整个团队。

权限层级

工具类型示例首次使用是否需要审批"不再询问"行为
只读文件读取、Grep不适用
Bash 命令Shell 执行按项目目录和命令永久记住
文件修改Edit/Write 文件会话结束前有效

管理权限

/permissions

列出所有权限规则及其来源的 settings.json 文件。

  • Allow 规则:免审批直接使用工具
  • Ask 规则:使用工具时弹出确认对话框
  • Deny 规则:阻止使用工具

规则评估顺序deny → ask → allow,第一个匹配规则胜出(Deny 始终优先)。

5 种权限模式

模式defaultMode说明
Standard(默认)default首次使用每个工具时提示
Auto accept editsacceptEdits自动接受文件编辑权限
Plan Modeplan只能分析,不能修改文件或执行命令
Don't AskdontAsk自动拒绝工具(除非已预先批准)
BypassbypassPermissions跳过所有权限提示(仅限隔离环境)

bypassPermissions 会禁用所有权限检查,仅在容器/VM 等隔离环境中使用。管理员可通过 disableBypassPermissionsMode: "disable" 禁止此模式。

权限规则语法

格式:ToolTool(specifier)

匹配工具所有用法

Bash # 所有 Bash 命令 WebFetch # 所有网络请求 Read # 所有文件读取

Bash(*) 等同于 Bash

精细控制(带 specifier)

Bash(npm run build) # 精确匹配命令 Read(./.env) # 匹配当前目录的 .env WebFetch(domain:example.com) # 仅限 example.com

通配符模式(Bash)

json
{
  "permissions": {
    "allow": [
      "Bash(npm run *)",
      "Bash(git commit *)",
      "Bash(git * main)",
      "Bash(* --version)",
      "Bash(* --help *)"
    ],
    "deny": [
      "Bash(git push *)"
    ]
  }
}

空格边界规则(重要)Bash(ls *) 匹配 ls -la匹配 lsof(空格前的 * 强制单词边界);Bash(ls*) 同时匹配两者。

Shell 操作符感知Bash(safe-cmd *) 不会允许 safe-cmd && other-cmd,Claude Code 能识别 && 等操作符。

Read / Edit 规则的路径格式

前缀含义示例
//path从文件系统根的绝对路径Read(//Users/alice/secrets/**)
~/path相对于 home 目录Read(~/Documents/*.pdf)
/path相对于项目根目录Edit(/src/**/*.ts)
path./path相对于当前目录Read(*.env)

注意:/Users/alice/file 不是绝对路径,是相对项目根!使用 //Users/alice/file 才是绝对路径。

* 匹配单目录文件,** 跨目录递归匹配。

MCP 工具权限

mcp__puppeteer # puppeteer 服务器的所有工具 mcp__puppeteer__* # 同上(通配符写法) mcp__puppeteer__puppeteer_navigate # 特定工具

Agent 权限

json
{
  "permissions": {
    "deny": ["Agent(Explore)"]
  }
}

禁用特定 Subagent(如 Explore、Plan 或自定义 Agent)。

WebFetch 的网络控制注意事项

WebFetch(domain:github.com) 限制 WebFetch 工具,但不防止 Bash 中的 curl/wget 访问网络

更可靠的 URL 过滤方案:

  1. 用 deny 规则阻止 curlwget 等命令,配合 WebFetch(domain:...) 限制允许域名
  2. 使用 PreToolUse Hooks 验证 Bash 命令中的 URL
  3. 在 CLAUDE.md 中说明允许的 curl 模式

Bash 权限规则对命令参数的约束是脆弱的——Bash(curl http://github.com/ *) 无法防止 curl https://github.com/...(不同协议)或 URL=http://... && curl $URL(变量展开)。

用 Hooks 扩展权限

PreToolUse Hooks 在权限系统之前运行,输出可以决定是否批准或拒绝工具调用:

bash
#!/bin/bash
# 阻止 rm -rf 命令
COMMAND=$(jq -r '.tool_input.command')
if echo "$COMMAND" | grep -q 'rm -rf'; then
  jq -n '{
    hookSpecificOutput: {
      hookEventName: "PreToolUse",
      permissionDecision: "deny",
      permissionDecisionReason: "危险命令已被 Hook 拦截"
    }
  }'
else
  exit 0
fi

工作目录访问控制

默认:Claude 有权访问启动目录下的文件。扩展访问方式:

bash
# 启动时
claude --add-dir /path/to/other/dir

# 会话中
/add-dir /path/to/other/dir
json
// settings.json 永久配置
{
  "additionalDirectories": ["/path/to/shared/libs"]
}

权限与沙箱的关系

机制作用范围实现方式
权限系统所有工具(Bash/Read/Edit/WebFetch/MCP/Agent)Claude Code 应用层控制
沙箱(Sandboxing)仅 Bash 工具及其子进程OS 级别强制(macOS Seatbelt / Linux bubblewrap)

两者互补:权限系统决定「能不能用」,沙箱决定「能访问哪里」。

配置示例

开发环境(允许常用工具)

json
{
  "permissions": {
    "allow": [
      "Bash(npm *)",
      "Bash(git *)",
      "Bash(python *)",
      "WebFetch(domain:api.github.com)"
    ],
    "deny": [
      "Bash(rm -rf *)",
      "Bash(sudo *)"
    ]
  }
}

企业安全(最小权限)

json
// managed-settings.json
{
  "disableBypassPermissionsMode": "disable",
  "allowManagedPermissionRulesOnly": true,
  "permissions": {
    "allow": ["Bash(npm run test)", "Bash(npm run lint)"],
    "deny": ["WebFetch", "Bash(curl *)", "Bash(wget *)"]
  }
}

原文:Configure permissions - Claude Code Docs | 来源:Anthropic 官方文档

相关文章推荐

深度Claude Code 沙箱凭据保护体系再升级:v2.1.224 拒绝规则绕过漏洞与实践检查清单Claude Code v2.1.224 修复沙箱文件系统拒绝规则(denyRead 带结尾斜杠)在 Linux/macOS 上可被静默绕过的问题,提供实用的沙箱配置自检清单。2026/8/10深度Claude Code 沙箱凭据保护完全指南:从明文拒绝到 JWT 感知脱敏的演进之路梳理 Claude Code 沙箱凭据保护体系的四种模式——结构化脱敏、JWT 感知脱敏、AWS SigV4 重签名、文件级哨兵替换,帮你选择适合的安全策略。2026/8/7深度Claude Code v2.1.214 安全修复深度解析:六个权限检查绕过漏洞是如何被堵上的Claude Code v2.1.214 一次修复六个权限检查绕过问题,涉及路径规则、PowerShell、Bash 语法解析、zsh 特殊语法等,深度解读修复背后的安全逻辑。2026/8/6深度Claude Code v2.1.207 安全深度解析:插件 headersHelper Shell 注入漏洞修复始末深度解析 Claude Code v2.1.207 修复的插件系统 Shell 注入漏洞:${user_config.*} 在 Shell 形式命令中被拒绝,Hooks 需改用 exec 形式或环境变量,Monitors 和 headersHelper 需在脚本内部读取配置。同步解析关联的 pluginConfigs 读取来源收紧措施。2026/7/11深度Claude Code 安全强化速览:Auto Mode 防误删、后台通知防伪造双重防线解析深度解析 Claude Code v2.1.205 两项容易被忽略但意义重大的安全强化:Auto Mode 对变量值不明的 rm -rf 命令先询问再执行,以及后台任务通知明确标注「无真实人工输入」防止伪造批准被误信。分析两者背后共同的「默认保守」设计哲学。2026/7/10深度Claude Code 团队协作安全实践:MCP 服务器审批机制与工作区信任详解Claude Code v2.1.196 起引入的 MCP 服务器审批机制,确保克隆仓库无法自动获得已提交的 MCP 服务器信任。本文详解工作区信任模型如何防止供应链投毒攻击,并提供团队 Onboarding 安全检查清单。2026/7/6