权限与模式
Claude Code 权限规则、allow/ask/deny 顺序、权限模式、Bash/Read/Edit/WebFetch/MCP 规则写法和安全边界。
Claude Code 的权限系统决定它能不能执行命令、改文件、访问路径和调用工具。CLAUDE.md 是建议,权限规则才是边界。
#默认安全模型
| 工具类型 | 示例 | 默认是否需要确认 |
|---|---|---|
| 只读工具 | Read、Grep、Glob、只读 shell | 通常不需要 |
| Bash 命令 | npm test、git push、脚本 | 需要 |
| 文件修改 | Edit、Write、NotebookEdit | 需要 |
点击“Yes, don't ask again”后,Claude Code 会把规则保存到当前项目上下文或设置文件。Bash 命令通常按项目和命令保存,文件编辑自动批准通常只到当前会话结束。
#规则顺序
规则有三类:
allow:不用再问ask:必须询问deny:直接禁止
评估顺序固定:
- deny
- ask
- allow
所以 deny 永远不能被更具体的 allow 例外绕过。想做“默认禁止,只允许少数命令”,不要用一个大 deny 再加 allow,而是用 dontAsk 模式配合 allow。
{
"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 会识别复合命令,每个子命令都要独立通过规则。
{
"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 会把部分只读命令视为安全,例如 ls、cat、pwd、grep、find、wc、只读 git。如果你也想让这些命令询问,添加 ask 或 deny。
#Read/Edit 路径模式
| 模式 | 锚点 | 示例 |
|---|---|---|
//path | 文件系统绝对路径 | Read(//home/alex/secrets/**) |
~/path | 用户 home | Read(~/.zshrc) |
/path | settings 来源目录 | Edit(/src/**) |
path 或 ./path | 当前工作目录 | Read(./.env) |
在用户级 ~/.claude/settings.json 写 Read(/secrets/) 时,它指向 ~/.claude/secrets/,不是每个项目的 secrets。要跨项目阻止,用 // 或 ~/。
#WebFetch 与网络
{
"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 规则
{
"permissions": {
"allow": [
"mcp__github__get_*"
],
"ask": [
"mcp__database__write_*"
],
"deny": [
"mcp__*"
]
}
}注意:裸的 mcp__* deny 会移除所有 MCP 工具。这样安全,但也会让 Claude 根本看不到这些工具。
#建议配置
#个人开发
{
"permissions": {
"allow": [
"Bash(npm run lint)",
"Bash(npm run typecheck)",
"Bash(git status)",
"Bash(git diff *)"
],
"deny": [
"Read(//**/.env)",
"Read(//**/.env.*)"
]
}
}#团队仓库
{
"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

