osv-scanner 离线模式完整指南:3 步配置漏洞数据库自动同步
【免费下载链接】osv-scannerVulnerability scanner written in Go which uses the data provided by https://osv.dev项目地址: https://gitcode.com/GitHub_Trending/os/osv-scanner
断网环境下的安全扫描常常卡在数据源上:osv-scanner 默认调用 OSV.dev 在线接口,一旦扫描机无法出网,漏洞比对就无从谈起。离线模式把比对数据换成本地数据库,配合自动同步脚本和定时任务,可以做到"联网时更新、断网时照常扫"。本文按首次部署、日常维护、断网应急、多机分发四个场景展开,读完后你能用一条命令拉取本地漏洞库、写出自带新鲜度判断的同步脚本,并在任意机器上验证数据库是否可用。
首次离线部署:本地漏洞库放在哪、怎么拿到
本地漏洞库的存放位置
离线模式下,osv-scanner 按生态(Ecosystem)划分本地数据库,每个子目录存放一个all.zip全量包:
{local_db_dir}/ npm/all.zip PyPI/all.zip {ecosystem}/all.zip{local_db_dir}由环境变量OSV_SCANNER_LOCAL_DB_CACHE_DIRECTORY指定;不设置时,默认按顺序查找系统用户缓存目录(Linux 上通常是~/.cache)和临时目录。
注意:启用
--offline后工具不会发起任何网络请求,本地库缺失时会直接报错,而不是回退到在线查询。该标志还会同时关闭依赖解析等联网功能,完整定义见 flags.go。
两种完成首次拉取的方式
- 一键拉取(推荐):在联网机器上执行,工具按当前扫描所需自动下载或更新本地库:
osv-scanner --offline --download-offline-databases ./your-project- 手动 HTTP 下载:只关心个别生态时,直接从 OSV 公共存储桶取包,全部可选生态见桶内的
ecosystems.txt索引文件:
mkdir -p "$HOME/.cache/osv-scanner/PyPI" curl -o "$HOME/.cache/osv-scanner/PyPI/all.zip" \ https://osv-vulnerabilities.storage.googleapis.com/PyPI/all.zip若只是漏洞比对离线、其余功能(如传递依赖解析)允许联网,把--offline换成--offline-vulnerabilities即可。细节参考 离线模式文档。
日常自动维护:同步脚本与跨平台定时任务
自动同步脚本的三个要点
一个可靠的定时同步脚本,核心逻辑只有三件事:
- 循环遍历预设生态列表(如
npm、PyPI、Go、Maven); - 新鲜度判断:现有
all.zip距今不足 24 小时则跳过; - 原子替换:先写入
all.zip.tmp临时文件,下载成功后再覆盖正式文件,避免半个文件被扫描程序读到。
DB_DIR="${OSV_SCANNER_LOCAL_DB_CACHE_DIRECTORY:-$HOME/.cache/osv-scanner}" for eco in npm PyPI Go Maven; do [ -n "$(find "$DB_DIR/$eco/all.zip" -mtime +1 2>/dev/null)" ] || continue curl -sSL "https://osv-vulnerabilities.storage.googleapis.com/$eco/all.zip" \ -o "$DB_DIR/$eco/all.zip.tmp" && mv "$DB_DIR/$eco/all.zip.tmp" "$DB_DIR/$eco/all.zip" done脚本中生态列表和下载源 URL 均可按实际需要替换,其余逻辑保持不变。
跨平台定时任务配置
- Linux(cron):
crontab -e新增一行,每天凌晨 3 点执行并追加日志:
0 3 * * * /path/to/sync_osv_db.sh >> /var/log/osv_sync.log 2>&1- Windows(任务计划程序):新建"基本任务",触发器设为每日;操作选"启动程序",命令写
cmd /c C:\path\to\sync_osv_db.bat >> C:\logs\osv_sync.log 2>&1。
断网应急:先确认漏洞库是新的且可用
执行一次验证扫描
在隔离机器上运行:
osv-scanner --offline ./your-project能正常输出漏洞列表或"未发现问题",即说明本地库有效,输出形态与在线扫描一致:
常见故障速查
| 现象 | 可能原因 | 处理方式 |
|---|---|---|
| 报本地数据库文件缺失 | 首次运行未下载 | 在联网环境执行一次--offline --download-offline-databases |
| 结果疑似漏报 | 数据库长期未同步 | 查同步日志;用find "$DB_DIR" -name all.zip -mtime +3检查更新时点 |
| 缓存目录权限错误 | OSV_SCANNER_LOCAL_DB_CACHE_DIRECTORY指向不可写路径 | 改到可写目录,或修正目录权限 |
⚠️ 下载中断会留下残留的{ecosystem}/all.zip.tmp,删除后重跑同步即可,下一次执行会自动完成替换。
进阶:企业内网镜像统一分发
多台扫描机各自对外拉取,既浪费出口带宽,又容易造成本地库版本不一致。推荐的做法是集中分发:
- 选一台联网机器部署同步脚本,每日从官方源拉取数据库;
- 用 Nginx 或任意文件服务把数据库目录暴露在固定路径下,如
http://internal-mirror/osv-scanner; - 各客户端同步脚本只改下载 URL 为镜像路径,目录结构仍是
{ecosystem}/all.zip,无需其他改动。
这样全公司使用同一版本漏洞库,日常只需盯住中央同步任务的健康状态。
离线模式的本质就是让 OSV 数据库"住"进你的机器:首次拉取、周期同步、断网验证三步闭环。现在就可以执行osv-scanner --offline --download-offline-databases ./your-project完成首次拉取,随后确认~/.cache/osv-scanner下已出现对应生态的all.zip。
【免费下载链接】osv-scannerVulnerability scanner written in Go which uses the data provided by https://osv.dev项目地址: https://gitcode.com/GitHub_Trending/os/osv-scanner
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考