第 10 章 权限与安全
...
❓ 引导问题:六种权限模式分别适用什么场景?权限规则语法如何写?自动模式(Auto Mode)如何工作?沙箱和权限是什么关系?
📖 10.1 权限系统概述
Claude Code 的权限系统将操作分为三类,不同类型的操作有不同的默认权限策略:
| 工具类型 | 示例 | 是否需要批准 | 永久允许行为 |
|---|---|---|---|
| 只读操作 | 文件读取、Grep 搜索 | 否 | 不适用 |
| Bash 命令 | Shell 命令执行 | 是 | 每个项目目录和命令永久有效 |
| 文件修改 | Edit/Write 文件 | 是 | 直到会话结束 |
三种权限动作:
| 动作 | 效果 | 适用场景 |
|---|---|---|
allow | 无需审批,直接自动运行 | 低风险、高频操作(如 git status、npm run build) |
ask | 弹出审批提示,由你决定 | 有一定风险的操作(如文件写入、未知命令) |
deny | 直接阻止,不执行也不提示 | 明确不允许的危险操作(如 git push、rm -rf) |
⚠️ 规则优先级:deny → ask → allow。 第一个匹配的规则获胜,deny 始终优先。
📖 10.2 六种权限模式
| 模式 | 描述 | 适用场景 |
|---|---|---|
default | 标准行为:首次使用每个工具时提示权限 | 入门学习、敏感工作需完全监督 |
acceptEdits | 自动接受文件编辑权限(受保护目录除外) | 迭代正在审查的代码 |
plan | Plan Mode:只能分析,不能修改文件或执行命令 | 探索代码库、规划重构 |
auto | 自动批准工具调用,后台安全检查(研究预览) | 长时运行任务、减少提示疲劳 |
dontAsk | 自动拒绝工具调用(除非权限规则预先批准) | 锁定环境、CI 管道 |
bypassPermissions | 跳过权限提示(受保护目录写入仍会提示) | 仅限隔离容器和 VM |
⚠️ 受保护目录:无论模式如何,对
.git、.vscode、.idea、.husky和.claude的写入永远不会自动批准(除了.claude/commands、.claude/agents和.claude/skills)。
切换方式
- 会话期间:按
Shift+Tab循环切换default→acceptEdits→plan→auto - 启动时指定:
claude --permission-mode plan - 配置文件持久化:
"permissions": { "defaultMode": "acceptEdits" }
📖 10.3 权限规则语法
基本格式
{
"permissions": {
"allow": ["Bash", "WebFetch", "Read"],
"ask": ["Edit"],
"deny": ["Bash(rm *)", "Bash(git push *)"]
}
}
通配符模式(Bash 命令)
| 规则 | 匹配范围 |
|---|---|
Bash(npm run *) | npm run build、npm run test 等 |
Bash(git commit *) | git commit -m "..." 等 |
Bash(git * main) | git checkout main、git merge main |
Bash(* --version) | 任何带 --version 参数的命令 |
文件路径(Read/Edit)
| 模式前缀 | 含义 | 示例 |
|---|---|---|
//path | 绝对路径(文件系统根) | Read(//Users/alice/secrets/**) |
~/path | 主目录路径 | Read(~/Documents/*.pdf) |
/path | 相对于项目根目录 | Edit(/src/**/*.ts) |
path 或 ./path | 相对于当前目录 | Read(*.env) |
其他工具
- WebFetch:
WebFetch(domain:github.com)按域名控制 - MCP:
mcp__puppeteer允许特定服务器的所有工具,mcp__puppeteer__puppeteer_navigate允许特定工具 - Agent:
Agent(Explore)、Agent(Plan)控制子代理使用
📖 10.4 自动模式(Auto Mode)
自动模式通过模型驱动的分类器替代人工审批,在效率和安全之间找平衡。
工作原理
操作请求 → 匹配 allow/deny 规则 → 只读操作自动批准 →
→ 工作目录文件编辑自动批准(受保护目录除外)→
→ 其余发送到分类器判定 → 阻止时 Claude 收到原因并尝试替代方法
防御层次:
- 服务器端探针扫描传入的工具结果
- 分类器永远不会看到工具结果,防止注入指令影响决策
分类器默认行为
| 默认阻止 | 默认允许 |
|---|---|
下载和执行代码(curl | bash 等) | 工作目录中的本地文件操作 |
| 向外部端点发送敏感数据 | 安装声明的依赖项 |
| 生产部署和迁移 | 读取 .env 并发送凭证到匹配的 API |
| 云存储上的大规模删除 | 只读 HTTP 请求(GET) |
| 授予 IAM 或仓库权限 | 推送到启动的分支 |
| 修改共享基础设施 | — |
| 破坏性源代码控制操作(强制推送等) | — |
可用条件:仅限 Team/Enterprise/API 计划,需 Claude Sonnet 4.6 或 Opus 4.6,管理员必须启用。
回退机制
分类器在一行中阻止操作 3 次,或一个会话中总共阻止 20 次,自动模式暂停,恢复为每操作提示。
📖 10.5 沙箱(Sandboxing)
沙箱和权限是互补的安全层:
| 方面 | 权限 | 沙箱 |
|---|---|---|
| 控制对象 | Claude 可以使用哪些工具 | Bash 可访问的文件系统和网络 |
| 评估时机 | 工具运行前 | 仅 Bash 命令及其子进程 |
| 适用范围 | 所有工具 | 仅 Bash 命令 |
启用:/sandbox 命令,会打开菜单选择沙箱模式。
{
"sandbox": {
"enabled": true,
"filesystem": {
"allowWrite": ["/tmp/build", "~/projects/myapp/**"],
"denyRead": ["~/secrets/**"]
},
"network": {
"httpProxyPort": 8080
}
}
}
💡 权限控制「Claude 能不能做」,沙箱控制「做了也跑不掉」。两者配合使用,实现纵深防御。
📖 10.6 实用配置示例
保守模式(所有操作都需审批)
{ "permissions": { "defaultMode": "default" } }
开发常用配置(日常推荐)
{
"permissions": {
"defaultMode": "acceptEdits",
"allow": [
"Bash(git status *)", "Bash(git log *)", "Bash(git diff *)",
"Bash(npm run *)", "Bash(npm test *)", "Bash(ls *)", "Bash(grep *)"
],
"deny": [
"Bash(rm *)", "Bash(git push *)", "Bash(mkdir / *)", "Edit(*.env)"
]
}
}
锁定环境(CI 管道)
{
"permissions": {
"defaultMode": "dontAsk",
"allow": ["Read(*)", "Bash(npm run build *)", "Bash(npm test *)"],
"deny": ["Edit(*)", "Bash(git *)", "Bash(curl *)", "Bash(ssh *)"]
}
}
📖 10.7 设置优先级
从高到低:
- 托管设置(管理员控制,不可被覆盖)
- 命令行参数(临时会话覆盖)
- 本地项目设置(
.claude/settings.local.json) - 共享项目设置(
.claude/settings.json) - 用户设置(
~/.claude/settings.json)
⚠️ 关键规则:如果工具在任何级别被 deny,没有其他级别可以 allow 它。
📖 10.8 安全最佳实践
- 从最小权限开始:先 restrictive,根据需要扩展
- 同时启用沙箱:提供 OS 级别额外保护
- 保护敏感文件:用
deny规则阻止访问.env、密钥文件等 - 限制网络访问:仅允许必要域名,防止数据泄露
- 避免 bypassPermissions:仅在隔离环境(容器、VM)中使用
- 使用 auto 模式的 soft_deny:提供安全指导而不过度限制
- 定期审查:查看沙箱违规尝试和被拒绝的操作
⚠️ 安全警告:永远不要在没看 Diff 的情况下直接确认权限请求。Claude 很强,但依然可能产生错误或幻觉。
📖 10.XX 要点总结
- 六种权限模式:从 default(最安全)到 bypassPermissions(最开放),日常推荐 acceptEdits
- 权限规则:格式
Tool(specifier),支持通配符,deny 始终优先于 allow - 自动模式使用模型分类器替代人工审批,阻止危险操作但允许安全操作
- 沙箱与权限互补:权限控制工具使用,沙箱限制 OS 级访问,纵深防御
- 设置优先级:托管 > 命令行 > 项目本地 > 项目共享 > 用户设置,deny 不可被覆盖






