首页/文章/MCP 背后还有隐藏服务?在新加坡 Mac mini 上做 Claude Code 凭证与启动参数审计

MCP 背后还有隐藏服务?在新加坡 Mac mini 上做 Claude Code 凭证与启动参数审计

· Zumac.Ai

装 MCP、配网关、把 Claude Code 挂在常开机器上之后,很多人会默认「能跑就行」。问题是:网关后面可能还挂着你以为关掉了的 MCP;本机若干凭证文件可能被 Claude Code 无额外提示直接读到;启动参数里若写过 API Key,进程列表一眼就能看见。mcp-audit 一类体检工具正是冲着这几层来的——不是吓人,而是把「看不见的暴露面」摊开,方便你按清单收。

本文在新加坡 Mac mini 上给出一份可重复的凭证卫生清单:定位 MCP 配置 → 核可无提示读取的凭证文件 → 扫启动参数里的密钥 → 了解组织下发的 MCP 策略会拦什么 → 再做加固。Claude 账号请使用你自己的;机器侧只提供稳定合规的使用环境。

为什么常开 Mac mini 要把这件事抬高

笔记本合盖就断,暴露窗口相对短。常开整机上的 Claude Code 会话、MCP 子进程、tmux 里挂着的脚本会连续跑几天甚至几周:

  • MCP 一旦连上,工具描述与部分资源会进入代理上下文,多余的服务器等于多余的攻击面。
  • 凭证文件若对当前用户可读,代理在「读文件」类能力打开时,不一定每次都弹确认——取决于你的权限模式与 deny 规则。
  • 启动参数、环境变量、.mcp.json 里的明文 Token,会出现在进程列表、崩溃日志或备份里。

所以目标不是承诺「万无一失」,而是:定期用同一份清单确认「本机到底开了哪些 MCP、哪些文件默认可读、参数里有没有密钥」,并把结果落盘,方便对比。

第一步:列出本机 MCP 配置落点

用 UU 远程连接或 SSH 登入新加坡 Mac mini 后,先找配置,而不是先装新工具:

# 用户级与项目级常见落点(按你实际安装路径微调)
ls -la ~/.claude/ 2>/dev/null
ls -la .mcp.json ./mcp.json 2>/dev/null
find ~ -maxdepth 3 -name '.mcp.json' 2>/dev/null
claude mcp list 2>/dev/null || true

把输出记到 ~/security-audits/mcp-$(date +%F).txt。重点看:

  1. 启用了哪些 server:名字、命令、是否指向网关/代理进程。
  2. 网关后是否还有隐藏 MCP:有人只记「前端网关开着」,忘了网关后面还挂着数据库、浏览器、支付类 server。
  3. 项目级是否覆盖用户级:仓库里的 .mcp.json 可能被同事或模板带进来,未必是你本意。

不需要的 server 先禁用或删除配置,再开 Claude Code;少一个 MCP,就少一段进上下文的工具说明。

第二步:核「无提示可读」的凭证文件

审计类工具常会报告:某些路径对当前用户可读,Claude Code 在对应权限模式下可以读到内容而不再次弹窗。你不必依赖某一款工具的品牌,本机也能先做只读盘点:

