当前位置: 首页 > news >正文

Greenbone GVM容器化部署实战:从Docker安装到Web界面汉化全流程

1. 为什么选择容器化部署GVM?

第一次接触Greenbone Vulnerability Management(GVM)时,我尝试过源码编译、虚拟机镜像等多种安装方式,结果被各种依赖冲突折磨得够呛。直到发现官方提供的Docker镜像,部署时间从半天缩短到20分钟。容器化部署最大的优势就是环境隔离——你再也不用担心系统原有的Python版本、库文件冲突这些问题。

GVM社区版包含多个组件:漏洞扫描器OpenVAS、管理接口gvmd、web界面gsa等。传统部署需要分别安装配置这些服务,而Docker Compose把整个服务栈打包成标准化容器,连网络连接和卷挂载都预设好了。实测在4核CPU、8GB内存的云服务器上,从零开始到扫描出第一份报告,整个过程不超过30分钟。

2. 部署前的准备工作

2.1 硬件要求与系统选择

官方建议的最小配置是2核CPU+4GB内存,但我强烈建议用4核+8GB的组合。曾经在2GB内存的测试机上部署,扫描时频繁触发OOM(内存不足)错误。存储空间要特别注意:如果单独挂载了/var分区,至少保留20GB可用空间,因为Docker默认将镜像和卷数据存放在/var/lib/docker。

推荐使用Ubuntu 22.04 LTS或Debian 11作为宿主机系统。这两个发行版的软件仓库对Docker支持最完善,我在CentOS上遇到过SELinux导致的权限问题,对新手不太友好。如果已经装好了Docker和Docker Compose插件,可以直接跳到第3章。

2.2 Docker环境配置

先卸载可能冲突的旧版本组件(注意这会删除相关数据):

for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt remove $pkg -y done

接着设置Docker官方仓库。以下命令会创建密钥目录、下载GPG证书并添加软件源:

sudo mkdir -m 0755 -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

安装Docker引擎和Compose插件:

sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

最后将当前用户加入docker组,避免每次都要sudo:

sudo usermod -aG docker $USER newgrp docker # 立即生效无需重新登录

3. 部署GVM服务栈

3.1 下载编排文件

创建一个专用目录存放配置文件,避免污染系统路径:

mkdir -p ~/greenbone-community-container cd ~/greenbone-community-container curl -fL https://greenbone.github.io/docs/latest/_static/docker-compose.yml -o docker-compose.yml

如果下载速度慢,可以尝试用代理镜像URL替换。这个docker-compose.yml定义了11个服务,包括PostgreSQL数据库、Redis缓存、OpenVAS扫描器等核心组件。

3.2 启动容器集群

先拉取所有镜像(约需要5GB磁盘空间):

docker compose -f ~/greenbone-community-container/docker-compose.yml pull

后台启动服务(首次运行会自动初始化数据库):

docker compose -f ~/greenbone-community-container/docker-compose.yml up -d

用以下命令观察实时日志,看到"gsad: Listening"表示启动成功:

docker compose logs -f gsa

3.3 配置管理员密码

默认管理员账号是admin,需要手动设置密码:

docker compose exec -u gvmd gvmd gvmd --user=admin --new-password=你的密码

4. 访问与网络配置

4.1 开放远程访问

默认配置只允许本地访问(127.0.0.1:9392),编辑docker-compose.yml找到gsa服务的ports部分:

ports: - "9392:80" # 修改前是"127.0.0.1:9392:80"

重启服务使配置生效:

docker compose down && docker compose up -d

现在可以通过http://服务器IP:9392访问web界面。如果部署在云服务器,记得在安全组放行9392端口。

4.2 防火墙设置

Ubuntu系统可能需要调整UFW规则:

sudo ufw allow 9392/tcp sudo ufw reload

5. 界面汉化实战

5.1 语言包替换原理

GSA(Greenbone Security Assistant)的界面文本都存储在容器内的JSON语言包中。默认加载的是gsa-en.json,我们只需要用中文包替换它即可。官方其实提供了简体中文包(gsa-zh_CN.json),只是没有默认启用。

