使用 Trivy 扫描容器镜像:从安装到漏洞修复全记录
在日常容器安全运维中,漏洞扫描是不可或缺的一环。本文记录了一次在 麒麟 V10 系统上使用 Trivy 扫描 镜像的完整过程,包括工具安装、网络问题解决、常见报错处理以及最终漏洞分析与修复建议。
1. 环境准备:麒麟系统安装 Trivy
麒麟系统通常分为基于 Debian/Ubuntu 或基于 CentOS 两类。我们使用的环境为 Kylin Linux Advanced Server(yum 系),采用二进制包安装:
bash
# 下载最新版 Trivy 二进制包(以 amd64 为例) wget https://github.com/aquasecurity/trivy/releases/download/v0.69.2/trivy_0.69.2_Linux-64bit.tar.gz tar -xzf trivy_0.69.2_Linux-64bit.tar.gz sudo mv trivy /usr/local/bin/ trivy --version
若系统支持 apt,可添加官方仓库安装;离线环境推荐二进制方式。
2. 首次扫描:数据库下载超时
执行基础扫描命令:
bash
trivy image tomcat:9.0.110-jdk11
出现典型错误:
text
FATAL failed to download vulnerability DB: OCI artifact error: Get "https://mirror.gcr.io/v2/": dial tcp 173.194.202.82:443: connect: connection timed out
原因:默认数据库源 mirror.gcr.io 在国内访问不稳定。解决方案:改用国内镜像源。
3. 使用国内镜像源下载数据库
Trivy 支持通过参数指定漏洞库和 Java 库的镜像地址:
bash
trivy image \ --db-repository ghcr.nju.edu.cn/aquasecurity/trivy-db:2 \ --java-db-repository ghcr.nju.edu.cn/aquasecurity/trivy-java-db:1 \ tomcat:9.0.110-jdk11
南京大学 GHCR 镜像源速度较快,成功下载了约 90 MB 的漏洞库和 840 MB 的 Java 库。
4. 遇到的两个常见报错及解决方法
4.1 缓存锁错误
text
FATAL run error: ... cache may be in use by another process: timeout
原因:同时运行了多个 Trivy 进程,或上次扫描未正常释放锁。
解决:使用 --cache-backend memory 临时避开文件锁,或手动删除缓存锁文件 rm -rf ~/.cache/trivy/*.lock。
我们采用内存缓存模式:
bash
trivy image ... --cache-backend memory
4.2 扫描超时
text
FATAL ... context deadline exceeded
原因:Tomcat 镜像较大(含完整 JDK),默认超时(约 5 分钟)不足。
解决:增加超时时间至 30 分钟或更长。
最终完整可用的扫描命令:
bash
trivy image \ --db-repository ghcr.nju.edu.cn/aquasecurity/trivy-db:2 \ --java-db-repository ghcr.nju.edu.cn/aquasecurity/trivy-java-db:1 \ --cache-backend memory \ --timeout 30m \ tomcat:9.0.110-jdk11
5. 扫描结果解读
扫描完成后,Trivy 输出了汇总表和详细漏洞列表。
5.1 总览
| 目标 | 类型 | 漏洞数 |
|---|---|---|
| tomcat:9.0.110-jdk11 (Ubuntu 24.04) | 操作系统 | 86 |
| 各类 Tomcat JAR 包 | Java 依赖 | 3 |
-
系统漏洞:LOW 36 / MEDIUM 41 / HIGH 9 / CRITICAL 0
-
Java 漏洞:LOW 1 / MEDIUM 1 / HIGH 1
5.2 高危漏洞(需优先修复)
Java 组件
| 组件 | CVE | 严重度 | 当前版本 | 修复版本 |
|---|---|---|---|---|
tomcat-coyote.jar | CVE-2026-24734 | HIGH | 9.0.110 | 9.0.115 |
说明:该漏洞与 OCSP 证书撤销检查绕过有关,可被中间人攻击利用。建议立即升级 Tomcat 至 9.0.115+。
系统包
| 软件包 | CVE | 严重度 | 修复版本 |
|---|---|---|---|
dirmngr / gnupg | CVE-2025-68973 | HIGH | 2.4.4-2ubuntu17.4 |
其他中风险漏洞涉及 curl、openssl、libssh、libpng 等,均可通过系统包更新修复。
5.3 暂无补丁的漏洞
-
libexpat1CVE-2025-66382(MEDIUM,仍为 affected) -
tarCVE-2025-45582(MEDIUM) -
wgetCVE-2021-31879(MEDIUM,很老的漏洞)
对于此类漏洞,需关注官方更新或考虑移除不必要的组件。
6. 漏洞修复建议
6.1 立即修复高危漏洞
① 升级 Tomcat 版本
修改 Dockerfile:
dockerfile
FROM tomcat:9.0.115-jdk11 # 或更高版本
② 更新系统所有可升级的包
在 Dockerfile 中添加:
dockerfile
RUN apt-get update && apt-get upgrade -y && apt-get clean
重建镜像后重新扫描验证。
6.2 长期措施
-
集成 CI/CD:在构建流水线中加入 Trivy 扫描步骤,设置
--exit-code 1 --severity HIGH,CRITICAL阻断高危漏洞发布。 -
定期更新基础镜像:每周或每月重新拉取上游 Tomcat 镜像并扫描。
-
离线环境维护:使用
trivy --download-db-only和--download-java-db-only预先下载数据库,配合--skip-db-update在内网扫描。
7. 总结
本次实战覆盖了 Trivy 在国产操作系统上的安装、国内网络环境下的数据库源配置、典型错误(锁、超时)的排查,以及对一份真实扫描报告的分析与修复。最终结论:
-
✅ 镜像无 CRITICAL 漏洞,安全状况尚可;
-
⚠️ 存在 1 个 Tomcat 高危漏洞和 9 个系统高危漏洞,建议尽快升级;
-
📌 建立自动化扫描流程,将安全左移。
希望这篇记录能帮助你在自己的容器环境中顺利落地 Trivy 扫描。如果有更多问题,欢迎交流讨论。
附录:常用 Trivy 命令速查
bash
# 国内镜像 + 内存缓存 + 长超时
trivy image --db-repository ghcr.nju.edu.cn/aquasecurity/trivy-db:2 \
--java-db-repository ghcr.nju.edu.cn/aquasecurity/trivy-java-db:1 \
--cache-backend memory --timeout 30m <image>
# 仅扫描高危及以上漏洞,并返回非零退出码(用于 CI)
trivy image --severity HIGH,CRITICAL --exit-code 1 <image>
# 跳过数据库更新(离线使用)
trivy image --skip-db-update --skip-java-db-update <image>
更多推荐
所有评论(0)