权限与安全
控制 Claude 的权限——文件访问、工具许可和沙箱化运行。
权限模式
Claude Code 共有 6 种权限模式。Shift + Tab 默认在 default → acceptEdits → plan 三档之间循环;启用 auto 和 bypassPermissions 后会插入到 plan 之后。dontAsk 不参与循环,需要用 --permission-mode 显式指定。
- default — Claude 在每次写入文件或执行 shell 命令前征求许可。起始模式。
- acceptEdits — 文件编辑及常见文件系统命令(
mkdir、touch、mv、cp、rm等)自动通过;其他工具仍会提示。 - plan — Claude 可以读文件和跑 shell 探索代码库,但不会修改源码。其他工具的权限提示与
default一致。详见 计划模式。 - auto — 独立分类器模型在后台审查操作。需要 Claude Code v2.1.83+、受支持模型,以及组织侧可能要求的 admin enablement。Anthropic API 默认可用;Bedrock、Vertex AI 和 Microsoft Foundry 需要设置
CLAUDE_CODE_ENABLE_AUTO_MODE=1,且当前只支持 Opus 4.7 或 Opus 4.8。 - dontAsk — 自动拒绝
permissions.allow之外的所有操作,用于锁死的 CI。 - bypassPermissions — 全部检查关闭,只在容器 / VM 等可控环境使用。
使用 --permission-mode 标志在启动时指定模式:
claude --permission-mode plan # 探索,不修改
claude --permission-mode acceptEdits # 跳过文件编辑提示
claude --permission-mode auto # 后台分类器
claude --permission-mode dontAsk # 锁死 CI完全无人值守(CI、脚本)且不走分类器的场景,用 --dangerously-skip-permissions —— 等价于 --permission-mode bypassPermissions,仅在你能控制输入的沙箱环境使用。
配置允许的工具
精细控制在 .claude/settings.json 中。permissions 对象包含 allow、deny 和 ask 数组:
{
"permissions": {
"allow": [
"Read",
"Glob",
"Grep",
"Bash(npm run lint)",
"Bash(npm test)",
"Bash(git status)",
"Bash(git diff)",
"Bash(git *)"
],
"deny": [
"Bash(rm -rf *)"
]
}
}deny 始终覆盖 allow。对于 Bash,可以用 glob 语法限定到特定命令——Bash(npm test) 仅允许该命令;Bash(git *) 匹配任意 git 子命令。
当某个动作有时可以接受、但仍需要保持可见时,用 ask:
{
"permissions": {
"ask": ["Bash(npm install *)", "Edit"]
}
}目录与文件限制
使用 permissions.additionalDirectories 或 CLAUDE.md 指令来限制访问范围:
## 约束
- 禁止修改 src/ 和 tests/ 以外的文件
- 禁止读写 .env、.env.local 或任何凭证文件
- 禁止运行 rm -rf 或任何破坏性 shell 命令要硬性执行,使用 PreToolUse hook 来拒绝对非批准目录的写入。CLAUDE.md 指令是尽力而为的;hooks 是确定性的。
也可以扩展 Claude 允许访问的目录范围(超出项目根目录):
{
"permissions": {
"additionalDirectories": ["/shared/libs", "~/design-tokens"]
}
}对 additionalDirectories 的修改在当前运行的会话中立即生效。
Claude Code 也会保护凭证和系统文件等敏感路径。把它当作兜底,不要用它替代高风险仓库中的显式 deny rules 和 hooks。
沙箱化会话
要获得最大隔离性,在容器中运行 Claude:
docker run -it -v $(pwd):/workspace -w /workspace \
node:20 npx @anthropic-ai/claude-code --dangerously-skip-permissions何时使用沙箱:
- 在不受信任的代码库上运行
- CI/CD 管道中 Claude 生成或修改代码
- 需要可复现性的评估和基准测试
在容器内,--dangerously-skip-permissions 是安全的,因为影响范围限于容器文件系统。
最佳实践
- 从严到宽。 从 default 模式开始,显式白名单你信任的命令。
- 项目级设置。 将
.claude/settings.json放入仓库,团队成员共享相同权限。 - Settings 优先级。 从高到低:企业策略(
managed-settings.json,IT 下发)> 命令行参数 > 本地项目(.claude/settings.local.json,gitignored)> 共享项目(.claude/settings.json)> 用户级(~/.claude/settings.json)。Managed settings 可在组织级别锁死bypassPermissions和auto模式。注意:defaultMode: "auto"只从用户级或 managed settings 生效,不会从提交到仓库的项目 settings 生效。 - 用 hooks 审计。 使用 Hooks 记录或阻止工具调用。
PreToolUsehook 可以强制执行 CLAUDE.md 无法保证的策略。 - 使用
deny进行硬性阻断。deny规则覆盖allow,因此"deny": ["Bash(rm -rf *)"]是无条件执行的。
Agent 权限模型如何运作?
权限系统是自主 Agent 的核心设计模式。Claude Code 的分层方案——模式、允许/拒绝列表和 hooks——直接映射了生产级 Agent 架构中使用的最小权限原则。
延伸阅读
- Hooks — 使用生命周期钩子编程化执行权限
- CLAUDE.md 与记忆 — 设置项目级约束和规范
- Git 与并行会话 — 使用 worktrees 做文件隔离
- 工作流 — 查看权限在开发工作流中的实际应用
继续实践
权限与安全 的核心概念已经读完
如果你想把理解变成可复用的能力,可以到 AgentWay 继续练习