5.2 操作步骤

首先确认gsa容器的名称:

docker ps --filter "name=gsa"

进入容器shell环境:

docker exec -it greenbone-community-edition-gsa-1 /bin/sh

备份原始英文包并替换:

cd /usr/local/share/gvm/gsad/web/locales cp gsa-en.json gsa-en.json.bak cp gsa-zh_CN.json gsa-en.json exit

刷新浏览器即可看到中文界面。这种临时修改会在容器重启后失效,如需持久化需要挂载volume,建议在docker-compose.yml中添加:

gsa: volumes: - ./gsa-locales:/usr/local/share/gvm/gsad/web/locales

6. 常见问题排查

6.1 容器启动失败

如果看到卷创建错误,可能是之前失败的部署残留了数据:

sudo rm -rf /var/lib/docker/volumes/greenbone-community-edition_* docker system prune -a

6.2 扫描任务卡住

检查OpenVAS扫描器状态:

docker compose exec openvas openvasmd --status

更新漏洞数据库(首次使用必须执行):

docker compose exec gvmd gvmd --rebuild-gvmd-data=all

6.3 性能优化建议

修改docker-compose.yml中的资源限制:

openvas: deploy: resources: limits: cpus: '2' memory: 4G

对于生产环境,建议将PostgreSQL数据目录挂载到SSD存储,能显著提升扫描结果写入速度。

http://www.jsqmd.com/news/516451/

相关文章:

  • 嵌入式Bug响应系统:硬件化调试反馈设计
  • Node.js v16 版本安装
  • UDOP-large详细步骤:模型软链路径/root/models/udop-large验证方法
  • 国风内容创作新工具:Guohua Diffusion生成社交媒体配图实战分享
  • Qwen3.5-9B部署教程:支持LoRA微调的Gradio服务端二次开发指南
  • 实力强的轿车托运专业公司怎么收费,海南出发费用情况 - myqiye
  • 造相-Z-Image实战:GitHub开源项目协作开发指南
  • PPPoE实战指南:从零搭建ensp实验环境
  • 2026年橄榄果酒口感独特厂家盘点,哪家性价比在潮汕地区更高 - 工业设备
  • FPGA实战:手把手教你用DDS技术生成10Hz-5MHz可调信号(附Quartus配置)
  • Arduino非阻塞PISO移位寄存器库:高可靠多路数字输入扩展
  • 智能能耗管理系统助力园区节能的全面解决方案
  • 网络运维实战:Ubnt ER-X路由器初始化与硬件NAT优化指南
  • 聊聊2026年性价比高的匠心特色酒,雄盛橄榄酒值得选购 - 工业品网
  • Kali Linux渗透
  • Robot Framwork自动化测试框架详解
  • EVA-02辅助C语言学习:代码注释生成与逻辑解释实践
  • 探索Windows系统下多键盘设备的精准识别与问题解决
  • Qwen3-0.6B-FP8模型服务端缓存策略优化:提升并发响应能力
  • STM32+uGUI实战:5分钟搞定OLED屏幕的Hello World(附完整代码)
  • 基于强化学习的动态多教师知识蒸馏策略优化
  • STM32F103C8T6软件SPI驱动MAX6675避坑指南:为什么硬件SPI读不出数据?
  • 基于frp与Nginx的HTTPS子域名内网穿透实战
  • WRF新手必看:Single Domain Case模拟全流程详解(附常见错误排查)
  • 万象熔炉 | Anything XL参数调优:高CFG(12.0)在精细控制下的适用边界
  • 如何验证BGE-Reranker-v2-m3是否正常工作?测试脚本教程
  • MATLAB仿真研究:支路电气介数与HVDC、FACTS-TCSC、FACTS-UPFC模型的...
  • Linux进程与程序的本质区别及内存布局解析
  • 为什么PatchCore能吊打传统方法?深入拆解工业异常检测三大利器
  • Pixel Dimension Fissioner 开发环境配置:Ubuntu系统一站式部署教程