# 常见敏感落点(存在才检查权限)
for f in \
  ~/.claude/.credentials.json \
  ~/.claude.json \
  ~/.claude/settings.json \
  ~/.config/*/credentials* \
  ~/.ssh/id_* \
  ~/.npmrc \
  ~/.netrc \
  ~/.aws/credentials \
  ~/.config/gcloud/application_default_credentials.json
 do
  [ -e "$f" ] || continue
  ls -la "$f"
done

解读原则:

  • 权限过宽(例如对 group/other 可读)→ 先收紧到仅本人可读:chmod 600(对私钥类文件尤其重要)。
  • 工作目录里的明文 Key / .env 副本 → 移出仓库树,或确保已被 deny 规则挡住;不要指望「代理不会主动去翻」。
  • 备份与同步目录(Time Machine 排除列表、云同步文件夹)→ 确认凭证文件没有被同步到你不打算给代理看的位置。

把「路径 + 权限位 + 是否仍需要」写进同一份审计日志。若某工具明确标出「Claude Code 可无提示读取」,优先用 hooks / deny 规则收紧读路径,而不是只口头提醒自己。

第三步:扫启动参数与进程环境里的密钥

MCP server 或辅助进程若这样启动:

# 反例:Key 写在 argv 里,ps 就能看见
some-mcp-server --api-key sk-example-do-not-use

则 ps aux、监控面板、甚至崩溃报告都可能带出密钥。改为:

# 正例:从环境或钥匙串注入,不进 argv
export MCP_API_KEY="$(security find-generic-password -s 'mcp-api' -w)"
some-mcp-server   # 进程内读 MCP_API_KEY

自检:

# 粗扫:命令行里是否出现 key / token / secret 字样(按需收紧正则)
ps auxww | rg -i 'api[_-]?key|token|secret|password' || true

发现命中后:立刻轮换该密钥,改启动方式,并检查 shell 历史 / launchd plist / 定时脚本是否也写了明文。环境变量文件(如 ~/.claude-ops/secrets.env)权限同样应是 600,且不要 source 进会同步到公开仓库的脚本。

第四步:了解组织下发的 MCP 策略会拦什么

团队或集中管理的策略有时会限制:

  • 允许加载的 MCP 白名单;
  • 禁止的工具名或危险能力;
  • 某些路径的自动批准 / 强制 deny。

在个人常开机器上,即便暂时没有组织策略,也应自建等价纪律:

  1. 在 settings / hooks 里维护 MCP 与敏感路径的 deny 列表。
  2. 升级 Claude Code 后复查:允许列表、环境变量覆盖、新版本默认权限是否被改宽。
  3. 把「策略期望」写成 CLAUDE.md 里的一两句硬规则,例如:禁止把生产密钥放进工作目录;禁止在 MCP 启动参数写 Key。

策略文档是「期望」;本机 claude mcp list + 权限位 + ps 才是「现状」。两边不一致时,以现状为准去改配置。

第五步:加固清单(做完再开长会话)

按顺序勾选:

  1. 删/停未用 MCP,网关后的隐藏 server 一并清掉。
  2. 凭证文件 chmod 600,私钥更严;工作区 .env 移出或进 deny。
  3. 密钥进钥匙串或权限收紧的 env 文件,永不进 argv、不进 git。
  4. 轮换已暴露过的 Key(只要出现在日志、截图、ps 输出里,就当已泄露)。
  5. 留下带日期的审计日志,系统更新或新装 MCP 后重跑。

可选:把上述命令收进 ~/claude-ops/mcp-audit/check.sh,每周或新装 server 后执行一次,输出 tee 到 ~/security-audits/。

为什么适合放在 Zumac.Ai 的新加坡 Mac mini

凭证卫生靠的是同一台机器、同一份清单、前后可对比的日志。笔记本换网络、换用户目录、随手装插件,MCP 与密钥落点很容易漂;把 Claude Code、MCP 配置和审计脚本固定在新加坡 Mac mini 上,用 UU 远程连接或 SSH 回去跑同一份 check.sh,对比成本最低。

Zumac.Ai 提供新加坡 Mac mini M6 整机独享,适合长期挂着编码代理与这类安全体检。实际延迟取决于你本地的网络线路。

新客户整机租用 ¥999/月(季付 ¥2,697.30,半年付 6 送 1 ¥5,994,年付 12 送 2 ¥11,988);已购买客户续费保持原价。新客户首单自审核开通当天起租,续费及老客户新订单自付款当天起租。

账号始终是你自己的 Claude 账号;机器侧只提供稳定合规的使用环境,不涉及账号共享或转售。需要咨询可联系 Telegram @singatao,或查看 方案与费用。

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

返回首页 · 更多文章

Telegram 客服