Claude Code

权限与模式

Claude Code 权限规则、allow/ask/deny 顺序、权限模式、Bash/Read/Edit/WebFetch/MCP 规则写法和安全边界。

Claude Code 的权限系统决定它能不能执行命令、改文件、访问路径和调用工具。CLAUDE.md 是建议,权限规则才是边界。

#默认安全模型

工具类型示例默认是否需要确认
只读工具Read、Grep、Glob、只读 shell通常不需要
Bash 命令npm testgit push、脚本需要
文件修改Edit、Write、NotebookEdit需要

点击“Yes, don't ask again”后,Claude Code 会把规则保存到当前项目上下文或设置文件。Bash 命令通常按项目和命令保存,文件编辑自动批准通常只到当前会话结束。

#规则顺序

规则有三类:

  • allow:不用再问
  • ask:必须询问
  • deny:直接禁止

评估顺序固定:

  1. deny
  2. ask
  3. allow

所以 deny 永远不能被更具体的 allow 例外绕过。想做“默认禁止,只允许少数命令”,不要用一个大 deny 再加 allow,而是用 dontAsk 模式配合 allow。

.claude/settings.json
{
  "permissions": {
    "allow": [
      "Bash(npm run lint)",
      "Bash(npm run test *)",
      "Read(./docs/**)"
    ],
    "ask": [
      "Bash(git push *)"
    ],
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)"
    ]
  }
}

#权限模式

模式说明适合场景
default标准模式,需要时询问日常默认
acceptEdits自动接受文件编辑和常见文件系统操作个人项目、有 git 兜底
plan只读计划,不改源文件大改动前研究
auto自动模式,带后台安全分类器研究预览,谨慎使用
dontAsk未预批准的工具自动拒绝锁死 CI 或脚本
bypassPermissions跳过大多数权限提示仅容器或 VM

命令行启动:

claude --permission-mode plan
claude --permission-mode acceptEdits

会话内可用 Shift + Tab/permissions 调整。

bypassPermissions 会跳过很多敏感目录的提示,例如 .git.claude.vscode.husky 等。只在隔离容器、一次性 VM、可恢复环境里使用。

权限模式只决定工具能不能运行。命令运行后的文件系统、网络和凭据边界,需要配合 沙箱与隔离环境。企业统一下发规则见 企业网络与集中管控

#规则语法

权限规则写成:

Tool
Tool(specifier)
规则作用
Bash匹配所有 Bash
Bash(npm run build)精确匹配命令
Bash(npm run *)匹配前缀
Read(./.env)阻止或允许读当前目录 .env
Edit(/src/**)匹配 settings 来源目录下的 src
WebFetch(domain:example.com)匹配指定域名
mcp__github__get_*匹配 GitHub MCP server 的 get 工具

#Bash 规则

Bash 支持 * 通配。Claude Code 会识别复合命令,每个子命令都要独立通过规则。

.claude/settings.json
{
  "permissions": {
    "allow": [
      "Bash(npm run *)",
      "Bash(git status)",
      "Bash(git diff *)",
      "Bash(* --version)"
    ],
    "deny": [
      "Bash(git push *)",
      "Bash(rm -rf *)"
    ]
  }
}

Bash(ls *)Bash(ls*) 不一样:前者需要 ls 后有空格或结束,后者也可能匹配 lsof

Claude Code 会把部分只读命令视为安全,例如 lscatpwdgrepfindwc、只读 git。如果你也想让这些命令询问,添加 askdeny

#Read/Edit 路径模式

模式锚点示例
//path文件系统绝对路径Read(//home/alex/secrets/**)
~/path用户 homeRead(~/.zshrc)
/pathsettings 来源目录Edit(/src/**)
path./path当前工作目录Read(./.env)

在用户级 ~/.claude/settings.jsonRead(/secrets/) 时,它指向 ~/.claude/secrets/,不是每个项目的 secrets。要跨项目阻止,用 //~/

#WebFetch 与网络

.claude/settings.json
{
  "permissions": {
    "allow": [
      "WebFetch(domain:docs.example.com)",
      "WebFetch(domain:*.example.com)"
    ],
    "deny": [
      "Bash(curl *)",
      "Bash(wget *)"
    ]
  }
}

只限制 WebFetch 不等于限制网络。如果 Bash 允许,Claude 仍可以用 curl 或脚本访问网络。需要严格网络边界时,配合 Bash deny、Hook 或系统 sandbox。

#MCP 规则

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__github__get_*"
    ],
    "ask": [
      "mcp__database__write_*"
    ],
    "deny": [
      "mcp__*"
    ]
  }
}

注意:裸的 mcp__* deny 会移除所有 MCP 工具。这样安全,但也会让 Claude 根本看不到这些工具。

#建议配置

#个人开发

~/.claude/settings.json
{
  "permissions": {
    "allow": [
      "Bash(npm run lint)",
      "Bash(npm run typecheck)",
      "Bash(git status)",
      "Bash(git diff *)"
    ],
    "deny": [
      "Read(//**/.env)",
      "Read(//**/.env.*)"
    ]
  }
}

#团队仓库

.claude/settings.json
{
  "permissions": {
    "ask": [
      "Bash(git push *)",
      "Bash(npm publish *)"
    ],
    "deny": [
      "Read(./production/**)",
      "Edit(./production/**)"
    ]
  }
}

#官方参考

Support / 支持

Need help? / 需要帮助?

接入、计费与模型异常可邮件联系;服务可用性以状态页为准。For setup, billing, or model issues, email us. Check the status page for uptime.

也可使用右下角微信 / QQ 客服 · WeChat / QQ support is available at the bottom right