你有没有想过,当你让Claude Code执行一个危险命令时,它是怎么拦住自己的?

比如说,你让它"清理一下临时文件",它会不会真的执行rm -rf /tmp/*?还是更狠的rm -rf /

答案是:它有一套权限系统,像汽车的ABS防抱死系统——正常情况让你自由驾驶,遇到危险自动介入。

今天咱们就拆开这套"安全刹车"看看。

图:权限系统像汽车ABS,危险时自动介入

三级权限架构

Claude Code的权限系统分三层,从粗到细:

第一层:用户配置(User Configuration)

用户在CLAUDE.md或配置文件中设置的规则:

alwaysAllow: ['FileRead', 'Grep']
alwaysDeny: ['Bash', 'FileDelete']
askBefore: ['FileWrite', 'FileEdit']

这是最粗粒度的控制——用户明确说"这个可以做"、“这个不能做”、“这个要问我”。

第二层:工具级权限(Tool-level Permissions)

每个工具自己定义的checkPermissions方法:

checkPermissions(input, context) {
  if (input.command.includes('rm -rf /')) {
    return { behavior: 'deny', reason: '禁止删除根目录' };
  }
  if (this.isReadOnly(input)) {
    return { behavior: 'allow' };
  }
  return { behavior: 'ask' };
}

这是中等粒度——根据工具的具体输入决定行为。

第三层:自动分类器(Auto Classifier)

YOLO(You Only Look Once)分类器,用AI来判断操作的安全性:

输入:命令文本
输出:safe / ask / deny

这是最细粒度——用AI来识别潜在风险。

图:三级权限架构,从粗到细

Always Allow/Deny:用户说了算

用户配置是最直接的控制方式。

alwaysAllow:这些工具可以直接使用,不需要确认。

- FileRead:读取文件是安全的
- Grep:搜索是安全的
- Glob:列出文件是安全的

alwaysDeny:这些工具根本不能用,被禁用。

- Bash:某些用户禁止执行命令
- FileDelete:某些用户禁止删除文件

askBefore:这些工具使用前需要询问用户确认。

- FileWrite:写入文件可能有风险
- FileEdit:编辑文件可能破坏代码

配置生效的方式:被deny的工具根本不会出现在给模型的工具列表中——模型根本不知道它存在。

YOLO分类器:AI判断AI

YOLO分类器是Claude Code最有趣的权限机制——用AI来判断AI的操作是否安全。

为什么叫YOLO?因为"You Only Look Once"——只看一次,快速判断。

工作原理:

输入:要执行的操作(如Bash命令)
特征提取:提取关键特征
分类模型:判断安全等级
输出:safe(安全)/ ask(询问)/ deny(禁止)

分类器基于什么判断?

关键词匹配rmdrop tableDELETE FROM等危险关键词

模式识别*通配符、--force强制标志等高风险模式

上下文分析:当前目录、用户权限、操作目标

历史学习:从过去的判断中学习(如果有反馈)

图:YOLO分类器快速判断操作安全性

实战:危险命令的拦截

看看权限系统如何处理这个请求:“删除临时文件”

模型生成rm -rf /tmp/*

第一层检查(用户配置)

  • BashTool在askBefore列表中 → 需要进一步检查

第二层检查(工具级权限)

  • BashTool检查命令:rm -rf /tmp/*
  • 不包含根目录/ → 不是绝对禁止
  • 但包含-f强制标志 → 标记为高风险

第三层检查(YOLO分类器)

  • 关键词:rm + -rf + /* = 高风险组合
  • 判断结果:ask(询问用户)

最终结果: AI显示确认对话框:“我要执行rm -rf /tmp/*,确认吗?” 用户可以选择:确认 / 取消 / 修改命令

权限提示词:让AI"知道"边界

权限不仅是技术检查,还要通过提示词让AI"知道"什么能做、什么不能做。

在系统提示词中,有专门的权限模块:

权限规则:
- 你可以读取任何文件
- 写入文件前必须确认用户意图
- 禁止执行删除根目录的操作
- 禁止访问敏感文件(如.ssh、.env)
- 如果不确定操作是否安全,请询问用户

这让模型在选择工具时就能自我约束——不是"想做就做",而是"先想想能不能做"。

失败关闭:默认最安全

权限系统遵循"失败关闭"原则:

  • 不确定时,默认询问用户
  • 判断错误时,默认拒绝
  • 配置冲突时,取最严格的规则

这就是为什么有时候AI"过于谨慎"——它宁可多问一句,也不想冒险。

权限的UX设计

权限检查不是技术问题,也是用户体验问题。

清晰的提示

我将执行以下操作:
rm -rf /tmp/*
这可能删除所有临时文件。
确认执行吗?

提供选项

  • 确认执行
  • 取消
  • 修改命令
  • 总是允许类似操作

记住选择:用户可以"记住这个选择",下次同样操作自动处理。

撤销机制:如果操作出错,提供撤销方法。

生产级安全的考虑

在企业环境使用AI工具,安全是关键:

审计日志:记录所有权限决策和执行的操作。

分级权限:不同用户/项目有不同的权限配置。

最小权限原则:只给AI必要的权限,不多给。

人工确认:关键操作必须人工确认,不能完全自动。

回滚机制:危险操作有回滚方案。

这对使用Claude Code的启示

理解权限系统,能让你:

配置合适的权限:在CLAUDE.md中设置alwaysAllow/alwaysDeny,减少不必要的询问。

理解为什么AI总是问:可能是权限配置过于严格。

安全地使用AI:不要给AI不必要的危险权限。

审计AI行为:通过日志了解AI执行了什么操作。

总结

权限系统是Claude Code的"安全刹车",通过三级架构(用户配置、工具级权限、YOLO分类器)在生产级安全和个人效率之间找到平衡。

关键设计:

  • 用户说了算:alwaysAllow/alwaysDeny
  • AI判断AI:YOLO分类器
  • 失败关闭:默认最安全
  • 好的UX:清晰的提示和选择

理解这一点,能让你安全、高效地使用AI工具。

下一篇,咱们聊聊CLAUDE.md与Hooks——打造你的专属AI管家。


文章写到这儿,希望对你理解权限系统有所帮助。觉得有收获的话,欢迎点赞转发。关注梦兽编程,咱们下篇见。