 完整指南与避坑实践)
1. 项目概述最近在给团队搭建一个内网安全评估环境手头正好有一台刚装好的Kali Linux 2024.4。作为渗透测试和漏洞管理的标配GVMGreenbone Vulnerability Management也就是大家更熟悉的OpenVAS自然是绕不开的核心工具。但说实话每次在新系统上部署GVM都像是一次“开盲盒”——官方源、依赖冲突、数据库版本、初始化失败各种坑层出不穷。网上的教程要么是几年前的旧版本要么步骤跳跃太大对新手极不友好。这次我决定把从零开始在Kali 2024最新版上完整安装、配置GVM并成功启动扫描的整个过程连同踩过的每一个坑和对应的填坑方法都详细记录下来。这份指南的目标很明确让你能跟着步骤一步步走避开所有常见的陷阱最终得到一个稳定、可用的GVM环境无论是用于学习、演练还是内部安全评估都能直接上手。2. 核心需求与方案选型解析2.1 为什么在Kali 2024上安装GVM依然是个“技术活”你可能觉得Kali作为安全领域的“瑞士军刀”预装了海量工具装个GVM还不是apt install一句话的事现实恰恰相反。Kali的滚动更新机制和追求“最新”的特性与GVM这套相对庞大、依赖复杂的系统之间存在着微妙的版本博弈。GVM的核心组件如gvmd管理器、gvmd扫描器和openvas-scanner对PostgreSQL数据库、Redis以及特定的库文件版本有严格的要求。而Kali的默认源可能提供的是较新的、但未经GVM充分测试的依赖版本这就导致了安装后无法启动、服务崩溃、数据库连接失败等一系列问题。因此我们的核心需求不仅仅是“安装”而是“安装并成功配置一个能稳定运行的GVM服务”。2.2 方案对比一键脚本 vs 手动编译 vs 官方源安装面对GVM的安装通常有三种主流思路各有优劣使用社区一键安装脚本网上能找到一些gvm-install.sh之类的脚本。优点是省心理论上一条命令搞定。缺点也明显脚本可能过时无法适配Kali 2024的最新库脚本执行过程不透明一旦出错排查难度极大脚本通常会修改系统全局配置可能带来潜在冲突。对于追求可控性和学习目的来说不推荐。从源码手动编译安装这是最灵活、最能适配特定系统环境的方法可以精确控制每个组件的版本。但过程极其繁琐需要手动解决数十个依赖编译耗时漫长动辄数小时且极易在编译过程中因依赖问题失败。除非有极特殊的定制化需求否则在Kali上不推荐。通过Kali官方/Greenbone社区源安装这是本文推荐的方法。Kali官方仓库和Greenbone社区都维护了针对Debian/Kali的预编译包。通过配置正确的软件源我们可以用apt命令来安装兼顾了便捷性和稳定性。我们的核心策略就是优先使用Kali官方整合的gvm元包当遇到版本冲突时则引入Greenbone社区源来获取更匹配的组件版本。这个方案既能利用包管理器的依赖解决能力又通过源控制规避了版本陷阱。2.3 环境准备与关键决策点在开始之前有几个关键决策点需要明确这直接决定了后续步骤的走向全新系统还是已有环境本文假设在一个新安装的Kali Linux 2024.4虚拟机上操作。如果你的系统已经安装过旧版GVM或进行过复杂配置强烈建议先备份重要数据然后考虑使用快照恢复或全新安装避免残留配置导致问题。资源分配GVM运行起来比较吃资源。建议虚拟机至少分配4核CPU、8GB内存、80GB磁盘空间。初始化漏洞数据NVTs需要大量磁盘IO和网络下载空间不足是导致失败的常见原因。网络环境整个安装过程需要从外网下载数百MB甚至上GB的数据系统更新、软件包、NVTs。务必保证网络通畅且能访问http.kali.org、packages.greenbone.net等源地址。如果身处特殊网络环境可能需要配置HTTP/HTTPS代理。3. 系统准备与依赖环境搭建3.1 初始系统更新与清理第一步不是直接安装GVM而是确保你的Kali系统是最新且干净的。打开终端依次执行以下命令sudo apt update sudo apt full-upgrade -y sudo apt autoremove -y sudo apt autoclean这里解释一下为什么用full-upgrade而不仅仅是upgradefull-upgrade会处理因新版本依赖关系而需要安装或移除的包更适合跨版本的系统升级能更彻底地更新所有组件。autoremove和autoclean则清理无用的依赖包和旧的软件包缓存释放磁盘空间。注意full-upgrade可能会重启某些系统服务最好在操作前保存好所有工作。整个更新过程取决于网速可能需要十几分钟到半小时。3.2 解决潜在的PostgreSQL版本冲突这是GVM安装中最经典的“坑”。GVM从某个版本开始强制要求PostgreSQL的版本至少为13。而Kali 2024.4默认安装的PostgreSQL版本可能是15或16。虽然版本更高但GVM的某些脚本或配置可能仍固执地寻找版本13的套接字或数据目录导致服务启动失败。我们的策略不是降级PostgreSQL而是确保GVM组件能与现有高版本PostgreSQL兼容。首先检查当前PostgreSQL状态和版本sudo systemctl status postgresql psql --version如果PostgreSQL服务是active (running)并且版本高于13那么通常可以继续。但为了保险起见我们需要安装GVM所需的PostgreSQL开发库并明确告诉系统我们使用现有的PostgreSQL服务sudo apt install -y postgresql postgresql-contrib postgresql-server-dev-all3.3 安装核心依赖与工具GVM的运行需要一系列支撑服务和支持库。一次性安装它们sudo apt install -y curl wget gnupg net-tools rsync bison libpcap-dev libgpgme-dev libssh-gcrypt-dev libhiredis-dev libxml2-dev libpopt-dev libunistring-dev gnutls-bin cmake pkg-config libglib2.0-dev libical-dev perl-base heimdal-dev libperl-dev libpq-dev xsltproc libksba-dev libsnmp-dev python3-polib python3-paramiko python3-lxml python3-defusedxml python3-pip redis-server这个命令安装了编译工具、网络工具、数据库客户端以及Python3的相关库。其中redis-server是GVM用于任务队列和缓存的关键服务务必确保它被正确安装并启动。4. GVM核心组件安装与配置4.1 添加Greenbone社区软件源关键步骤如前所述为了获得兼容性更好的GVM组件包我们需要添加Greenbone官方维护的社区源。这里我们使用Greenbone社区为Debian/Kali准备的稳定版仓库。导入Greenbone的GPG密钥用于验证软件包签名sudo wget -O /usr/share/keyrings/greenbone-archive-keyring.gpg https://packages.greenbone.net/archive/keyring.gpg添加社区源到APT源列表。这里注意我们要添加的是针对bookwormDebian 12的源因为Kali 2024基于此。创建文件/etc/apt/sources.list.d/greenbone-community-stable.listecho deb [signed-by/usr/share/keyrings/greenbone-archive-keyring.gpg archamd64] https://packages.greenbone.net/community/debian/bookworm main | sudo tee /etc/apt/sources.list.d/greenbone-community-stable.list更新软件包列表使新添加的源生效sudo apt update执行后你应该能在更新过程中看到来自packages.greenbone.net的索引信息。4.2 安装GVM完整套件现在我们可以安装GVM的完整元包了。这个包会拉取管理器、扫描器、前端GSAD等所有必要组件。sudo apt install -y gvm安装过程会提示你配置postgresql和redis-server通常选择默认选项即可。安装程序会自动创建_gvm系统用户和用户组并设置必要的目录权限。实操心得安装过程中如果出现类似“无法定位软件包 gvm”的错误说明上一步添加的Greenbone源没有生效或者你的系统代号与bookworm不匹配。可以检查/etc/os-release文件确认系统版本并核对源地址是否正确。4.3 初始化GVM系统最耗时步骤安装完软件包GVM还只是一个空壳核心的漏洞测试规则NVTs、扫描配置SCAP/CERT数据等都需要下载和初始化。这是整个流程中最耗时的一步可能持续30分钟到2小时完全取决于你的网络速度和磁盘IO性能。使用gvm-setup脚本进行初始化sudo gvm-setup这个脚本会自动执行以下操作检查并配置PostgreSQL数据库创建gvmd数据库和用户。下载最新的网络漏洞测试NVT数据包这是漏洞扫描的核心规则库。下载SCAP安全内容自动化协议和CERT计算机应急响应小组数据用于合规性检查和已知漏洞匹配。设置gsadGreenbone安全助手守护进程即Web界面的初始配置。生成默认的SSL证书用于Web界面加密通信。在这个过程中请保持耐心并确保网络稳定如果中途断网初始化会失败可能需要清理后重来。磁盘空间充足检查磁盘空间df -h确保/var目录下有至少20GB的剩余空间。不要中断进程在控制台会看到大量日志输出这是正常的除非出现明确的错误信息并停止否则不要用CtrlC中断。4.4 启动GVM所有服务初始化成功后使用gvm-start命令一键启动所有相关服务sudo gvm-start这个命令会按顺序启动redis-server、postgresql、gvmd管理器、gsadWeb服务和openvas-scanner扫描器。你可以用以下命令检查各个服务的状态sudo systemctl status gvmd gsad openvas-scanner如果看到active (running)的状态恭喜你核心服务已经跑起来了。4.5 修改管理员密码并首次登录默认情况下gvm-setup会创建一个用户名为admin密码也为admin的超级管理员账户。出于安全考虑首次登录后必须立即修改密码。修改admin用户密码这里将新密码改为YourStrongPassword123!请务必替换sudo runuser -u _gvm -- gvmd --useradmin --new-passwordYourStrongPassword123!打开浏览器访问GVM的Web界面。地址是https://127.0.0.1:9392。注意是HTTPS协议。浏览器可能会提示SSL证书不安全因为使用的是自签名证书这是正常的点击“高级”或“继续前往”即可。使用用户名admin和你刚设置的新密码登录。5. 深度配置与优化调优5.1 配置数据库同步与数据更新GVM的强大在于其庞大的、持续更新的漏洞数据库。安装完成只是开始必须配置自动更新才能保证扫描的有效性。Greenbone提供了greenbone-feed-sync工具来同步各类数据。首次手动同步在终端执行以下命令下载所有数据。这又是一次漫长的下载过程。sudo greenbone-feed-sync --type all这个过程会同步NVTs、SCAP、CERT、GVMD数据报告格式、端口列表等和SCAP数据。配置定时自动更新为了免去手动更新的麻烦我们可以设置一个系统定时任务cron job。编辑root用户的crontabsudo crontab -e在文件末尾添加以下行表示每天凌晨3点自动同步所有数据0 3 * * * /usr/bin/greenbone-feed-sync --type all --compression-level9--compression-level9表示使用最高压缩比可以节省一些带宽。5.2 调整扫描器性能参数默认配置下的openvas-scanner可能不适合你的硬件环境。调整其配置可以优化扫描速度和稳定性。配置文件位于/etc/openvas/openvas.conf或/etc/gvm/openvas-scanner.conf取决于版本。需要关注的关键参数在配置文件中找到并修改max_hosts: 同时扫描的最大主机数。默认值通常为30对于性能较弱的机器可能过高可降低到10-15。max_checks: 同时进行的最大漏洞检查数。默认值通常为10也可以根据CPU核心数调整。建议设置为CPU逻辑核心数的1.5到2倍。plugins_timeout: 单个插件执行的超时时间秒。对于响应慢的网络或主机可以适当增加如从5增加到10。修改后需要重启扫描器服务sudo systemctl restart openvas-scanner5.3 配置Web界面GSAD访问默认情况下GSAD只监听本地回环地址127.0.0.1。如果你想从其他机器访问Web界面需要修改其绑定地址。编辑GSAD的配置文件通常位于/etc/gvm/gsad.conf或/etc/default/gsad。找到GSA_ADDRESS或LISTEN_ADDRESS选项将其值从127.0.0.1改为0.0.0.0监听所有网络接口或者你的服务器具体IP地址。安全警告将服务暴露在非本地网络会带来安全风险。务必确保防火墙已正确配置只允许可信IP访问9392端口。管理员密码足够强壮。考虑结合反向代理如Nginx并配置HTTPS证书以增强安全性。修改后重启GSAD服务sudo systemctl restart gsad6. 实战创建并执行你的第一次漏洞扫描6.1 通过Web界面创建扫描目标与任务登录Web界面后我们进行第一次实战扫描。创建扫描目标Target点击左侧菜单栏的Configuration - Targets。点击左上角的蓝色“魔法棒”图标创建新目标。在“Name”字段输入一个易于识别的名字例如Internal_Web_Server。在“Hosts”字段输入要扫描的IP地址或范围例如192.168.1.100单台或192.168.1.1-254一个网段。切记只扫描你有权测试的设备端口列表Port List通常选择默认的All IANA assigned TCP and UDP即可它包含了常见的端口。其他选项保持默认点击“Save”保存。创建扫描任务Task点击左侧菜单栏的Scan - Tasks。点击左上角的蓝色“魔法棒”图标创建新任务。“Name”字段输入任务名如First_Scan_on_Web_Server。“Scan Targets”下拉菜单选择你刚刚创建的目标Internal_Web_Server。“Scan Config”是扫描策略的核心。对于第一次全面扫描建议选择Full and fast。这是一个平衡了覆盖面和速度的配置。Full and very deep更彻底但耗时极长Discovery只进行主机发现和端口扫描。其他选项如计划时间Schedule、报告格式Report Format可以先保持默认。点击“Save”保存任务。6.2 启动扫描与监控进度在“Tasks”列表中找到你刚创建的任务点击最右边的“播放”按钮Start来启动扫描。扫描启动后任务状态会变为“Requested”然后很快变为“Running”。你可以点击任务名称进入详情页查看实时进度包括已完成的测试数量NVTs、当前正在检查的插件等。注意事项扫描时间取决于目标主机的数量、开放端口的数量以及选择的扫描配置。对一个简单的Web服务器进行Full and fast扫描可能需要15分钟到1小时。扫描期间GVM会与目标主机产生大量网络交互请确保不会对生产网络造成影响。6.3 解析扫描报告扫描完成后状态会变为“Done”。此时你可以查看报告。在“Tasks”列表该任务的最右侧点击“报告”图标一个文档形状的按钮。系统会列出该任务生成的所有报告每次扫描都会生成一份。点击最新的报告进入。报告页面会以汇总形式展示扫描结果包括严重性分布用饼图展示“高危”、“中危”、“低危”、“日志”等级别的漏洞数量。漏洞列表详细列出每一个发现的漏洞包括漏洞名称NVT名称、严重等级CVSS分数、受影响的主机/端口、漏洞描述以及解决方案建议。主机摘要按主机统计漏洞情况。你可以将报告导出为PDF、HTML、XML等多种格式方便存档或提交。7. 安装与配置过程中的常见问题与解决方案即使按照指南操作你也可能会遇到一些问题。下面是我在多次部署中总结的“坑位”地图和填坑方法。7.1 服务启动失败类问题问题1执行sudo gvm-start后gvmd或openvas-scanner服务启动失败状态为failed。排查思路首先查看具体服务的日志这是最直接的错误信息来源。sudo journalctl -u gvmd -xe --no-pager | tail -50 sudo journalctl -u openvas-scanner -xe --no-pager | tail -50常见原因及解决数据库连接失败日志中可能出现“Failed to connect to PostgreSQL”或“password authentication failed”。这通常是PostgreSQL的pg_hba.conf文件配置问题。检查/etc/postgresql/*/main/pg_hba.conf确保有一行允许_gvm用户本地连接local gvmd _gvm md5修改后需要重启PostgreSQLsudo systemctl restart postgresql然后再启动GVM服务。端口冲突gsad默认使用9392端口gvmd使用9390端口。确保这些端口没有被其他程序占用sudo netstat -tlnp | grep -E ‘:9390|:9392’。Redis服务未运行gvmd依赖Redis。确保redis-server服务是运行状态sudo systemctl enable --now redis-server。问题2sudo gvm-setup在下载NVTs时卡住或报错。排查思路网络问题是主因。gvm-setup脚本会从feed.openvas.org等地址下载数据。解决方案手动下载可以尝试从Greenbone的GitHub Release页面手动下载NVT数据包但过程复杂。使用代理如果网络环境特殊可以为wget或curl配置代理。但gvm-setup脚本内部调用可能不遵循系统代理。一个更彻底的方法是在运行gvm-setup前设置环境变量export http_proxyhttp://your-proxy-ip:port export https_proxyhttp://your-proxy-ip:port sudo -E gvm-setup # -E 参数保留当前环境变量重试与清理有时只是临时网络波动。可以尝试清理后重来谨慎操作这会删除已下载数据sudo gvm-stop sudo rm -rf /var/lib/openvas/plugins/* sudo gvm-setup7.2 Web界面访问类问题问题浏览器访问https://127.0.0.1:9392无法连接。检查服务状态首先确认gsad服务是否在运行sudo systemctl status gsad。检查监听地址确认gsad是否监听在127.0.0.1:9392sudo netstat -tlnp | grep gsad。防火墙问题如果是从其他主机访问确保Kali本地的防火墙如ufw放行了9392端口sudo ufw allow 9392/tcp。证书问题如果页面显示证书错误这是正常的因为使用的是自签名证书。在浏览器中添加例外即可。7.3 扫描执行类问题问题创建扫描任务后一直停留在“Requested”状态不开始“Running”。原因这通常是因为扫描器openvas-scanner没有成功连接到管理器gvmd或者任务队列Redis有问题。解决步骤重启整个GVM套件sudo gvm-stop sudo gvm-start。检查openvas-scanner的日志看是否有连接管理器失败的记录。在Web界面进入Administration - Feed Status查看各个数据源NVT, SCAP, CERT的状态是否为“Current”。如果显示“Not current”或更新时间很久远需要手动或等待定时任务同步数据。没有最新的NVT数据扫描器可能无法启动扫描。问题扫描速度异常缓慢。优化扫描配置如前所述调整/etc/gvm/openvas-scanner.conf中的max_hosts和max_checks参数。检查目标主机响应使用ping或nmap检查目标主机的网络连通性和响应速度。如果目标主机本身响应慢扫描速度自然快不起来。资源瓶颈使用htop或top命令监控系统资源CPU、内存、IO。如果磁盘IO等待wa很高可能是硬盘性能不足考虑使用SSD。7.4 数据更新类问题问题sudo greenbone-feed-sync执行失败报错“Permission denied”或“Sync failed”。权限问题确保以root权限运行。数据需要写入/var/lib/openvas/等目录这些目录属于_gvm用户和组。greenbone-feed-sync脚本内部会处理权限但必须以sudo执行。磁盘空间不足再次检查磁盘空间同步过程需要临时空间。网络问题同gvm-setup的解决方案检查网络或配置代理。经过以上步骤的安装、配置、优化和问题排查你应该已经拥有了一个功能完整、运行稳定的GVM漏洞扫描平台。这套系统将成为你进行内部网络安全检查、学习漏洞评估流程的得力工具。记住能力越大责任越大务必在合法授权的范围内使用它进行安全测试。