深度

Claude Code 团队协作安全实践:MCP 服务器审批机制与工作区信任详解

Claude Code v2.1.196 起引入的 MCP 服务器审批机制,确保克隆仓库无法自动获得已提交的 MCP 服务器信任。本文详解工作区信任模型如何防止供应链投毒攻击,并提供团队 Onboarding 安全检查清单。

2026/7/64分钟 阅读ClaudeEagle

当 Claude Code 从个人工具升级为团队协作平台时,安全边界的设计变得至关重要。本文聚焦 Claude Code 在团队场景下的两个关键安全机制:MCP 服务器审批流程工作区信任模型,帮助团队在享受自动化便利的同时不引入供应链风险。

问题的根源:克隆的仓库不该自动获得权限

设想这样一个场景:你的团队在 .claude/settings.json 中提交了一个 MCP 服务器配置,并设置了 enableAllProjectMcpServers: true。如果这个仓库被克隆到一台新机器上,Claude Code 不应该自动信任并连接这个 MCP 服务器——因为攻击者完全可以 fork 一个恶意仓库,在 .claude/settings.json 里塞入一个指向恶意服务器的配置,诱导受害者克隆并直接获得工具执行权限。

Claude Code 的解决方案:工作区信任 + 审批状态

v2.1.196 起,Claude Code 引入了明确的信任边界:

bash
# 查看当前项目的 MCP 服务器状态
claude mcp list

# 待审批的服务器会显示为:
⏸ Pending approval

# 已拒绝的服务器会显示为:
✗ Rejected

核心规则claude mcp listclaude mcp get 只从未提交到仓库的设置文件中读取 .mcp.json 的审批状态。也就是说:

✅ 有效的审批来源: - 本地未提交的 .claude/settings.local.json - 用户级 ~/.claude/settings.json - 你手动在交互式会话中批准的记录 ❌ 无效的审批来源(在不受信任的目录中): - 提交到仓库的 .claude/settings.json 中的 enableAllProjectMcpServers - 提交到仓库的 .claude/settings.json 中的 enabledMcpjsonServers

如何建立工作区信任

bash
# 1. 在项目目录中交互式运行 claude
cd my-project
claude

# 2. 首次运行时会弹出工作区信任对话框
# 阅读并确认该目录是可信的

# 3. 确认信任后,审查待批准的 MCP 服务器
/mcp

# 4. 逐个批准需要的服务器

重要:只有当你主动完成了工作区信任流程,仓库提交的 MCP 服务器审批配置才会生效。一个克隆下来但从未被你交互式打开过的仓库,其 MCP 服务器会一直停留在 ⏸ Pending approval不会被连接,也不会被健康检查

团队推荐实践

1. 仓库中只提交「意图」,不提交「自动批准」

json
// .claude/settings.json(提交到仓库,团队共享)
{
  "enabledMcpjsonServers": ["jira", "sentry"]
}

这只是声明「这个项目建议使用哪些 MCP 服务器」,真正的连接仍需每个开发者在自己机器上完成工作区信任 + 手动审批。

2. 新成员 Onboarding 检查清单

bash
# 新成员加入项目后应执行的步骤
git clone <repo>
cd <repo>
claude              # 触发工作区信任对话框,确认信任
/mcp                # 查看待审批的 MCP 服务器列表
# 逐个审查每个服务器的 URL/命令是否符合预期,再批准

3. 结合参数级权限控制加固

配合 Claude Code Week 25 引入的参数级权限规则,进一步限制敏感操作:

json
{
  "permissions": {
    "deny": [
      "Agent(model:opus)"
    ],
    "ask": [
      "Bash(git push*)"
    ]
  }
}

为什么这套机制值得信赖

这套「工作区信任 + 本地审批状态不可通过仓库提交绕过」的设计,本质上解决了供应链投毒的问题:即使攻击者完全控制了仓库内容,也无法让受害者的 Claude Code 在毫无察觉的情况下连接恶意 MCP 服务器——审批这一步骤永远需要人在本地机器上主动确认。

总结

