首页/文章/CLAUDE.md 里写「不许读 .env」挡不住:硬限制请写进 permissions

CLAUDE.md 里写「不许读 .env」挡不住:硬限制请写进 permissions

· Zumac.Ai

一句官方口径

Claude Code 文档写得很直:

Instructions in your prompt or CLAUDE.md shape what Claude tries to do, but they don't change what Claude Code allows.

翻译成习惯:CLAUDE.md 是说明书,permissions 才是门锁。

@CryonixCrypto 用实验说明同一点:把「never read .env」只写在 CLAUDE.md 里,模型仍可能去试;真正在命令进 shell 前拦住的,是 .claude/settings.json 里的 deny / ask / allow。

规则怎么排

匹配顺序固定:deny → ask → allow,先命中先生效。宽泛的 deny 不会被更窄的 allow「挖洞」。/permissions 可以列出每条规则来自哪个文件。

常见起步配置(示例,按项目改):

  • deny: Read(./.env)、Read(./.env.*)、Read(./secrets/**),以及你绝不愿自动执行的破坏性命令模式;
  • ask: git push、部署、删库一类;
  • allow: 你每天都批准的安全命令,减少疲劳点击。

团队共享写进项目 .claude/settings.json;个人「不要再问」往往落在 settings.local.json。

两个常见误解

  1. .claudeignore 不是权限墙。 @readmodelmag 提醒:官方口径下它挡不住读取;该拦的路径请写成 Read(...) deny。
  2. 规则匹配的是命令文本,不是魔法沙箱。 文档也写了:Bash(rm *) 拦不住刻意绕开的写法;要对任意子进程做系统级限制,需要开启 sandbox,并理解它覆盖的范围(主要是 shell,不是所有 MCP)。

写完 CLAUDE.md 当然有用——约定风格、目录、禁止事项。但若你关心的是「绝对不能读密钥、绝对不能乱删」,请打开 /permissions,确认门锁真的挂上了。

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

来源

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

返回首页 · 更多文章

Telegram 客服