首页/文章/Claude Code 的 deny 管的是工具名,不是文件锁:.env 还要进沙箱拒绝列表

Claude Code 的 deny 管的是工具名,不是文件锁:.env 还要进沙箱拒绝列表

· Zumac.Ai

帖子说了什么

@timwork_notes 写得很直白:Claude Code 的 deny 规则守护的是「某个工具」,不是「某个文件永远碰不到」。他举例:v2.1.309 才修了 Edit(path) deny 拦不住指向同一路径的 Bash 重定向(某些还带子 shell 的命令)。所以对 .env 只写一条 Read(./.env),更像门口贴了告示,不是把门锁死。若文件真重要,还要放进 sandbox 的拒绝列表。@vibepreflight 补了一层:Read deny 挡不住 cat / python -c 这类 Bash 读法,需要再加 PreToolUse 拦带 .env 字样的 shell。

对照官方说明

CHANGELOG v2.1.309 原文相关条目:

  • Fixed an Edit(path) deny rule not blocking a Bash redirect to that path in some commands that also held a subshell.

这正好对应帖子里的例子:权限引擎按工具调用形态匹配;换一条 Bash 重定向,旧逻辑就可能漏拦。Sandbox 文档则说明:沙箱主要限制写入与网络,默认并不挡读取凭据路径;要把敏感路径真正「关进笼子」,需要你在 sandbox 配置里显式列出 deny / credentials 一类项(字段名以当前版本文档为准)。

本站已有「deny 语法要用 Edit/Read 而不是无效的 Write(路径)」以及「.env 用 deny 挡住」的专文;本文只钉住一点:工具级 deny ≠ 文件级锁,升级到含上述修复的版本后,仍要用沙箱 + hook 做纵深。

你可以立刻做的几件事

  1. 确认版本 ≥ 2.1.309,并重测:对已 deny 的路径,故意让 Agent 用 echo x > path / 重定向写法碰一次。
  2. 敏感文件双写规则:Read/Edit deny 加上 sandbox 拒绝读/写列表(含真实路径,注意符号链接)。
  3. PreToolUse 补刀:拦截命令行里出现 .env、secrets/、凭据文件名的 Bash(具体脚本按团队规范写)。
  4. 密钥尽量不进工作区:能放密钥库或本机环境注入就不要落盘到 Agent 可扫的目录。
  5. 升级后跑一组回归:Read、Edit、Bash 重定向、子 shell 各测一条,避免「以为 deny 还在、其实只挡了一种工具」。

小结

门牌(deny)有用,但换一把工具就可能绕开。把「文件」同时写进沙箱拒绝列表,再加 hook 看命令文本,才比较像一把锁。2.1.309 修了其中一条已知缝,不代表可以只留一行 Read(.env)。

来源

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

返回首页 · 更多文章

Telegram 客服