
Trivy 如何扫描远程 Git 仓库以及如何用 TMPDIR 改变克隆目录【免费下载链接】trivyFind vulnerabilities, misconfigurations, secrets, SBOM in containers, Kubernetes, code repositories, clouds and more项目地址: https://gitcode.com/GitHub_Trending/tr/trivy当仓库托管在远端而不是已克隆到本地时可以直接用 Trivy 的trivy repo子命令传入仓库 URL让它完成克隆、扫描并输出漏洞与密钥结果。这个流程还有一个常见的坑Trivy 在扫描远程 Git 仓库时会先把仓库克隆到/tmp目录下的临时目录如果/tmp不可用权限不足、磁盘空间不足、文件系统限制等克隆就会失败并终止整个扫描。此时可以通过设置TMPDIR环境变量把克隆目录改到别的位置。本文依据项目文档 代码仓库扫描 与 故障排查 中的说明给出从执行远程仓库扫描到处理/tmp克隆错误的完整操作路径。准备条件已安装可用的 Trivy。文档 First steps with Trivy 给出了常见安装方式例如 macOS 上brew install trivy、通过docker run aquasec/trivy运行或从 Release 下载二进制文件完整选项见 安装指南。要扫描的远程仓库 URLHTTP/HTTPS 形式。私有仓库还需要有访问权限的 token后文会说明。扫描远程 Git 仓库trivy repo接受本地路径或远程 URL 作为目标trivy repo (REPO_PATH | REPO_URL)扫描远程仓库时直接传入 URL 即可文档给出的示例是$ trivy repo https://github.com/aquasecurity/trivy-ci-test默认启用的扫描器是漏洞vuln和密钥secret两项CLI 参考中--scanners的默认值即[vuln,secret]。漏洞检测基于Gemfile.lock、package-lock.json、Pipfile.lock等 lock 文件进行。扫描结果以表格形式输出按 lock 文件分组并给出漏洞总数与各严重级别的统计文档中的一段示例输出文档示例实际数值随仓库和数据库版本变化Pipfile.lock Total: 10 (UNKNOWN: 2, LOW: 0, MEDIUM: 6, HIGH: 2, CRITICAL: 0) -------------------------------------------------------------------------------------------------------------------------------- | LIBRARY | VULNERABILITY ID | SEVERITY | INSTALLED VERSION | FIXED VERSION | TITLE | -------------------------------------------------------------------------------------------------------------------------------- | django | CVE-2020-7471 | HIGH | 2.0.9 | 3.0.3, 2.2.10, 1.11.28 | django: potential | | | | | | | SQL injection via | | | | | | | StringAgg(delimiter) | ---------------------------- ------------------------------------------------------------ ...扫描 git 仓库无论本地还是远程时Trivy 会自动提取 git 元数据仓库 URL、分支名、tag、commit 的 hash/信息/提交者、作者等并包含在结果中。使用 JSON 格式输出时元数据位于Metadata字段$ trivy repo --format json repo-name其中repo-name替换为你的仓库路径或 URL。指定分支、commit 或 tag代码仓库扫描文档 在 References 一节给出了针对远程仓库的三个参数值必须是对应远端仓库中实际存在的分支/commit/tag# 扫描指定分支 $ trivy repo --branch branch-name repo-name # 扫描到某个 commit 为止 $ trivy repo --commit commit-hash repo-name # 扫描指定 tag $ trivy repo --tag tag-name repo-nameCLI 参考 对三个参数的描述分别是--branch传入要扫描的分支名--commit传入要扫描的 commit hash--tag传入要扫描的 tag 名。按需切换扫描器默认只跑 vuln 和 secret。如果需要其他类别用--scanners指定允许值vuln,misconfig,secret,license# 启用 IaC 配置错误检测默认关闭 $ trivy repo --scanners misconfig (REPO_PATH | REPO_URL) # 启用许可证检测默认关闭 $ trivy repo --scanners license (REPO_PATH | REPO_URL)扫描私有仓库扫描私有 GitHub 或 GitLab 仓库时必须分别设置GITHUB_TOKEN或GITLAB_TOKEN环境变量值为对目标私有仓库有访问权限的有效 token$ export GITHUB_TOKENyour_private_github_token $ trivy repo your private GitHub repo URL # 或 $ export GITLAB_TOKENyour_private_gitlab_token $ trivy repo your private GitLab repo URL文档特别指出GITHUB_TOKEN的优先级高于GITLAB_TOKEN。如果目标是私有 GitLab 仓库必须把GITHUB_TOKEN保持未设置否则不会用到 GitLab token。用 TMPDIR 改变克隆目录触发问题远程仓库扫描失败的典型报错在 故障排查文档 中记录为FATAL repository scan error: scan error: unable to initialize a scanner: unable to initialize a filesystem scanner: git clone error: write /tmp/fanal-remote...其原因是 Trivy 在扫描之前会把远程 Git 仓库克隆到/tmp目录下的临时目录/tmp不可用时写文件失败扫描随之终止。解决方法把TMPDIR环境变量指向一个可用的目录Trivy 就会在那里创建克隆的临时目录$ TMPDIR/my/custom/path trivy repo ...示例中的/my/custom/path是文档占位写法替换为你选定的、当前用户可写的目录路径即可。命令执行后扫描不再因写入/tmp而报git clone error后续流程与正常远程扫描一致结果验证方式也与前文相同表格输出或--format json检查Metadata字段。限制与注意事项trivy repo的定位是扫描代码仓库面向的是 lock 文件这类依赖清单不面向 JAR 文件、二进制文件等构件与容器/VM 镜像扫描不同详见漏洞扫描文档中语言包部分的说明。扫描 git 仓库时Trivy 会用最新 commit hash 作为 key 把分析结果存入扫描缓存如果仓库处于 dirty 状态有未提交改动缓存不会使用否则会漏掉未提交的文件。缓存机制细节见缓存文档。TMPDIR只影响克隆/临时目录的位置不改变扫描逻辑与结果如果换目录后仍然空间不足需要确认所选分区有足够容量。完成以上步骤后你可以用默认扫描器或按需组合的--scanners对远程仓库持续做漏洞与密钥检查遇到克隆目录问题时用TMPDIR重定向临时目录即可恢复扫描。【免费下载链接】trivyFind vulnerabilities, misconfigurations, secrets, SBOM in containers, Kubernetes, code repositories, clouds and more项目地址: https://gitcode.com/GitHub_Trending/tr/trivy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考