Claude Code 多层安全防护指南:为个人开发机搭建纵深权限体系
在终端中运行 Claude Code,它能够自主执行指令、修改文件、发起网络检索,强大的自动化能力大幅提升开发效率。但与此同时,默认配置会向 AI 开放项目目录读写权限以及部分外网访问权限,安全隐患随之而来。此前 GitHub 平台上已出现多起 Claude Code 误删本地文件的反馈,问题并非源于程序本身,而是默认权限配置的防护能力不足。
对于个人开发设备而言,安全风险与收益的平衡尤为关键。机器中往往存放着云服务账单凭证、各类平台密钥、接口令牌等敏感信息,一旦 AI 会话失控,不法分子便可借此作为跳板,发起横向渗透攻击。本文结合实际使用场景,为个人开发者打造一套完整的权限配置方案,层层筑牢安全防线,每一项设置均为硬性防护规则,而非仅供参考的建议。
层级零 核心准则:理清权限判定优先级
Claude Code 拥有清晰的权限裁决逻辑,是所有安全配置的基础,核心顺序为:Deny(拒绝)> Ask(询问)> Allow(允许)。
拒绝规则拥有最高优先级,会直接覆盖放行规则,且无法通过命令行参数绕过。在配置层级上,项目目录下的.claude/settings.json优先级高于局部配置,上级目录设置的拒绝规则,不会被下级目录的放行规则抵消。
安全配置底线
建议采用最小信任原则部署配置:先开启全局拒绝模式,再根据实际使用需求,逐一放开必要权限。这种方式远比批量添加放行规则、被动规避风险更加稳妥。
层级一 基础权限管控:配置文件构建第一道防线
首先需要纠正路径误区,Claude Code 的权限配置文件标准路径为.claude/settings.json,并非.code/settings.json,/permissions指令也默认读写该文件。
下文提供一套可直接落地的配置模板,遵循 “先拦截高危操作,再按需开放只读、编译类指令” 的思路,适配绝大多数个人开发场景。
json
// .claude/settings.json
{
"permissions": {
// 1. 优先拦截:破坏性操作、高权限指令、敏感文件读写、高危网络行为
"deny": [
// 危险删除指令
"Bash(rm -rf *)", "Bash(rm -rf /*)", "Bash(rm -rf ~/*)",
// 强制推送代码,覆盖远端版本
"Bash(git push --force*)", "Bash(git push -f*)",
// 管理员提权操作
"Bash(sudo *)",
// 下载脚本并执行,典型注入攻击链路
"Bash(curl *)|bash*)", "Bash(wget *)|bash*)",
"Bash(curl -o /tmp/* *)", "Bash(wget -O /tmp/* *)",
// 开放全域文件权限
"Bash(chmod 777 *)",
// 敏感配置与密钥文件,禁止读写
"Read(**/.env)", "Read(**/.env.*)", "Read(**/secrets/**)",
"Edit(**/.env*)", "Edit(**/secrets/**)",
// 远程连接跳板
"Bash(ssh *)", "Bash(scp *)",
// 磁盘分区、数据销毁类高危指令
"Bash(dd *)", "Bash(mkfs *)",
// 全局安装依赖,污染本地运行环境
"Bash(npm install -g *)", "Bash(yarn global add *)"
],
// 2. 灰色操作区:可根据需求开启,触发后人工确认
// "ask": [],
// 3. 按需放行:仅开放风险可控、日常高频使用的指令
"allow": [
// Git 本地查询、提交操作,不自动放行推送
"Bash(git status*)", "Bash(git diff*)", "Bash(git log*)",
"Bash(git add *)", "Bash(git commit -m*)",
// 项目代码校验、编译、测试指令
"Bash(npm run test*)", "Bash(npm run lint*)", "Bash(npm run build*)",
"Bash(pnpm test*)", "Bash(pnpm lint*)",
// 基础文件浏览指令
"Bash(ls *)", "Bash(find *)", "Bash(cat *)",
// 文件检索、读取能力
"Read(**)", "Glob(**)", "Grep(**)"
]
}
}
静态拦截规则是基础防护手段,拒绝规则作为硬性屏障,优先级高于放行规则,介于两者之间的操作会默认触发人工询问,从源头减少越权行为。
层级二 沙箱隔离:升级至操作系统级防护
单纯依靠权限黑白名单,无法抵御变量拼接、嵌套命令、别名调用等绕过手段。想要进一步提升安全性,就需要启用沙箱功能,将 Claude Code 运行在独立隔离环境中,限制文件系统与网络访问边界。
Anthropic 官方在云端服务中便采用沙箱隔离搭配 Git 代理的安全方案,同时建议本地用户:若需要开启高自主运行模式,优先使用隔离沙箱,切勿直接使用--dangerously-skip-permissions关闭权限校验。
本地沙箱参考配置,可直接部署使用:
json
{
"sandbox": {
"enabled": true,
// 禁止未受管控的指令跳出沙箱环境
"allowUnsandboxedCommands": false,
"filesystem": {
// 禁止读取本地密钥、证书、云服务凭证等敏感目录与文件
"denyRead": [
"~/.aws/credentials",
"~/.ssh",
"**/.env", "**/*.pem", "**/*.key", "**/*.p12"
]
},
"network": {
// 网络白名单,仅允许访问开发常用可信域名
"allowedDomains": [
"github.com",
"*.githubusercontent.com",
"registry.npmjs.org",
"pypi.org",
"registry.yarnpkg.com"
]
}
}
}
配置完成后,在终端执行/sandbox指令,查看运行状态,确认会话已成功进入沙箱模式。
层级三 自动模式:合理启用,坚守兜底规则
Auto Mode 目前处于预览阶段,该功能依托模型分类器替代人工审批,自动区分安全操作与高危操作。结合相关测试数据来看,在复杂歧义场景下,模型存在一定漏判概率,因此不可将其当作万能安全防护工具。
启用该功能必须遵守两项原则:
- 优先使用 Plan Mode(连续按下两次 Shift+Tab),查看完整执行计划,人工审核通过后再启动运行;
- Auto Mode 不会覆盖手动配置的
deny拦截规则,硬性防护始终生效。
个人设备安全使用规范
- 审核执行计划 → 临时开启 Auto Mode 运行任务 → 任务结束立即切回默认模式;
- 对于来源不明的代码仓库、未经安全审计的 MCP 配置,坚决不启用 Auto Mode。
层级四 钩子机制:代码级确定性门禁
相较于仅作为自然语言提示、容易在长会话中失效的CLAUDE.md,Hooks 属于代码级拦截机制,触发逻辑固定、执行稳定,安全防护能力更强。
下面提供三组必备钩子脚本,统一存放至.claude/hooks/目录下,分别实现高危命令拦截、包管理器规范、代码质量校验。
1. 前置拦截:Shell 命令防火墙
文件路径:.claude/hooks/pre_tool_use_bash_firewall.sh
bash
运行
#!/usr/bin/env bash
# 读取输入内容,识别并拦截高危指令
set -euo pipefail
INPUT=$(cat)
CMD=$(echo "$INPUT" | jq -r '.input.command // ""')
# 高危指令正则匹配规则
DANGER_PAT='(rm\s+-rf\s+[/~])|(curl.*\|.*bash)|(sudo\s)|(git push.*--force|git push.*-f)|(ssh\s|scp\s)'
if echo "$CMD" | grep -Pq "$DANGER_PAT"; then
echo '{"hookEventName":"PreToolUse","permissionDecision":"deny","reason":"Dangerous command blocked by firewall"}' >&2
exit 2
fi
echo "$INPUT"
2. 前置拦截:统一包管理器规范
文件路径:.claude/hooks/pre_tool_use_pkg_force.sh
bash
运行
#!/usr/bin/env bash
# 防止pnpm项目混用npm指令
set -euo pipefail
INPUT=$(cat)
TOOL=$(echo "$INPUT" | jq -r '.tool // ""')
CMD=$(echo "$INPUT" | jq -r '.input.command // ""')
if [[ "$TOOL" == "Bash" && "$CMD" == npm* && -f "pnpm-lock.yaml" ]]; then
echo '{"hookEventName":"PreToolUse","permissionDecision":"deny","reason":"pnpm-lock.yaml exists — use pnpm, not npm"}' >&2
exit 2
fi
echo "$INPUT"
3. 后置执行:代码质量自动校验
文件路径:.claude/hooks/post_tool_use_quality.sh
bash
运行
#!/usr/bin/env bash
# 文件编辑完成后自动格式化,规避循环触发问题
set -euo pipefail
INPUT=$(cat)
TOOL=$(echo "$INPUT" | jq -r '.tool // ""')
FILE=$(echo "$INPUT" | jq -r '.input.file_path // ""')
if [[ "$TOOL" =~ ^(Edit|Write)$ && -n "$FILE" ]]; then
npx prettier --write "$FILE" --log-level warn >&2 || true
fi
echo "$INPUT"
挂载钩子配置
在.claude/settings.json中添加配置,关联脚本与触发事件:
json
{
"hooks": {
"PreToolUse": [
{ "matcher": "Bash", "command": ".claude/hooks/pre_tool_use_bash_firewall.sh" },
{ "matcher": "Bash", "command": ".claude/hooks/pre_tool_use_pkg_force.sh" }
],
"PostToolUse": [
{ "matcher": "(Edit|Write)", "command": ".claude/hooks/post_tool_use_quality.sh" }
]
}
}
层级五 MCP 服务:警惕易被忽略的外部后门
MCP Server 是极易被忽视的安全风险点。当拉取外部代码仓库时,目录内可能附带预设的配置文件与 MCP 服务规则,若盲目点击 “信任该文件夹”,恶意配置将以当前设备权限运行,带来极大隐患。
个人开发机安全准则
- 面对陌生仓库,绝不一键信任目录配置;
- 严格管控全局 MCP 开关,仅启用经过安全审计的白名单服务;
- 优先手动部署自主可控的 MCP 服务,关闭项目配置自动启用功能;
- 在无交互的 CI 环境中,务必强化权限管控,避免静默放行高危操作。
完整部署目录结构
一套合格的纵深防御体系,需要各类配置协同生效,完整目录参考如下,同时做好本地配置文件隔离:
plaintext
your-repo/
├── .claude/
│ ├── settings.json # 权限、沙箱、钩子统一主配置
│ ├── settings.local.json # 个人本地专属配置,不提交至代码仓库
│ ├── hooks/
│ │ ├── pre_tool_use_bash_firewall.sh
│ │ ├── pre_tool_use_pkg_force.sh
│ │ └── post_tool_use_quality.sh
│ └── CLAUDE.md
└── .gitignore # 新增规则:.claude/settings.local.json
权限黑白名单、沙箱隔离、钩子脚本三大模块缺一不可,组合使用才能构建完整防护网,单一配置无法抵御多样化的安全攻击。
对于有高频调用、大规模使用 AI 大模型需求的个人开发者与企业团队,UseAIAPI 是高效省心的选择。平台整合了 Gemini、Claude、ChatGPT、DeepSeek 等多款主流前沿大模型,同时提供专业的企业级定制服务,接入流程简单便捷。平台推出实打实的优惠活动,全线服务最低可享官方定价 5 折,有效降低高强度开发、批量调用场景下的使用成本,助力各类项目稳定高效运行。