深度

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 环境变量与密钥管理:安全配置 API Key 和敏感信息的完整指南Claude Code 开发中安全处理环境变量和 API 密钥的完整指南:.env 文件规范、dotenv 与系统环境变量的区别、密钥轮换策略、防止密钥泄露到 Git、secrets 加密存储、生产环境的 Vault/AWS Secrets Manager 集成,以及 CLAUDE.md 安全规范配置。2026/3/16深度Claude Code 安全最佳实践:团队项目权限管理与敏感信息防泄漏Claude Code 安全使用完整指南:权限最小化配置(allow/deny 规则)、环境变量与密钥安全管理、CLAUDE.md 安全策略、企业团队管控配置(managed-settings.json)、CI/CD 密钥保护、防止敏感信息泄漏的 10 个规则。2026/3/15深度Claude Code Hooks 完整参考:18 种 Hook 事件、配置 Schema、退出码与异步 HookClaude Code Hooks 完整技术参考:18 种 Hook 事件生命周期表(SessionStart/InstructionsLoaded/UserPromptSubmit/PreToolUse/PermissionRequest/PostToolUse/PostToolUseFailure/Notification/SubagentStart/SubagentStop/Stop/TeammateIdle/TaskCompleted/ConfigChange/WorktreeCreate/WorktreeRemove/PreCompact/SessionEnd)、配置结构(settings.json 完整 Schema)、四种 Hook 类型(command/http/prompt/agent)字段详解、Matcher 模式(工具/Bash 命令/MCP 服务器)、输入 stdin JSON 格式、退出码含义(0/2/非零)和每种事件退出码 2 效果、结构化 JSON 输出(permissionDecision/updatedInput/Stop decision/SessionStart env 注入)、异步 Hook(background: true 不阻塞/适用场景)、Prompt-based Hook、WorktreeCreate 自定义 worktree 和调试方法。2026/3/9深度Claude Code 沙箱隔离深度指南:OS 级文件系统与网络隔离、Auto-allow 模式与逃生舱机制Claude Code 沙箱隔离深度指南:传统权限模型三大问题(审批疲劳/效率损失/自主性受限)、文件系统隔离(写入限当前目录/读取全系统/OS 级子进程继承)、网络隔离(代理服务器域名控制/allowManagedDomainsOnly)、三平台实现(macOS Seatbelt/Linux bubblewrap/WSL2 支持/WSL1 不支持)、安装启用(/sandbox 命令)、两种沙箱模式(Auto-allow 自动批准 vs Regular 标准流程)、settings.json 完整配置(allowWrite/denyWrite/denyRead/路径前缀/多层合并行为)、工具兼容性(kubectl/watchman/docker 处理方式)、逃生舱机制(dangerouslyDisableSandbox/allowUnsandboxedCommands 禁用)、三项安全收益和沙箱局限性。2026/3/9深度Claude Code 安全机制全解:权限架构、提示词注入防护、云端隔离与团队安全最佳实践Claude Code 安全机制完整解析:最小权限原则(默认只读/一次性批准/白名单)、四大内置保护(Sandbox/写入范围限制/权限疲劳缓解/Accept Edits)、八大提示词注入防护(权限系统/上下文分析/命令黑名单/隔离 Context/Fail-closed 匹配)、隐私保障与凭证加密、MCP 安全注意事项(Anthropic 不审计)、云端 VM 六大安全控制 vs Remote Control TLS 本地执行,以及个人和团队安全最佳实践。2026/3/6深度Claude Code 沙箱隔离完全指南:文件系统隔离、网络访问控制与 OS 级安全边界Claude Code 沙箱隔离完全指南:文件系统(默认读全机/写当前目录)和网络隔离机制、macOS Seatbelt 和 Linux bubblewrap OS 级执行、两种沙箱模式(Auto-allow/Regular 权限)、allowWrite/denyRead/denyWrite 路径配置、自定义网络代理,以及提示注入防护和已知安全限制。2026/3/3