free-coding-models安全与隐私深扒:免费编码模型CLI的API Key本地存储、npm溯源签名与匿名遥测全解析
【免费下载链接】free-coding-modelsFind, benchmark and install in CLI 170+ FREE coding LLM models across 15+ providers in real time项目地址: https://gitcode.com/gh_mirrors/fr/free-coding-models
free-coding-models(简称 FCM)是一款免费的编码 LLM 模型扫描与安装 CLI 工具,能实时对比 170+ 个免费模型并写入你的 AI 编程工具。凡是会读取 API Key 的终端工具,用户最关心的就是三件事:密钥存在哪、供应链可不可信、会不会偷偷上传数据。本文结合源码,把这三块机制完整讲清楚。
30秒速览:这个免费编码模型工具的安全边界
| 关注点 | 实际行为 |
|---|---|
| API Key 去向 | 仅存在本地一个 JSON 文件,只发给对应服务商 |
| 系统权限 | 0600(仅属主可读写),启动时自动检查并提示修复 |
| 特权要求 | 永不要求 sudo/root |
| 网络行为 | 仅三类出口:服务商 API、npm 版本检查、匿名遥测 |
| 依赖面 | 纯 JavaScript 小依赖,无原生编译模块 |
以上承诺并非口头声明,官方安全策略文档 SECURITY.md 明确列出了"这个工具不做什么":不收集/传输/存储源代码、不向任何自运营服务器发送提示词与补全内容、不执行远程任意代码。
API Key 本地存储:密钥为什么不会外泄
存储位置与文件权限
FCM 的所有数据集中在一个文件里:~/.free-coding-models.json,包含各服务商的 API Key、开关、收藏与路由配置(完整结构见 docs/config.md)。该文件创建时即写入0600权限——只有属主能读写,同机其他用户无法窥探。
启动时的权限自检与自动修复
这是源码里最用心的部分之一。src/core/security.js 中的checkConfigSecurity()会在界面启动前完成一次权限体检:
- POSIX 系统:检测模式位是否
0600,若过宽(如 644 全局可读)则打印安全警告,交互终端下询问是否一键chmod 600修复; - Windows:由于
chmod在 NTFS 上几乎无效,改为调用icacls读取真实 ACL——确认继承已关闭、授权仅含当前用户(SYSTEM/管理员除外),修复后还会重新读取 ACL 验证,"没有证据不声称成功"; - 防骚扰设计:若修复失败,会写入一个 30 天有效的确认标记文件,避免每次启动都弹窗唠叨,同时给出手动修复命令。
你也可以用--fix-permissions或--yes让它在启动时直接静默修复。
原子写入、备份与自修复
写入路径同样设防。src/core/config.js 的saveConfig()采用"临时文件 + 原子重命名",写入后立即回读验证所有 Key 是否完好;每次覆盖前在备份目录保留最近 5 份快照,验证失败时自动从备份恢复。
还有一个巧妙的细节:配置中的 Key 支持${MY_VAR}环境变量占位符形式(见 src/core/config.js 的注释)——磁盘上只存占位符,真正的密钥始终留在环境变量里,不落盘。
Key 的传输边界
Key 只出现在两类地方:发往对应服务商 API 请求头的鉴权字段,以及你显式启动的编码工具配置。源码注释明确声明 Key 永远不会被打印明文、写日志或塞进遥测。
npm 溯源签名与供应链安全
npm Provenance(Sigstore)是什么
很多"被 npm 包投毒"的新闻让人对npm install -g本能警惕。FCM 的对策是启用 npm 官方 Provenance:每次发布都附带Sigstore 签名,签名链路能证明这个包确实由官方 CI 从官方仓库构建,而非中间人篡改的产物。你在 npm 页面或npm audit signatures中都能查到这条签名链。
配套的供应链清单(SECURITY.md)还包括:
- SBOM:每个 Release 附带软件物料清单,可逐项核对依赖;
- 最小依赖面:运行时仅 chalk(终端着色)、socket.io(Web 仪表盘实时刷新)与三个 TanStack/Table 前端库,全部纯 JS、无原生编译步骤——依赖越少,攻击面越小;
- 持续审计:CI 每次推送跑
npm audit,Dependabot 每周自动更新依赖,pnpm-lock.yaml已提交锁定版本。
版本检查与自动更新
工具启动时会向 npm 注册表查询最新版本(src/core/updater.js),这是除服务商 API 外唯一的主动出网行为之一。更新通过检测到的包管理器(npm/bun/pnpm/yarn)走标准全局安装流程,仓库检出(存在.git)与 Docker 环境会自动跳过自我更新,避免更新循环。
匿名遥测机制全解析:到底收集了什么
匿名 ID:一个本地生成的随机 UUID
src/core/telemetry.js 首次运行时生成形如anon_xxxx-xxxx-...的随机 ID,存于本地配置文件,用于跨次启动识别"同一匿名用户"。它不是账号、不含邮箱/主机名等可关联信息。
事件内容清单
遥测属性由 buildTelemetryProperties() 构建,全部字段只有:
- 应用名称与版本号
- 工具模式(opencode / openclaw / crush ...)
- 操作系统(macOS / Windows / Linux)
- 终端家族(iTerm2、Windows Terminal、VS Code Terminal 等归一化标签,从不发送完整环境变量)
README 的遥测章节与代码一致:没有任何个人身份信息、API Key、提示词、源代码或文件路径离开你的机器。
发送机制:绝不阻塞、绝不报错
sendUsageTelemetry()是典型的 fire-and-forget:硬性 1.2 秒超时,失败静默吞掉,分析永远不影响 CLI 主流程(src/core/telemetry.js)。
三种方式关闭遥测
优先级从高到低(isTelemetryEnabled()):
- 启动时加
--no-telemetry(单次运行生效); - 环境变量
FREE_CODING_MODELS_TELEMETRY=0; - 设置界面中的持久化开关(写入配置的
telemetry.enabled)。
另外,TUI 里按J/I发送的功能请求与 Bug 反馈走 Discord Webhook,需要你显式配置 Webhook 环境变量才会生效,且只携带消息本身和版本/系统等匿名页脚。
新手安全使用建议(3条)
- 首次运行后看一眼权限:若曾手动移动过配置文件,运行
free-coding-models --fix-permissions或直接chmod 600 ~/.free-coding-models.json; - 多用户机器用环境变量占位:把 Key 存成
${GROQ_API_KEY}形式,磁盘上只留占位符,密钥永不落盘; - 企业内网可直连白名单:出网目标只有服务商 API 端点、
registry.npmjs.org(版本检查)与遥测端点,便于防火墙策略放行。
发现疑似漏洞时,通过 SECURITY.md 约定的私密通道报告(48 小时内确认、5 个工作日初评、30 天内修复目标),不要在公开 Issue 中披露细节。
【免费下载链接】free-coding-modelsFind, benchmark and install in CLI 170+ FREE coding LLM models across 15+ providers in real time项目地址: https://gitcode.com/gh_mirrors/fr/free-coding-models
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考