在安全运维或漏洞扫描工作中,OpenVAS(现已更名为 GVM)是常用的开源漏扫工具。然而,当它突然无法启动,且连 apt 都无法正常安装任何工具时,问题往往出在软件源配置上。本文基于一次真实的故障排查经历,结合编程开发中常见的依赖管理思路(类似 JavaScript 的 npm 或 Go 的 module 管理),详细记录从日志分析到源修复、再到服务重启的完整流程。

故障现象:OpenVAS 突然打不开,apt 也无法下载任何工具

某天,当你像往常一样运行 gvm-start 或访问 Web 界面时,发现 OpenVAS 无法响应。更糟糕的是,连 apt install 任何工具都会报错“包无法定位”或“下载失败”。这通常不是 OpenVAS 本身的问题,而是底层系统(Debian/Ubuntu)的 APT 源配置出错,导致依赖无法解析。

在编程开发中,类似问题好比 npm install 时 registry 不可用,或 Go 项目中的 go mod tidy 因代理失效而失败。解决思路是一致的:先定位源,再修复依赖。

第一步:日志分析与问题定位

首先,查看 GVM 相关服务的日志。常见的日志路径包括 /var/log/gvm/ 或通过 journalctl -u gvmd 查看。你会发现类似“无法连接到数据库”或“初始化失败”的错误,但根本原因往往是系统缺少关键依赖包,而这些包无法通过 apt 获取。

进一步检查 apt update 的输出:如果出现 404 Not FoundRepository is not signed,说明源已失效。例如,Debian 旧版本(如 Buster、Bullseye)的官方源可能已迁移到 archive.debian.org。这正是故障的核心:APT 源指向了已下线的镜像,导致所有包无法下载

第二步:备份并修改 APT 源配置

修复过程需要谨慎,建议先备份。操作步骤如下:

  1. 进入容器/系统命令行:如果是 Docker 容器,执行 docker exec -it <container_id> bash
  2. 备份源文件cp /etc/apt/sources.list /etc/apt/sources.list.bak
  3. 修改 sources.list:将 deb.debian.org 替换为 archive.debian.org。例如:
    deb http://archive.debian.org/debian/ buster main contrib non-free
  4. 屏蔽额外配置文件:检查 /etc/apt/sources.list.d/ 目录,将其中所有包含 deb.debian.org 的 .list 文件重命名(如加 .disabled 后缀)或删除。

⚠️ 注意:直接修改 sources.list 有时无效,因为系统可能从其他 .list 文件读取了错误的源。务必检查并屏蔽所有额外源。

Starting Postfix for report delivery by email
GVM Started but with > supervisor <
2026-03-02 09:13:44,768 INFO Set uid to user 0 succeeded
2026-03-02 09:13:46,824 INFO RPC interface 'supervisor' initialized
2026-03-02 09:13:46,824 CRIT Server 'inet_http_server' running without any HTTP

上述代码片段展示了如何批量处理额外源文件。完成后,执行 apt update,此时应该能正常获取包列表。

第三步:修复依赖并重启 GVM 服务

源修复后,需要安装或更新缺失的依赖包。执行:

apt upgrade -y
apt install --fix-broken -y

然后重启 GVM 相关服务:

systemctl restart gvmd
systemctl restart gsad
systemctl restart ospd-openvas

如果服务启动失败,优先检查 gvmd(核心管理守护进程)的日志。常见错误包括数据库版本不匹配或权限问题。此时可能需要重新初始化数据库:

gvm-manage-certs -a
gvmd --migrate

在编程开发中,这类似于 Python 项目的虚拟环境重建或 C++ 项目的 CMake 缓存清理——都是修复依赖状态的标准操作。

第四步:验证 GVM 可用性

服务重启后,通过以下方式验证:

  • Web 界面:访问 https://<your-ip>:9392,看是否出现登录页面。
  • 命令行gvm-check-setup 检查配置完整性。
  • 扫描测试:创建一个简单的扫描任务,确认能正常执行。

如果仍有非核心组件报错(如 ospd-openvas 启动失败),但 gvmd 和 Web 界面正常工作,可以暂时忽略。这类问题往往不影响核心扫描功能。

最终成果与总结

经过上述步骤,OpenVAS 的核心功能已完全恢复。故障的根本原因是 APT 源指向了已下线的镜像,导致所有依赖包无法下载。通过切换到归档源并屏蔽错误配置,问题得到解决。

这次排查也提醒我们:在维护任何系统时,源配置 是基础中的基础。无论是 JavaScript 的 npm registry、TypeScript 的 tsconfig 路径映射,还是 Go 的 GOPROXY,错误的源头配置都会导致整个依赖链崩溃。建议定期检查源的有效性,并保留一份备份配置。

[AFFILIATE_SLOT_1]

如果你在修复过程中遇到其他问题,比如 gvmd 数据库迁移失败,可以尝试完全重置数据库(但会丢失已有扫描结果)。对于生产环境,建议先备份 /var/lib/gvm/ 目录。

[AFFILIATE_SLOT_2]

常见问题速查

  • Q: 为什么 apt update 成功但安装包还是失败?
    A: 可能是归档源中不包含最新版本,需要添加 backports 源或使用特定版本号。
  • Q: 重启后 gvmd 仍无法启动?
    A: 检查 journalctl -u gvmd -n 50 日志,常见原因包括 PostgreSQL 版本不匹配或证书过期。
  • Q: 能否完全避免这类问题?
    A: 可以将 APT 源配置为镜像站(如阿里云、清华源),并定期执行 apt update 自动检查。

最后,如果你使用的是 Docker 容器部署的 OpenVAS,建议将源修复步骤写入 Dockerfile 或启动脚本,以便重建容器时自动应用。类似地,在 Python 项目中,将固定版本的依赖写入 requirements.txt;在 C++ 项目中,使用 Conan 或 vcpkg 管理第三方库——这些最佳实践都能有效减少环境依赖问题。