Claude Code 的 MCP 审批机制体现了「Trust but Verify」的安全设计理念:团队可以在仓库中共享 MCP 配置意图,但实际的信任决策——是否连接、是否执行——始终掌握在每个使用者手中,不会因为克隆了一个仓库就被动继承风险。对团队负责人来说,在 Onboarding 流程中加入「审查待批准 MCP 服务器」这一步,是值得强调的安全实践。


来源:Connect Claude Code to tools via MCP — Anthropic 官方文档

相关文章推荐

深度Claude Code 安全最佳实践:团队项目权限管理与敏感信息防泄漏Claude Code 安全使用完整指南:权限最小化配置(allow/deny 规则)、环境变量与密钥安全管理、CLAUDE.md 安全策略、企业团队管控配置(managed-settings.json)、CI/CD 密钥保护、防止敏感信息泄漏的 10 个规则。2026/3/15深度Claude Code Auto Mode 技术深度解析:两层分类器架构如何防止 AI 越权行为Anthropic 工程博客深度解析 Auto Mode 背后的技术:用户审批了 93% 的权限请求却仍有疲劳感;内部事故日志(误删远程分支/上传 GitHub Token/生产数据库误迁移);两层防御(输入层提示注入探针+输出层对话记录分类器);三层许可决策;实测数据(0.4% 误报率,17% 漏报率,附原因分析);多 Agent 传递的安全处理;以及 Deny-and-Continue 机制。2026/5/3深度Claude Code 环境变量与密钥管理:安全配置 API Key 和敏感信息的完整指南Claude Code 开发中安全处理环境变量和 API 密钥的完整指南:.env 文件规范、dotenv 与系统环境变量的区别、密钥轮换策略、防止密钥泄露到 Git、secrets 加密存储、生产环境的 Vault/AWS Secrets Manager 集成,以及 CLAUDE.md 安全规范配置。2026/3/16深度Claude Code 沙箱隔离深度指南:OS 级文件系统与网络隔离、Auto-allow 模式与逃生舱机制Claude Code 沙箱隔离深度指南:传统权限模型三大问题(审批疲劳/效率损失/自主性受限)、文件系统隔离(写入限当前目录/读取全系统/OS 级子进程继承)、网络隔离(代理服务器域名控制/allowManagedDomainsOnly)、三平台实现(macOS Seatbelt/Linux bubblewrap/WSL2 支持/WSL1 不支持)、安装启用(/sandbox 命令)、两种沙箱模式(Auto-allow 自动批准 vs Regular 标准流程)、settings.json 完整配置(allowWrite/denyWrite/denyRead/路径前缀/多层合并行为)、工具兼容性(kubectl/watchman/docker 处理方式)、逃生舱机制(dangerouslyDisableSandbox/allowUnsandboxedCommands 禁用)、三项安全收益和沙箱局限性。2026/3/9深度Claude Code 权限系统深度解析:规则语法、5 种权限模式与 Hooks 扩展Claude Code 权限系统完整解析:三层工具类型(只读/Bash/文件修改)审批规则、/permissions 管理界面(Allow/Ask/Deny 规则 deny→ask→allow 优先顺序)、5 种权限模式(default/acceptEdits/plan/dontAsk/bypassPermissions 及禁用方式)、权限规则语法(Tool/Tool(specifier)/通配符/空格边界规则/Shell 操作符感知)、四种路径前缀格式(//绝对路径/~/home/项目根/相对)、MCP 工具和 Agent 权限规则、WebFetch 网络控制局限性(无法阻止 Bash curl)及三种可靠 URL 过滤方案、PreToolUse Hooks 扩展权限、工作目录扩展(--add-dir/additionalDirectories),以及权限与沙箱互补关系和两个配置示例。2026/3/9深度Claude Code 安全机制全解:权限架构、提示词注入防护、云端隔离与团队安全最佳实践Claude Code 安全机制完整解析:最小权限原则(默认只读/一次性批准/白名单)、四大内置保护(Sandbox/写入范围限制/权限疲劳缓解/Accept Edits)、八大提示词注入防护(权限系统/上下文分析/命令黑名单/隔离 Context/Fail-closed 匹配)、隐私保障与凭证加密、MCP 安全注意事项(Anthropic 不审计)、云端 VM 六大安全控制 vs Remote Control TLS 本地执行,以及个人和团队安全最佳实践。2026/3/6