配置权限
通过细粒度权限规则、模式和管理策略控制 Claude Code 可以访问和执行的操作。
Claude Code 支持细粒度权限。权限设置可纳入版本控制并分发给组织内开发者。
权限系统
| 工具类型 | 示例 | 需要批准 |
|---|---|---|
| 只读 | 文件读取、Grep | 否 |
| Bash 命令 | Shell 执行 | 是 |
| 文件修改 | 编辑/写入文件 | 是 |
管理权限
使用 /permissions 查看和管理权限,列出规则及来源 settings.json。
- Allow — 无需手动批准即可使用
- Ask — 使用时确认
- Deny — 禁止使用
按 deny → ask → allow 评估,先匹配先生效。
裸工具名如 Bash 会从 Claude 上下文中完全移除该工具。作用域规则如 Bash(rm *) 在尝试匹配调用时阻止。
权限由 Claude Code 客户端强制执行,而非模型。CLAUDE.md 影响 Claude 的意图;权限控制允许与否。
权限模式
在设置中设置 defaultMode。见 权限模式。
| 模式 | 说明 |
|---|---|
default | 每种工具首次使用时提示 |
acceptEdits | 自动接受范围内文件编辑及常见文件系统命令 |
plan | 只读探索;不编辑源文件 |
auto | 后台安全检查后自动批准(研究预览) |
dontAsk | 除非预批准否则自动拒绝 |
bypassPermissions | 跳过所有提示 — 仅容器/虚拟机 |
bypassPermissions 对 rm -rf / 和 rm -rf ~ 仍会提示。可在托管设置中将 permissions.disableBypassPermissionsMode 或 permissions.disableAutoMode 设为 "disable" 以阻止这些模式。
权限规则语法
格式:Tool 或 Tool(说明符)。
{
"permissions": {
"allow": [
"Bash(npm run *)",
"Bash(git commit *)",
"Bash(git * main)",
"Bash(* --version)"
],
"deny": [
"Bash(git push *)"
]
}
}Bash(*) 与 Bash 等价,匹配所有 Bash 命令。
Bash
Bash(npm run build)— 精确命令Bash(npm run test *)— 前缀匹配,*前有词界Bash(git *)— 可匹配多参数命令- 复合命令(
&&、|、;)— 各部分分别匹配 - 匹配前剥离
timeout、nice、nohup、stdbuf等包装 - 内置只读命令(
ls、grep、git status等)常免提示
拒绝整个 Bash 或 WebFetch 会使下一轮提示缓存失效。
Bash 中限制 URL 宜使用 WebFetch(domain:example.com)、拒绝 curl/wget 或 PreToolUse hook — Bash(curl http://github.com/*) 类模式不可靠。
Read 与 Edit
模式遵循 gitignore 风格锚点:
| 模式 | 含义 |
|---|---|
//path | 从文件系统根目录的绝对路径 |
~/path | 从主目录 |
/path | 相对于项目根 |
path 或 ./path | 相对于当前目录 |
Edit 适用于所有内置编辑工具。Read 适用于读取工具、@file 提及及 IDE 共享上下文。
符号链接:链接路径或目标任一侧命中 deny 即阻止。
WebFetch
WebFetch(domain:example.com) 匹配对该域名的请求。
MCP
mcp__puppeteer、mcp__puppeteer__* 或 mcp__puppeteer__puppeteer_navigate。
Agent(子代理)
在 allow 或 deny 数组中使用 Agent(Explore)、Agent(Plan)、Agent(my-custom-agent)。
用 hooks 扩展权限
PreToolUse hook 在权限提示前运行。hook 拒绝(退出码 2)在评估规则前即阻止。即使 hook 返回 allow,deny/ask 规则仍生效。
工作目录
默认访问启动目录。用 --add-dir、/add-dir 或 permissions.additionalDirectories 扩展。
附加目录主要授予文件访问,非完整 .claude/ 配置(例外:skills 热重载、部分插件设置,及 CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1 时的 CLAUDE.md)。
权限与沙箱的交互
- 权限 — Claude Code 可使用哪些工具与路径
- 沙箱 — 对 Bash 及子进程的 OS 级限制
二者结合实现纵深防御。默认 autoAllowBashIfSandboxed: true 时,沙箱内 Bash 可无逐命令提示;显式 deny 仍生效。
设置优先级
- 托管(不可覆盖)
- 命令行(
--allowedTools、--disallowedTools) - 本地(
.claude/settings.local.json) - 项目(
.claude/settings.json) - 用户(
~/.claude/settings.json)
任一层 deny 则其他层无法 allow。
权限规则合并;任一作用域的 deny 都会阻止,即使另一作用域 allow。