Этот документ описывает, что именно было реализовано в пакетах, как запустить весь стек одной командой через gvm-stack.target, как устроены зависимости, и как проверить работу. Конфигурации спроектированы так, чтобы никогда не перезаписывались при обновлениях, а сервисы стартовали только после перезагрузки или вручную через таргет.
GVM (Greenbone) в NiceOS: запуск, зависимости, проверка
Этот документ описывает, что именно было реализовано в пакетах, как запустить весь стек одной командой через gvm-stack.target
, как устроены зависимости, и как проверить работу. Конфигурации спроектированы так, чтобы никогда не перезаписывались при обновлениях (%config(noreplace)
), а сервисы стартовали только после перезагрузки или вручную через таргет.
Содержание
- Что мы сделали (архитектура и политика конфигов)
- Состав пакетов и роли
- Граф зависимостей и порядок запуска
- Установка и первый запуск
- Проверка работоспособности
- Синхронизация фидов (initial & daily)
- Где лежат конфиги и как их править безопасно
- Модель безопасности и права
- Диагностика неисправностей
1) Что мы сделали
Единая точка управления — gvm-stack.target
- Все сервисы стека «подвешены» на общий таргет через
WantedBy=gvm-stack.target
иPartOf=gvm-stack.target
. - Сервисы не автозапускаются из
%post
; админ решает, когда включать таргет. - Порядок обеспечивается
Requires=
/After=
в самих юнитах.
Политика конфигураций — не затираем
- Все файлы в
/etc
установлены как%config(noreplace)
. - Per-service настройки — через
/etc/sysconfig/*
(или TOML), редактируются админом. - Для однократных шагов (БД/админ/initial feed) применены oneshot-юниты с маркерами.
Инициализация — строго по требованию
gvmd-db-setup.service
создаёт роли/БДgvmd
однократно (маркер/var/lib/gvm/.db-initialized
).gvmd-provision.service
создаёт пользователяadmin
, назначает Feed Owner (маркер/var/lib/gvm/.admin-provisioned
).greenbone-initial-sync.service
подтягивает минимум фида (маркер/var/lib/gvm/.feed-initialized
).
Безопасность по умолчанию
- Сервисы работают от системного пользователя
gvm
с ограничениями systemd. - GSAD слушает
127.0.0.1
по умолчанию; публикация наружу — осознанное действие. - Сканер не требует sudo: использованы file capabilities (
cap_net_raw, cap_net_bind_service
).
2) Состав пакетов
gvm
, каталоги в /var/lib/gvm
, /run/gvm
, ключевые макросы и таргет gvm-stack.target
.
/run/redis-openvas/redis.sock
.
/etc/openvas/openvas.conf
.
/run/ospd/ospd-openvas.sock
.
--mode service_notus
.
gvmd.service
.
127.0.0.1:9392
по умолчанию.
3) Зависимости и порядок запуска
network-online.target
├─ redis-openvas.service (обязательно)
├─ openvasd.service ─┐ (альтернатива OSPD)
│ └─(сканер API)
├─ ospd-openvas.service ─┘
├─ gvmd-db-setup.service [oneshot, если нет /var/lib/gvm/.db-initialized]
├─ gvmd-provision.service [oneshot, если нет /var/lib/gvm/.admin-provisioned]
├─ gvmd.service (требует PostgreSQL)
└─ gsad.service (после gvmd)
Все узлы «подвешены» на gvm-stack.target
. Запуск таргета запускает граф целиком с учётом Requires=
/After=
.
- Redis обязателен для OSPD/OpenVASD.
- PostgreSQL поднимается своим пакетом (зависимость у gvmd), БД готовит
gvmd-db-setup
. - Initial feed (опционально) можно выполнить до первого запуска сканера/менеджера.
4) Установка и первый запуск
- Установите пакеты (пример для полного стека OSPD-ветки):
sudo dnf install gvm-common redis-openvas openvas-scanner python-ospd-openvas gvmd gsad python3-greenbone-feed-sync
Запустите
systemctl start greenbone-initial-sync.service greenbone-feed-sync systemctl enable --now gvm-stack.target systemctl enable --now greenbone-feed-sync.timer
- Включите единый таргет и запустите его:
sudo systemctl enable --now gvm-stack.target
- Дождитесь однократной инициализации БД и провижена админа (маркер-файлы появятся в
/var/lib/gvm
).
/var/lib/gvm/.admin-password
(право 0600, владелец gvm
).
5) Проверка работоспособности
Стек целиком
systemctl status gvm-stack.target
systemctl list-dependencies gvm-stack.target
Redis и сканер
sudo -u gvm redis-cli -s /run/redis-openvas/redis.sock ping
# PONG
sudo -u gvm gvm-manage-scanner --get-scanners
GVMD
sudo -u gvm gvmd --get-users
admin
.GSAD (веб-интерфейс)
xdg-open https://127.0.0.1:9392
admin
/ пароль из /var/lib/gvm/.admin-password
.6) Синхронизация фидов
Первичная загрузка (oneshot)
Сервис выполнится один раз при старте стека, если нет маркера:
sudo systemctl start greenbone-initial-sync.service
# маркер создастся в /var/lib/gvm/.feed-initialized
Ежедневное обновление (таймер)
Таймер поставляется выключенным. Включить при необходимости:
sudo systemctl enable --now greenbone-feed-sync.timer
systemctl list-timers greenbone-feed-sync.timer
7) Конфигурации и где их править
Компонент | Файл/каталог | Примечание |
---|---|---|
openvas-scanner | /etc/openvas/openvas.conf | %config(noreplace); db_address=/run/redis-openvas/redis.sock |
ospd-openvas | /etc/sysconfig/ospd-openvas | Сокет, лог, уровень логов, Notus каталоги |
openvasd | /etc/sysconfig/openvasd , /etc/openvasd/openvasd.toml (пример) | Режим, адрес, опции |
gvmd | /etc/sysconfig/gvmd , /etc/gvm/*.conf | Параметры демона/логов |
gsad | /etc/sysconfig/gsad | Адрес/порт веб-интерфейса, TLS-опции |
feed-sync | — | Юниты не требуют конфигов; расписание в таймере |
/etc/sysconfig/*
не перезаписываются при обновлениях пакетов. После правок перезапустите соответствующий сервис: systemctl restart <service>
.
8) Безопасность, права и каталоги
- Пользователь/группа:
gvm:gvm
(создаёт пакетgvm-common
). - Runtime:
/run/gvm
,/run/ospd
,/run/redis-openvas
— создаются через tmpfiles, режим 0750. - State:
/var/lib/openvas
,/var/lib/notus/{products,advisories}
— режим02775
(setgid), владелецgvm:gvm
. - Redis сокет:
660
, группаredis
; пользовательgvm
добавляется в группуredis
. - Сканер: вместо sudo использованы file capabilities:
cap_net_bind_service, cap_net_raw
на бинареopenvas
. - GSAD: по умолчанию слушает
127.0.0.1
. Для публикации наружу изменитеGSAD_ADDRESS
и обеспечьте TLS/фаервол.
9) Диагностика
Сервисы не стартуют по таргету
systemctl status gvm-stack.target
systemctl list-dependencies gvm-stack.target
journalctl -b -u redis-openvas -u ospd-openvas -u openvasd -u gvmd -u gsad --no-pager
Проверьте, что таргет включён: systemctl enable --now gvm-stack.target
.
Проблемы с БД/миграциями
journalctl -u gvmd-db-setup -u gvmd-provision --no-pager
sudo -u postgres psql -d gvmd -c 'SELECT version();'
При необходимости перезапустите oneshot после удаления маркера (только если понимаете последствия): rm /var/lib/gvm/.db-initialized
, затем systemctl start gvmd-db-setup.service
.
Фиды не тянутся
journalctl -u greenbone-initial-sync -u greenbone-feed-sync --no-pager
sudo -u gvm greenbone-feed-sync --help
Убедитесь в доступности rsync и сети/прокси.
Все журналы также доступны через journalctl -u <service> -f
для «хвоста» в реальном времени.