跳转到主要内容

Claude Code 默认会阻止读取 .env 或 ~/.aws/credentials 吗?

不会。截至 2026 年 10 月,Claude Code 的沙箱文档说明它没有内置的凭证拒绝列表,默认读取权限仍允许读取 ~/.aws/credentials 和 ~/.ssh/ 等文件。其他 CLI 提供可选的拒绝设置,但需要你按工具逐一编写。 CC Safety Net 一经安装,就会阻止读取 .env 文件、SSH 私钥、云凭证存储和编码智能体的身份验证令牌。你还可以添加自己的拒绝路径。 机密保护会阻止读写可能包含凭证的文件。它在命令分析之前运行,适用于所有安全级别。每次阻止都会在阻止消息和审计日志中给出匹配的规则 ID。 共有 138 条已注册规则。其中大多数属于共用同一 ID 模式的生成规则族,因此下表按族列出 ID 形式,而不是逐一列出每个 ID。除十三条规则组成的编码 CLI 配置层外,所有规则默认开启。

运行位置

机密保护检查 shell 命令,以及智能体的读取、写入、编辑、搜索和 patch 工具。它不只阻止写入,也阻止读取,因此 cat .env、strings id_rsa 和 dd if=.env 都会阻止。

允许被阻止的文件

允许受保护的文件有两种方式。单条规则的覆盖会在所有位置关闭一条规则。允许路径会让指定的文件或目录免于除编码 CLI 规则外的所有内置规则。举例来说,某个项目把抓包文件放在 captures/ 中,cat captures/session.pcap 会以 secret.ext.pcap 阻止。
1

获取规则 ID

阻止消息中会给出规则 ID。也可以运行 npx -y cc-safety-net explain --json 'cat captures/session.pcap',读取 ruleId。
2

亲自编辑 policy.json

智能体无法修改 policy.json,请在编辑器或仪表板中修改。见编辑策略文件。关闭规则:
或者豁免一个目录:
相对的允许路径按配置工作目录解析,见策略。条目也可以是一个确切的文件,例如 "captures/session.pcap",或某个目录下的一个文件名,例如 "~/code/**/.env.local"。
3

确认更改

对同一条命令再次运行 explain,它会显示为允许。
允许路径从不豁免已配置的拒绝路径或 secret.cli.* 规则。项目文件添加允许路径或关闭规则时,CC Safety Net 会将其报告为削弱。覆盖语法见策略,可接受的条目见机密允许路径。

standard 模式不算作读取的情形

在 standard 模式下,以下形式不算作读取内置敏感路径。strict 和 paranoid 会把它们全部算作读取。这些形式都不会放宽已配置的拒绝路径。 这类查看可以是复合命令中的一段,例如 git check-ignore .env && git status --short。以下情况仍算作读取: 新建文件、tailscale 与 openssl 这两种形式,以及数据字面量,只放宽内置的文件名规则,因此主目录或编码 CLI 路径仍然阻止。对 -i 密钥文件,主目录规则和编码 CLI 规则也一并放宽,因为 ssh、scp 和 sftp 都只用这个密钥来认证,从不打印其内容。

匹配顺序

  • 已配置的拒绝路径最先检查,并且始终优先。
  • 主目录规则优先于 env 模板豁免和公钥豁免,因此 ~/.ssh/.env.example 和 ~/.ssh/id_rsa.pub 仍然阻止。
  • 编码 CLI 规则(secret.cli.*)忽略允许路径。

基本名称规则

九条规则在任何目录中阻止确切的基本名称。 这些规则有两个限制:
  • secret.basename.credentials 只匹配 credentials 这个确切名称。credentials.json 既不匹配它,也不匹配任何其他内置规则。
  • 没有针对 id_dsa 的基本名称规则。名称恰为 id_dsa 的文件仍会被下面的宽泛模式 secret.pattern.ssh-key-basename 阻止。
还有一条模式规则扩展了 .env 族。secret.pattern.env-variant 阻止所有以 .env. 开头的基本名称,包括 .env.local、.env.production 和 .env.template.local,豁免的模板除外。

