You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JFrog Xray SBOM为何出现容器未安装的多版本RPM包?

问题解答

一、SBOM出现未安装RPM版本的原因

  • 镜像分层扫描的残留信息:Docker采用分层存储,你的构建过程(比如microdnf update操作)会产生临时层,这些层中可能存在旧版本RPM的安装记录。Xray会扫描镜像的所有层,而非仅最终运行层,所以会把中间层的旧版本也纳入SBOM,而rpm -qa只读取最终层的当前安装状态。
  • RPM数据库的历史记录:RPM的数据库(路径/var/lib/rpm)默认会保留安装、更新的历史条目,哪怕旧版本已被替换。Xray扫描时直接读取这个数据库的完整内容,包括历史记录,而rpm -qa仅返回当前活跃的包版本。
  • 依赖解析的范围扩展:Xray在解析包依赖时,会把满足依赖声明的所有兼容版本都列出。比如grafana.rpm可能声明依赖audit-libs >= 3.0.7-2.el8.2,Xray就会把所有符合该条件的版本(3.0.7-2.el8.2、3.0.7-4.el8、3.0.7-5.el8)都加入SBOM,哪怕实际系统只安装了最新的那个版本。

二、Artifactory Xray构建SBOM的核心机制

  • 分层遍历与提取:Xray会遍历Docker镜像的每一层文件系统,针对每层中的包管理器数据(如RPM的/var/lib/rpm目录、DEB的/var/lib/dpkg目录)进行提取,汇总所有层的包信息。
  • 包数据库深度解析:对于RPM,Xray直接解析RPM数据库的二进制文件,获取包的名称、版本、发布版、依赖关系等元数据,包括数据库中存储的历史操作记录(如果未被清理)。
  • 依赖链递归展开:针对每个已提取的包,Xray会递归解析其依赖声明,将所有满足依赖条件的包版本纳入SBOM范围,而非仅实际安装的特定版本。
  • 元数据整合与去重优化:最后将所有层的扫描结果、依赖解析结果进行整合,去除完全重复的条目,但保留不同版本的记录,最终生成包含完整包信息的SBOM。

内容的提问来源于stack exchange,提问作者Nick Yarn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 08:30:12