首页/文章/Claude Code 读过的 .env 会留在本地会话记录里:换密钥时别漏了 ~/.claude/projects

Claude Code 读过的 .env 会留在本地会话记录里:换密钥时别漏了 ~/.claude/projects

· Zumac.Ai

一个容易被忽略的地方

最近几起供应链事件(比如 LiteLLM 1.107.0 被投毒)之后,大家都在忙着轮换 API key、SSH key 和云凭证。@supportapp3_lab 补了一句很实用的提醒:如果你用 Claude Code,还要看一眼 ~/.claude/projects/ 里的会话记录。Claude 读过的 .env、命令输出里显示过的密钥,都会原样留在那里。

官方 Data usage 文档写得很明确:Claude Code 客户端会把会话记录以明文形式保存在 ~/.claude/projects/ 下,默认保留 30 天,目的是支持恢复会话;保留天数可以用 cleanupPeriodDays 调整。另外,在 Claude Desktop 或 Cowork 里开始或最近继续过的会话,默认不受这个期限限制。

这意味着:一台机器如果中过窃密程序,攻击者拿走的可能不只是 .env 本身,还有一个月内所有会话里出现过的密钥副本。

排查和轮换时多做三步

  1. 先搜一遍。 用你实际使用的密钥前缀在会话目录里搜索,例如 grep -rl "sk-ant-" ~/.claude/projects/,再按需换成其他服务的前缀。搜到的文件说明这些 key 曾经进过会话。
  2. 出现过的 key 一并轮换。 如果机器有被入侵的可能,凡是在会话记录里出现过的密钥,都按已泄露处理,在对应服务后台删除并重新生成,而不是只换 .env 里那一份。
  3. 轮换完再决定是否删除记录。 新 key 生效后,含旧 key 的会话文件就只剩风险、没有价值了。确认不再需要恢复这些会话,再删除对应文件。

从源头少留一点

  • 别让 Claude 读密钥文件。 在项目的 .claude/settings.json 里加 Read(./.env) 这类 deny 规则。官方权限文档说明,Read 的 deny 规则也会拦截同一路径上的 Edit 和 Write,并覆盖 cat、head 等它能识别的 Bash 读文件命令;但像 Python 脚本自己打开文件这种间接读取不在范围内,需要沙箱来兜底。
  • 缩短保留期。 不需要长期恢复会话的机器,可以把 cleanupPeriodDays 调小。
  • 分享会话前想清楚。 文档提到,在满意度调查后选择分享会话,会上传会话记录和原始日志,已知的 key 和 token 格式会先被脱敏,但源代码和文件内容是原样上传的。

小结

密钥泄露后的清单里,除了 .env、shell 配置文件和 CI 变量,再加一项 ~/.claude/projects/。它是明文的、默认保留一个月,也最容易被忘掉。

如果你想把 Claude Code 放在一台常开、整机独享的新加坡 Mac mini 上长期运行,可以了解 Zumac.Ai,咨询 Telegram @singatao。

来源

Zumac.Ai 新加坡 Mac mini M6,整机独享,¥999/月起,联系 Telegram @singatao。
查看方案与费用 · 帮助中心

返回首页 · 更多文章

Telegram 客服