首页
/ Trivy 对 CoreOS 与 Fedora CoreOS 的支持范围解析:RPM 数据库驱动的 SBOM 与扫描能力边界

Trivy 对 CoreOS 与 Fedora CoreOS 的支持范围解析:RPM 数据库驱动的 SBOM 与扫描能力边界

2026-09-08 17:28:55作者:殷蕙予

本篇技术指南聚焦 Trivy 在 CoreOS 覆盖文档中定义的扫描支持范围,面向对已 EOL 的 CoreOS Container Linux 及其继任者 Fedora CoreOS 有镜像/文件系统扫描与 SBOM 生成需求的开发者。读完本文,你将清楚 Trivy 通过 os-release 识别 CoreOS 家族、借助 RPM 数据库 SQLite 路径完成软件包清单提取(SBOM)的完整链路,并明确其为何不对该系统执行漏洞与许可证检测。

背景:从 CoreOS Container Linux 到 Fedora CoreOS

CoreOS Container Linux 是一个曾经面向容器化工作负载设计的轻量级 Linux 发行版,目前已被官方标记为 deprecated(已弃用) 并进入 EOL(生命周期终止) 状态。它的官方继任者是 Fedora CoreOS——一个以自动更新、安全加固为核心理念、专为容器与 Kubernetes 节点设计的不可变操作系统。

