第 10 章 权限与安全

Mr.Tong...
  • AI
  • Claude Code
大约 6 分钟

❓ 引导问题:六种权限模式分别适用什么场景?权限规则语法如何写?自动模式(Auto Mode)如何工作?沙箱和权限是什么关系?

📖 10.1 权限系统概述

Claude Code 的权限系统将操作分为三类,不同类型的操作有不同的默认权限策略:

工具类型示例是否需要批准永久允许行为
只读操作文件读取、Grep 搜索不适用
Bash 命令Shell 命令执行每个项目目录和命令永久有效
文件修改Edit/Write 文件直到会话结束

三种权限动作:

动作效果适用场景
allow无需审批,直接自动运行低风险、高频操作(如 git statusnpm run build
ask弹出审批提示,由你决定有一定风险的操作(如文件写入、未知命令)
deny直接阻止,不执行也不提示明确不允许的危险操作(如 git pushrm -rf

⚠️ 规则优先级:deny → ask → allow。 第一个匹配的规则获胜,deny 始终优先。

📖 10.2 六种权限模式

模式描述适用场景
default标准行为:首次使用每个工具时提示权限入门学习、敏感工作需完全监督
acceptEdits自动接受文件编辑权限(受保护目录除外)迭代正在审查的代码
planPlan Mode:只能分析,不能修改文件或执行命令探索代码库、规划重构
auto自动批准工具调用,后台安全检查(研究预览)长时运行任务、减少提示疲劳
dontAsk自动拒绝工具调用(除非权限规则预先批准)锁定环境、CI 管道
bypassPermissions跳过权限提示(受保护目录写入仍会提示)仅限隔离容器和 VM

⚠️ 受保护目录:无论模式如何,对 .git.vscode.idea.husky.claude 的写入永远不会自动批准(除了 .claude/commands.claude/agents.claude/skills)。

切换方式

  • 会话期间:按 Shift+Tab 循环切换 defaultacceptEditsplanauto
  • 启动时指定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 buildnpm run test
Bash(git commit *)git commit -m "..."
Bash(git * main)git checkout maingit merge main
Bash(* --version)任何带 --version 参数的命令

文件路径(Read/Edit)

模式前缀含义示例
//path绝对路径(文件系统根)Read(//Users/alice/secrets/**)
~/path主目录路径Read(~/Documents/*.pdf)
/path相对于项目根目录Edit(/src/**/*.ts)
path./path相对于当前目录Read(*.env)

其他工具

  • WebFetchWebFetch(domain:github.com) 按域名控制
  • MCPmcp__puppeteer 允许特定服务器的所有工具,mcp__puppeteer__puppeteer_navigate 允许特定工具
  • AgentAgent(Explore)Agent(Plan) 控制子代理使用

📖 10.4 自动模式(Auto Mode)

自动模式通过模型驱动的分类器替代人工审批,在效率和安全之间找平衡。

工作原理

操作请求 → 匹配 allow/deny 规则 → 只读操作自动批准 →
            → 工作目录文件编辑自动批准(受保护目录除外)→
            → 其余发送到分类器判定 → 阻止时 Claude 收到原因并尝试替代方法

防御层次

  1. 服务器端探针扫描传入的工具结果
  2. 分类器永远不会看到工具结果,防止注入指令影响决策

分类器默认行为

默认阻止默认允许
下载和执行代码(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 设置优先级

从高到低:

  1. 托管设置(管理员控制,不可被覆盖)
  2. 命令行参数(临时会话覆盖)
  3. 本地项目设置.claude/settings.local.json
  4. 共享项目设置.claude/settings.json
  5. 用户设置~/.claude/settings.json

⚠️ 关键规则:如果工具在任何级别被 deny,没有其他级别可以 allow 它。

📖 10.8 安全最佳实践

  1. 从最小权限开始:先 restrictive,根据需要扩展
  2. 同时启用沙箱:提供 OS 级别额外保护
  3. 保护敏感文件:用 deny 规则阻止访问 .env、密钥文件等
  4. 限制网络访问:仅允许必要域名,防止数据泄露
  5. 避免 bypassPermissions:仅在隔离环境(容器、VM)中使用
  6. 使用 auto 模式的 soft_deny:提供安全指导而不过度限制
  7. 定期审查:查看沙箱违规尝试和被拒绝的操作

⚠️ 安全警告:永远不要在没看 Diff 的情况下直接确认权限请求。Claude 很强,但依然可能产生错误或幻觉。


📖 10.XX 要点总结

  1. 六种权限模式:从 default(最安全)到 bypassPermissions(最开放),日常推荐 acceptEdits
  2. 权限规则:格式 Tool(specifier),支持通配符,deny 始终优先于 allow
  3. 自动模式使用模型分类器替代人工审批,阻止危险操作但允许安全操作
  4. 沙箱与权限互补:权限控制工具使用,沙箱限制 OS 级访问,纵深防御
  5. 设置优先级:托管 > 命令行 > 项目本地 > 项目共享 > 用户设置,deny 不可被覆盖

你认为这篇文章怎么样?

  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.14.1