主目录规则

这些规则保护主目录下的位置:该目录本身及其中的所有内容。 kube-config 和 docker-config 各有八条配套规则,覆盖改名后的备份,ID 形式为 secret.home.<slug>.<suffix>。后缀为 bak、backup、copy、disabled、old、orig、save 和 tmp,例如 ~/.kube/config.bak 会以 secret.home.kube-config.bak 阻止。

密钥变体规则

改名后的密钥和凭证文件副本自成一族,由五个受保护前缀构成:id_rsa、id_dsa、id_ed25519、id_ecdsa 和 credentials。各 ID 中的 slug 就是改用短横线书写的前缀(id-rsa、credentials 等)。
  • 分隔符变体。 5 条 secret.variant.<slug>.separator 规则阻止前缀后跟 - 或 _ 及任意后续文本的名称:id_rsa-old、id_rsa_backup、credentials_prod。
  • 点后缀变体。 50 条 secret.variant.<slug>.<suffix> 规则阻止前缀后跟以下十个后缀之一的名称:.bak、.backup、.copy、.disabled、.key、.old、.orig、.pem、.save、.tmp。例如 id_rsa.bak 会以 secret.variant.id-rsa.bak 阻止,credentials.pem 会以 secret.variant.credentials.pem 阻止。
该族只做精确匹配,因此相似名称可以通过:id_rsafoo 没有分隔符,credentials.json 的后缀也不在列表中。 该族还有一条宽泛模式。secret.pattern.ssh-key-basename 阻止所有以 _rsa、_dsa、_ed25519 或 _ecdsa 结尾、且不带扩展名的基本名称,例如 deploy_key_rsa 或 github_ed25519。含点的名称永远不会匹配。

扩展名规则

21 条 ID 形式为 secret.ext.<extension> 的规则,阻止带有对应扩展名的任何文件: .agilekeychain、.asc、.bek、.cscfg、.fve、.gnucash、.jks、.keychain、.kwallet、.mdf、.ovpn、.p12、.pcap、.pem、.pfx、.pkcs12、.psafe3、.rdp、.sdf、.tblk、.tpm 另有三条扩展名模式规则覆盖扩展名族: 覆盖必须使用族 ID secret.ext-pattern.key,不能写 secret.ext.keypair。未注册的 ID 会被拒绝,报错为 unknown secret protection rule id "<id>"。

编码 CLI 凭证层(默认开启)

十二条规则保护受支持编码智能体的凭证存储。它们默认开启。 Antigravity 没有凭证规则,它唯一的规则在下面的配置层中。

编码 CLI 配置层(默认关闭)

十三条规则覆盖同一批智能体的设置文件和 MCP 配置文件。这些文件可能内嵌凭证,但智能体也会在日常工作中编辑它们,因此这一层默认关闭。要开启某条规则,在 secret_protection.overrides 中把它设为 "on"。开启后,<project> 路径会在任意仓库根目录处匹配。 config.json 是常见文件名,因此匹配它的每条规则都限定在一个目录中:secret.cli.opencode.config 只在 ~/.config/opencode 内匹配,secret.cli.devin.config 只在 ~/.config/devin 内匹配。本页未列出的目录中的 config.json 仍然允许。

拒绝路径

secret_protection.deny_paths 用于添加你自己的受保护文件和目录。命中时以 secret.deny-path 阻止。任何覆盖或豁免都无法放宽它,只有 secret_protection.enabled: false 能关闭它,同时也会关闭机密保护的其余部分。

豁免

以下三项豁免划定了上述规则的边界。它们都不会放宽已配置的拒绝路径。

配置

所有配置都在 policy.json 中: 破坏性命令的允许路径不会放宽机密保护。仪表板通过界面编辑同一组设置。
机密保护是一组有界的模式,而不是通用的读取边界。凭证如果位于任何规则都不识别的文件中,就得不到保护。见 CC Safety Net 无法提供帮助的范围。从日志和阻止消息中清除凭证值的机密脱敏是另一套机制,见机密脱敏。
最后修改于 2026年11月9日