需要特别强调的是,两者虽然血缘相近,但在 Trivy 的 OS 覆盖表格中属于同一条记录:docs/guide/coverage/os/index.md 中明确列出了 [CoreOS](https://gitcode.com/GitHub_Trending/tr/trivy/blob/6d90892649aebd0c9fc86b75173b566ca2307f9e/docs/guide/coverage/os/coreos.md?utm_source=gitcode_repo_files),并标注“All versions (SBOM only)”,其页脚注释补充说明该条目实际覆盖 Fedora CoreOS 与已弃用的 CoreOS Container Linux。这意味着:无论你扫描的是仍在运行的 CoreOS Container Linux 归档镜像,还是当前仍在演进的 Fedora CoreOS,Trivy 对它们的处理策略是同一套逻辑。

Trivy 对该系统的三大扫描器支持矩阵

操作系统级包扫描在 Trivy 中通常涉及三类能力:SBOM(软件物料清单)、漏洞检测(Vulnerability)与许可证检测(License)。CoreOS 覆盖文档用下表明确划定了边界:

Scanner Supported
SBOM
Vulnerability -
License -

也就是说,Trivy 对 CoreOS / Fedora CoreOS 系统上的 OS 包:

  • 支持生成 SBOM:可以完整枚举系统内通过 RPM 数据库安装的软件包;
  • 不支持漏洞匹配:不会针对这些包报告 CVE;
  • 不支持许可证扫描:不会对 OS 包做许可证推断。

这套边界的直接后果是:如果你希望通过 trivy image 或文件系统扫描对 Fedora CoreOS 做漏洞风险评估,将无法获得 OS 层漏洞结果;你需要借助其他扫描链路(如容器镜像内应用层依赖扫描)来间接获得安全信息。下面两节分别从源码角度解释“为何只支持 SBOM”以及“SBOM 是如何实现的”。

系统识别链路:os-release 中的 ID=coreos

Trivy 对任何目标系统(镜像、rootfs 或本地文件系统)的第一步是识别其操作系统族与版本,这一步由 OS 释放文件解析器完成,源码位于 pkg/fanal/analyzer/os/release/release.go

该解析器会读取镜像中的 etc/os-releaseusr/lib/os-release 文件,逐行解析 NAMEIDVERSION_ID 三个字段,然后将 ID 通过 idToOSFamily 映射为内部 OS 类型。其中与本文主题直接相关的分支是:

case "coreos":
    return types.CoreOS

也就是说,只要目标系统的 os-release 中声明 ID=coreos,Trivy 就会将其归入 CoreOS 这个 OS 族(内部类型常量定义见 pkg/fanal/types/const.goCoreOS OSType = "coreos")。

这一点可以在测试用例中得到印证:解析器测试数据文件 pkg/fanal/analyzer/os/release/testdata/coreos 内容仅为两行:

ID=coreos
VERSION_ID=3.15.4

对应的单元测试(见 pkg/fanal/analyzer/os/release/release_test.go 中的 "CoreOS" 用例)期望解析结果为 Family: CoreOSName: "3.15.4"。这解释了 CoreOS 覆盖文档中“所有版本均支持”的判定来源:识别本身不依赖具体大版本,凡是 ID=coreos 且带有 VERSION_ID 的系统都会被归入该族。

SBOM 实现:从 RPM 数据库(含 SQLite)枚举软件包

覆盖文档在 SBOM 一节中给出的关键事实是:Trivy 检测的是 RPM 数据库中列出的软件包。这意味着 CoreOS / Fedora CoreOS 与 RHEL、CentOS、Rocky 等发行版共享同一套 RPM 包分析体系。

RPM 包解析器位于 pkg/fanal/analyzer/pkg/rpm/rpm.go,其 requiredFiles 列表刻画了不同发行版 RPM 数据库的常见存放位置:

// Berkeley DB
"usr/lib/sysimage/rpm/Packages",
"var/lib/rpm/Packages",

// NDB
"usr/lib/sysimage/rpm/Packages.db",
"var/lib/rpm/Packages.db",

// SQLite3
"usr/lib/sysimage/rpm/rpmdb.sqlite",
"var/lib/rpm/rpmdb.sqlite",

// CoreOS
"usr/share/rpm/rpmdb.sqlite",

注意最后一组带 // CoreOS 注释的路径:usr/share/rpm/rpmdb.sqlite。这正是 CoreOS / Fedora CoreOS 存放 RPM 数据库(SQLite 格式)的特殊位置。Fedora CoreOS 采用不可变(immutable)rootfs 设计,传统发行版的 var/lib/rpm 等路径并不适用,而 usr/share/rpm/rpmdb.sqlite 是其在 OSTree 布局下 RPM 数据库的实际落点。Trivy 通过把该路径显式加入 RPM 解析器的必需文件清单,才能在实际扫描中命中并解析出软件包清单。

解析流程上,RPM 解析器读取上述数据库文件后,借助 go-rpmdb 库列出全部已安装包及其版本信息,供后续 SBOM 组装使用。从源码结构看,CoreOS 家族在包分析层面复用了与 RHEL 系完全相同的实现,这保证了 SBOM 输出的包格式(名称、版本、架构、Epoch 等)的一致性与完整性。

实际使用示例

基于以上机制,你可以对 Fedora CoreOS / CoreOS Container Linux 的镜像或文件系统执行如下 SBOM 生成操作(示意,具体以当前 Trivy 版本 CLI 帮助为准):

# 对容器镜像生成 CycloneDX SBOM
trivy image --format cyclonedx --output coreos.cdx.json registry.example.com/fedora-coreos:stable

# 对已解包/挂载的 CoreOS rootfs 目录生成 SPDX SBOM
trivy fs --format spdx-json --output coreos.spdx.json /path/to/coreos/rootfs

从 Trivy 的扫描报告管线看,SBOM 产物支持 CycloneDX 与 SPDX 两类标准格式,输出中会以 OS 组件(coreos / 具体版本)打头,随后逐条列出从 RPM 数据库解析出的系统包。更完整的 SBOM 功能说明可参考 supply-chain SBOM 指南

为何不支持漏洞检测:占位扫描器的源码佐证

CoreOS 覆盖文档标注“Vulnerability: -”,其背后的工程原因在源码中非常直白。漏洞检测器注册表中为 CoreOS 注册了扫描器(见 pkg/detector/ospkg/detect.go),但该扫描器的实现位于 pkg/detector/ospkg/coreos/coreos.go,其核心方法几乎是一个空实现:

func (s *Scanner) Detect(ctx context.Context, _ string, _ *ftypes.Repository, _ []ftypes.Package) ([]types.DetectedVulnerability, error) {
    log.InfoContext(ctx, "Vulnerability detection of CoreOS packages is currently not supported.")
    return nil, nil
}

可以看出:

  1. Detect 直接打印日志“Vulnerability detection of CoreOS packages is currently not supported.”并返回空结果;
  2. 方法签名中 OS 版本、Repository、包列表参数全部被忽略(以下划线 _ 接收);
  3. IsSupportedVersion 虽然通过通用版本工具对版本做最小化解析,但由于 Detect 本身不产出任何漏洞,因此这一判断并不改变“无漏洞结果”的最终行为。

这解释了文档矩阵中 Vulnerability 一栏为“-”的真实原因:Trivy 的漏洞数据库(Vulnerability DB)并未为 CoreOS / Fedora CoreOS 维护独立的漏洞数据源,因而检测器只能作为占位存在,提示用户该能力暂不可用。作为对比,RHEL/CentOS 覆盖文档依赖的是 Red Hat 官方安全数据源,而 CoreOS 系缺少同等的上游数据源对应关系。

同理,许可证扫描(License)针对的是应用层语言包(如 npm、pip、Go modules 等)与文件内容,并不适用于 OS 级 RPM 包,因此该列同样为“-”。若需了解漏洞与许可证扫描在 Trivy 中的完整适用范围,可分别参考 漏洞扫描指南许可证扫描指南

支持的版本范围与适用边界小结

OS 覆盖索引中,CoreOS 一行的记录为:

OS Supported Versions Package Managers
CoreOS All versions (SBOM only) rpm

其页脚注释 [^3] 再次明确:该记录覆盖 Fedora CoreOS 与已弃用的 CoreOS Container Linux。综合文档与源码,可以总结出以下适用边界:

  • 识别条件:目标系统 os-releaseID=coreos 且存在 VERSION_ID;版本号不会被用于漏洞匹配,因此不存在“某版本不支持”的分流;
  • 软件包来源:全部来自 RPM 数据库,容器/文件系统中必须存在 usr/share/rpm/rpmdb.sqlite(或其他被支持的 RPM DB 路径)才能枚举出包;
  • 能力范围:SBOM 生成(CycloneDX / SPDX)可用;OS 层漏洞与许可证检测不可用;
  • 应用建议:若需对 Fedora CoreOS 节点做漏洞评估,应结合其上层应用容器镜像的漏洞扫描结果,或关注上游 Fedora CoreOS 自身的更新机制,而非依赖 Trivy 的 OS 漏洞匹配。

对于正在维护或迁移 CoreOS 系镜像的团队,本文梳理的检测链路与源码佐证可以帮助你在排障时快速判断“结果为空是预期行为,还是 RPM 数据库未被解析命中”,避免将架构边界误判为扫描故障。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.75 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
857
1.35 K
docsdocs
暂无描述
Markdown
897
5.81 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
531
596
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
920
1.84 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.79 K
1.02 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.36 K
1.46 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.02 K
519
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
548
390