开源扫描器接进门禁
Trivy 用一个命令扫描镜像里的系统包与应用依赖,输出按级别归类的漏洞清单,并且支持仅看高危、跳过暂无修复方案的条目、以及用退出码让流水线在发现问题时直接失败。扫描对象可以是镜像、文件系统,也可以是依赖清单文件。首次使用需要下载漏洞库,隔离环境要先预置缓存或自建镜像源,否则流水线第一次运行容易卡在下载上。
基本信息
| 扫描对象 | 容器镜像、文件系统、依赖清单 |
|---|---|
| 常用参数 | --severity / --ignore-unfixed / --exit-code / --format |
| 离线准备 | 预置漏洞库缓存,或指向内部镜像源 |
| 门禁用法 | --exit-code 1 配合级别过滤,命中即失败 |
典型使用场景
- 发布门禁:镜像推送前扫描,出现严重漏洞就中断流水线
- 基础镜像选型:对比候选镜像的漏洞分布再决定用哪个
- 存量复查:定期重扫已发布镜像,发现新披露的问题
- 修复验证:升级依赖后重扫,确认目标漏洞消失
- 结果归档:以 JSON 格式输出并随发布记录保存,便于回溯
扫描与门禁
扫描与门禁
# 只看高危与严重级别,并跳过暂无修复方案的项
trivy image --severity HIGH,CRITICAL --ignore-unfixed nginx:1.27-alpine
# 作为门禁:命中严重漏洞时让命令以非零码退出
trivy image --exit-code 1 --severity CRITICAL app/web:1.4.2 && echo scan-pass
# 输出结构化结果便于归档与比对
trivy image --format json --output scan.json app/web:1.4.2
# 扫描文件系统与依赖清单
trivy fs --severity HIGH,CRITICAL ./常用参数对照
| 参数 | 作用 | 注意事项 |
|---|---|---|
| --severity HIGH,CRITICAL | 按级别过滤结果 | 先收窄范围再逐级放宽更实用 |
| --ignore-unfixed | 跳过暂无修复方案的项 | 需配合例外清单定期复核 |
| --exit-code 1 | 发现问题时命令失败 | 接入流水线门禁的关键参数 |
| --format json | 结构化输出 | 便于归档、比对与二次分析 |
漏洞库会持续更新,同一镜像在不同日期扫描结果可能不同,对比结论时要带上扫描时间与镜像摘要。
扫描发现的漏洞要回到基准镜像与依赖升级上解决,只保留报告不做修复,问题会一直随镜像流转。