核心系统
权限与安全
三层纵深防御,让 AI 既强大又安全
~7 分钟阅读
0
防御层级
0
权限模块文件
0+
安全代码行数
Claude Code 能执行命令、修改文件、访问网络。这很强大,但也意味着它可能做出危险操作。权限系统就是它的安全锁 — 确保每一个操作都经过审核。
就像机场安检的三道关卡:
🔬 X 光机(ML 分类器) — 自动扫描,快速放行安全物品,拦截明显危险品 👮 安检员(规则引擎) — 按规章制度(你的自定义规则)逐条检查 ✋ 旅客确认(用户对话框) — 不确定的情况下让你自己决定
三层防线 #
点击节点查看每层的工作方式
工具调用请求
↓评估
ML 分类器
↓不确定
规则引擎
↓无匹配
用户确认
↓决定
执行/拒绝
权限模拟器 #
选一个命令,看三层防线如何判断
权限模拟器 — 选择一个命令,查看三层防线的判断过程
Bash 安全分析 #
Shell 命令如何被拆解和分析
当 Claude 想运行一个 Shell 命令时,系统不只是看命令的文字 — 它会像编译器一样把命令拆解成语法树(AST)。
比如 `cat file.txt | grep secret > output.txt`,系统会识别出:这是一个管道命令,读了一个文件,过滤内容,然后写入另一个文件。它会分析每个子命令的风险等级,检测是否有命令注入、路径穿越等安全隐患。
规则系统 #
用户如何自定义安全策略
"allow": ["git *", "npm test"] 总是允许 git 和 npm test 命令 "deny": ["rm -rf *", "sudo *"] 禁止删除和 sudo 命令 CLI: --always-allow-bash 命令行参数:允许所有 Bash 命令(危险!) "permissionMode": "auto" 自动模式:ML 分类器做所有决策 核心代码 #
三层权限检查的简化实现
src/permissions.ts权限入口
第 1 步 / 共 5 步1// src/permissions.ts — Permission entry point
2export async function hasPermissionsToUseTool(
3 tool: Tool,
4 input: ToolInput,
5 context: PermissionContext
6): Promise<PermissionDecision> {
7 const decision = await (
8 tool, input, context
9 );
10
11 // Track consecutive denials for safety monitoring
12 if (decision.allowed) {
13 consecutiveDenials = 0;
14 } else {
15 consecutiveDenials++;
16 }
17
18 // In 'dontAsk' mode, convert 'ask' to 'deny'
19 if (context.permissionMode === "dontAsk"
20 && decision.behavior === "ask") {
21 return { allowed: false, reason: "dontAsk" };
22 }
23
24 return decision;
25}
每个工具调用都经过 hasPermissionsToUseTool()。它用拒绝跟踪包装内部检查 — 如果工具被允许,连续拒绝计数器重置。在 'dontAsk' 模式下被拒绝时,'ask' 决策被静默转换为 'deny'。
点击高亮的函数名跟踪调用链