权限系统——给AI装上"安全刹车"

你有没有想过,当你让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(禁止)
分类器基于什么判断?
关键词匹配:rm、drop table、DELETE 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管家。
文章写到这儿,希望对你理解权限系统有所帮助。觉得有收获的话,欢迎点赞转发。关注梦兽编程,咱们下篇见。
