首页/文章/Claude Code 会读项目里的密钥?在新加坡 Mac mini 上用 deny 规则挡住 .env

Claude Code 会读项目里的密钥?在新加坡 Mac mini 上用 deny 规则挡住 .env

· SgRent

默认能读,不等于应该读

把 Claude Code 放进真实项目后,很多人会先写一份 .claudeignore,以为密钥文件就安全了。实际常见情况是:

  1. Read 工具默认能打开 .env:模型要「看一眼配置」时,敏感行可能直接进上下文。
  2. .claudeignore 主要管索引/忽略范围:它并不等价于「禁止 Read」;忽略了,仍可能被显式读取。
  3. 口头叮嘱不可靠:聊天里说「别读密钥」,上下文一压缩,约定就可能不在眼前。
  4. 笔记本合盖就断:规则写到一半、验证做到一半,机器睡了或断线,配置没落稳。

要把「不能读」写成硬规则,并放在一台常开的新加坡 Mac mini 上长期生效。

Claude 账号由你自己开通并登录,请遵守 Anthropic 的服务条款与支持地区规则。本文只谈如何搭一个稳定合规的使用环境,不涉及共享或转卖账号。SgRent 与 Anthropic 没有官方合作关系。本文给出可落地的防护步骤,不能替代你自己的安全审计与密钥管理;正式语法以你所装 Claude Code 版本的官方文档为准。

准备清单

  • 一台常开的 Mac mini(整机独享),已装好 Claude Code 并用你自己的账号登录
  • 一个真实项目目录,内含 .env、.env.local 或 secrets/ 等敏感路径(先备份,再做实验)
  • 远程方式:SSH 用来改配置、看日志;UU 远程连接用来处理需要图形界面的操作
  • 建议先在有人看着时验证 deny 生效,再放过夜任务

步骤一:先确认「默认能读」这件事

在项目根目录故意放一个不含真实密钥的练习文件,例如 .env.example 或 secrets/demo.txt,内容写假值。打开 Claude Code,让它「读取项目环境相关文件并摘要」。若它能读到假值,就说明:默认读取路径比你以为的宽。

再试一次:把同一路径写进 .claudeignore,重启会话后再让它显式 Read。很多环境下你会发现——忽略文件挡不住这次读取。结论先记下来:要挡 Read,靠的是权限 deny,不是 ignore 列表。

步骤二:用 .claude/settings.json 写 deny

Claude Code 的权限规则常见放在三处:用户级 ~/.claude/settings.json、项目级 .claude/settings.json(可随仓库共享)、本机专用 .claude/settings.local.json(不提交)。密钥相关建议写在本机专用或用户级,避免把本机路径策略误提交到公开仓库。

一个偏保守的起点(路径按你的仓库结构改):

``json { "permissions": { "deny": [ "Read(./.env)", "Read(./.env.*)", "Read(./secrets/)", "Read(~/.ssh/)", "Read(~/.aws/**)", "Bash(cat .env*)", "Bash(printenv*)" ] } } ``

要点:

  • Read(...) 挡文件工具;同时挡常见「用 Bash 绕过」的读法(cat、printenv 等),按你团队习惯补充。
  • 通配要够宽:.env.*、secrets/** 比只拦一个文件名稳。
  • 在 Claude Code 里输入 /permissions,确认 deny 已生效。
  • 故意让它再读练习文件:应被拒绝或无法带出内容。若仍能读到,检查规则写在哪一层、是否被更宽的 allow 盖住,以及版本差异。
不要把真实生产密钥写进仓库作「测试素材」。练习只用假值;真密钥留在密钥管理或本机钥匙串,且不在 Claude Code 的工作树里明文存放。

步骤三(可选):用 hook 在进模型前再挡一层

deny 负责「别读」。若你仍担心某次工具输出里夹带了假密钥形态的字符串,可以加 PreToolUse / 相关 hook:在工具结果进模型前跑一小段脚本,匹配到 API_KEY=、SECRET= 一类模式就改写或直接以退出码拦截。hook 的输入字段与登记方式以官方文档为准;脚本放在本机(例如 ~/.claude/hooks/redact-secrets.sh),chmod +x 后在 settings 里登记。

hook 是补充,不是替代:

  1. 第一道:deny 禁止读敏感路径
  2. 第二道:hook 拦截可疑命令或遮盖输出
  3. 第三道:项目约定——真实密钥不进仓库、不进聊天粘贴板

改完后先手动触发一次读敏感路径、一次无害读源码,确认拦截与放行都符合预期,再交给长任务。

步骤四:把规则留在常开的新加坡 Mac mini 上

deny 与 hook 写在笔记本上,合盖或换机就容易丢、难复现。更稳的做法是:

  1. 整机独享的新加坡 Mac mini 常开,Claude Code、settings、hook 脚本都装在这台机器上。
  2. 长会话放 tmux:SSH 断线后 tmux attach 回到现场;规则已在机器上,不必每次重配。
  3. 用 UU 远程连接处理图形界面(系统设置、钥匙串提示等);日常改配置、看日志用 SSH 即可。
  4. 每台机器有自己的固定专属地址,浏览器即可 SSH / VNC;不要把密钥写进可公开传播的示例地址里。

这样你在外面重连时,看到的是同一套已经验证过的 deny 规则,而不是「这台电脑忘了写、那台电脑写了一半」。

建议验收清单

  1. /permissions 能看到针对 .env、secrets/** 等的 deny。
  2. 练习文件(假值)被显式 Read 时失败或无内容;无害源码仍可读。
  3. 用 Bash 绕读(如 cat .env)也被拦下(若你写了对应 deny)。
  4. 仅靠 .claudeignore 不能替代上述结果——你已用实验验证过。
  5. 合上远程连接再连回来,规则仍在;tmux 里的 Claude Code 会话可接回。
  6. 仓库里没有真实密钥;settings.local 与 hook 未误提交到公开远程。

和 SgRent 怎么配合

若你需要一台一直开着、整机独享的新加坡 Mac mini,把 Claude Code 的 deny 规则与 hook 长期留在机器上,出门用 UU 远程连接或 SSH 接回:SgRent(Zumac.Ai)提供整机租用 ¥799/月起、自有设备托管 ¥299/月起;季付、半年付、年付有折扣。订购与开通走 panel.zumac.ai;方案说明见 首页费用区;使用问题见 帮助中心。需要人工协助可联系 Telegram @singatao。

先把「不能读密钥」写成 deny,再放到常开机器上跑稳——比每次靠聊天叮嘱可靠得多。

需要一台新加坡的独享远程 Mac? SgRent 提供新加坡家庭宽带原生 IP 的 Mac mini M6,整机独享,UU 远程连接。整机租用 ¥799/月,自有设备托管 ¥299/月;季付 9 折,半年付 6 送 1,年付 12 送 2。
前往 panel.zumac.ai 订购 → · 查看方案与费用 · 帮助中心

返回首页 · 更多文章

Telegram 客服