sbom-tools 上手指南:3 条命令拿到你的第一份 SBOM
2026/8/23 16:29:05 网站建设 项目流程

sbom-tools 上手指南:3 条命令拿到你的第一份 SBOM

【免费下载链接】sbom-toolsA tools named sbom-tools, designed for generating the sbom file.项目地址: https://gitcode.com/openeuler/sbom-tools

上次处理漏洞通报,我们要把容器镜像里的库一个个手工列出来——镜像里没有"成分表",谁也说不清里面装了哪些版本的库。sbom-tools 是 openEuler 社区的 SBOM 生成与依赖分析工具集,它能把容器镜像或本地项目扫描一遍,自动输出一份列出全部组件及其许可证的软件物料清单(SBOM)。

工具链全景

sbom-tools 仓库是一套开源 SBOM 工具合集,里面其实装着三个模块,分工很明确:syft 负责扫描容器镜像和本地目录来生成 SBOM;ort(OSS Review Toolkit)负责解析源码项目的依赖树并做许可证合规检查;sbom-tracer 基于 eBPF 在构建过程中实时追踪依赖下载行为。先看这张表建立"谁干什么"的心智模型:

组件核心职责典型命令
syft从容器镜像或本地目录生成 SBOMsyft alpine:latest
ort项目依赖分析、许可证合规检查ort analyze -i ./project
sbom-tracer构建过程依赖下载实时追踪sbom_tracer -s "make build"

上图是 ort 组件在 CI 环境里跑 analyze → scan → evaluate 流水线的过程,各阶段的分工一眼就能看明白。

一条命令生成 SBOM:从零拿到首份结果

最短路径就一条 syft 命令:它拉取 alpine:latest 镜像,把里面所有包扫出来,结果写到当前目录的 sbom.json。

syft alpine:latest -o json=sbom.json

这就是你的第一份 SBOM——打开 sbom.json 能看到镜像里每个包的版本和许可证,熟悉之后一次 SBOM 生成只要一分钟。如果还没装 syft,先 clone 项目,三个模块都在里面:

git clone https://gitcode.com/openeuler/sbom-tools

然后按平台选一种安装方式,sbom-tools 安装本身很轻量:

  • Linux / macOS:clone 后运行自带的安装脚本sh sbom-generator/install.sh -b /usr/local/bin
  • macOS Homebrewbrew install syft
  • ort 从源码构建:在 sbom-ort 目录执行docker build -t ort .(需要 Docker)
  • sbom-tracer:执行bash sbom-tracer/install.sh,仅支持 Linux,需要 root

三个高频场景实操:容器镜像、本地目录、格式转换

装好 sbom-tools 后,按下面三个场景走一遍,输出都是可直接归档的文件。

手头是一个容器镜像。syft 扫描容器镜像生成 SBOM,敲:

syft docker.io/library/nginx:1.25 -o cyclonedx-json=nginx.cdx.json

得到 CycloneDX 格式的 SBOM,每个包的版本、许可证、所属镜像层都写在结果文件里。

手头是一个本地项目目录。敲:

syft dir:. -o json=project-sbom.json

扫完当前目录,输出 project-sbom.json,包含项目里找到的全部库及其许可证。

手头是一份 syft 格式的 SBOM,下游工具却要 CycloneDX。敲:

syft convert project-sbom.json -o cyclonedx-json=project.cdx.json

转换不需要重新扫描项目,结果写进 project.cdx.json。

把 SBOM 接进 CI/CD 与合规流程

第一件事是让 CI 在每次推送时自动生成 SBOM 并归档,下面这个 GitHub Actions workflow 做的就是这件事:

name: Generate SBOM on: [push] jobs: sbom: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Generate SBOM run: | brew install syft syft dir:. -o json=sbom.json - uses: actions/upload-artifact@v3 with: {name: sbom, path: sbom.json}

一共 13 行,把扫描路径换成你自己的项目目录就能用。第二件事是许可证合规检查,由 sbom-tools 的核心组件 ort 分三步完成:

  • analyze解析项目的依赖关系,产出 analyzer-result.yml
  • scanner识别每个依赖的许可证,产出 scan-result.yml
  • evaluator按你的策略判定并标出违规项

假设前面已构建好 ort 镜像,依次执行:

docker run -v $(pwd):/project ort analyze -i /project -o /project/ort/analyzer docker run -v $(pwd):/project ort scanner -i /project/ort/analyzer/analyzer-result.yml -o /project/ort docker run -v $(pwd):/project ort evaluator -i /project/ort/scan-result.yml -o /project/ort

这就是 evaluate 阶段的产出样子:GPL-3.0 这类 copyleft 违规会被点名列出。想细化 syft 的扫描范围和输出,可看 sbom-generator/README.md 里的 .syft.yaml 配置说明;想实时捕获构建实际下载了什么,可看 sbom-tracer/README.md 的 eBPF 追踪方案。

踩坑速查

使用 sbom-tools 最常碰到的三个问题,都是一条命令的事:

  • 私有镜像扫描报 401/403——syft 默认读取本机 Docker 凭证,私有仓库没登录过。先跑一次docker login registry.example.com,再扫描就通了。
  • 本地目录扫描太慢、条目太多——原因是 node_modules、vendor 这类大目录被扫进来了。给命令加上--exclude './node_modules/**' --exclude './vendor/**'即可。
  • 大镜像扫描超时——默认逐层扫描,加上--scope sq-only只扫压平后的最终层,耗时会明显下降。

收尾

什么时候用 sbom-tools?只需要一份组件清单,syft 一条命令就够;还要许可证合规结论,就走 ort 三步流程;想盯住构建过程实际下载了什么,再上 sbom-tracer。三个模块的文档就放在这里,随时可以翻:

  • sbom-generator README
  • sbom-ort README
  • sbom-tracer README

【免费下载链接】sbom-toolsA tools named sbom-tools, designed for generating the sbom file.项目地址: https://gitcode.com/openeuler/sbom-tools

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询