Перейти до вмісту

Звіти

enodia export записує звіт в одному з трьох форматів. Усі три приймають --from (прочитати наявний інвентар замість збирання) і -o/--output (шлях до файлу або - для stdout, за замовчуванням).

Terminal window
enodia export --format json
enodia export --format prometheus
enodia export --format html -o report.html

Вбудоване значення --format за замовчуванням — json, але export.default_format у settings.yaml перевизначає його щоразу, коли сам --format не передано; явний --format завжди має перевагу — той самий пріоритет, що вже діє для render.default_view/html.view в інших місцях. Див. Конфігурація.

Кожне спостереження і кожна оцінка повністю — --view ігнорується. Саме цей формат варто використовувати, якщо Ви хочете застосувати власну політику критичності поверх фактів enodia (див. Концепції).

Якщо налаштовано блок cve:, кожна оцінка також містить масив cves — один запис на знахідку для кожного джерела (CVE, присутня і в БДУ, і в NVD, зʼявляється двічі; NVD — по разу на кожен відповідний CPE):

{
"Source": "bdu",
"AdvisoryID": "BDU:2026-11879",
"CVEIDs": ["CVE-2026-19478"],
"Title": "Уязвимость программной платформы … GitLab EE/ CE …",
"Severity": "Высокий уровень опасности (базовая оценка CVSS 2.0 составляет 9,7) …",
"MatchedName": "Gitlab",
"RangeText": "от 19.2.0 до 19.2.4",
"FixStatus": "Уязвимость устранена",
"CVSS": { "Version": "3.1", "Score": 9.4, "Severity": "CRITICAL" }
}

Severity і RangeText — це власний текст джерела дослівно; CVSS — одна оцінка, розібрана з нього: спершу обирається CVSS 3.1/3.0, потім 4.0, потім 2.0 — версію 3.x містить майже кожна CVE в обох джерелах, тож оцінки в одному списку залишаються в одній шкалі. Стовпець CVES у табличних поданнях рахує різні CVE серед цих записів, а не самі записи.

Текстовий файл Prometheus, призначений для textfile collector-а node_exporter: записуйте його за розкладом туди, де node_exporter налаштовано шукати файли, — так само, як будь-яку іншу textfile-метрику. Знахідки CVE як метрики не експортуються.

Один самодостатній файл. Вбудованого вебсервера немає — enodia сама його не віддає (див. Концепції); направте на нього nginx і перегенеруйте його з cron або таймера systemd. enodia serve (див. Довідник CLI) — альтернатива, якщо Ви все ж хочете, щоб звіт віддавався автоматично, за власним розкладом.

--view обмежує звіт одним поданням замість чотирьох розділів, що йдуть один за одним. html.view у settings.yaml робить те саме, коли прапорець не передано.

Офлайн за замовчуванням

Section titled “Офлайн за замовчуванням”

html.assets у settings.yaml визначає, що потрібно згенерованому файлу:

  • inline (за замовчуванням) — жодних зовнішніх ресурсів. Перевірено: у виводі ніде немає <script, і ніщо не завантажується через http(s):// — єдині такі URL є звичайними посиланнями (футер, сторінки NVD/cve.org/БДУ у списку CVE). Відображається однаково навіть у повністю закритій мережі.
  • cdn — завантажує Bootstrap і тему Bootswatch з CDN і додає на сторінку видиме попередження, що для стилізованого відображення звіту потрібен доступ до інтернету. html.theme обирає тему (none, default або будь-яку з 26 справжніх тем Bootswatch); html.cdn обирає CDN — auto (за замовчуванням) влаштовує перегони між jsdelivr і cdnjs, надсилаючи кожному запит HEAD, і переходить на той, що відповів першим, тож блокування одного CDN у певній мережі не позбавляє звіт стилів. Найперше відображення завжди використовує jsdelivr; перегони лише замінюють таблицю стилів після цього. Звіт також отримує перемикач тем, вибір у якому запамʼятовується для кожного глядача в localStorage браузера, а кнопка закриття попередження запамʼятовується так само — закрите один раз, воно залишається закритим у цьому браузері й для перегенерованих звітів.

Повний приклад settings.yaml див. у розділі Конфігурація.

Якщо налаштовано блок cve:, клітинка CVES у розділах compact і drift стає посиланням, що відкриває список CVE цієї цілі: по рядку на CVE, найкритичніші першими, з посиланнями на NVD, cve.org і, для знахідок БДУ, на сторінку bdu.fstec.ru, а також з оцінкою у вигляді кольорових бейджів (CRITICAL · CVSS 3.1 9.8). Опис — це російський текст БДУ, якщо БДУ містить цю CVE, інакше — англійський текст NVD. Це чистий CSS (модальне вікно на :target), тож він так само працює в режимі inline зовсім без скриптів.

Кольори рядків у режимі CDN

Section titled “Кольори рядків у режимі CDN”

З html.assets: cdn кожен рядок отримує контекстний клас Bootstrap — червоний для екземпляра з помилкою, зелений для досяжного — у будь-якій налаштованій темі, а не жорстко заданий колір, який enodia підтримувала б для кожної теми окремо:

<table class="table table-striped table-hover table-sm align-middle">
<thead><tr><th>PRODUCT</th><th>VERSION</th><th>STATUS</th><th>COUNT</th><th>INSTANCES</th></tr></thead>
<tbody>
<tr class="table-danger"><td>gitlab</td><td>(unknown)</td><td>auth</td><td>1</td><td>gitlab-2</td></tr>
<tr class="table-success"><td>gitlab</td><td>18.2.1</td><td>ok</td><td>1</td><td>gitlab-1</td></tr>
<tr class="table-danger"><td>jira</td><td>(unknown)</td><td>unreachable</td><td>1</td><td>jira-staging</td></tr>
<tr class="table-success"><td>jira</td><td>10.3.1</td><td>ok</td><td>1</td><td>jira-3</td></tr>
<tr class="table-success"><td>jira</td><td>10.3.2</td><td>ok</td><td>2</td><td>jira-1, jira-2</td></tr>
</tbody>
</table>

Футер кожного згенерованого звіту містить посилання на проєкт на GitHub, а також на enodia.sh і docs.enodia.sh — це звичайні <a href>, а не завантаження ресурсів, тож на офлайн-гарантію режиму inline це не впливає (вона стосується саме завантажуваних ресурсів, а не інертного тексту гіперпосилань). Обидва режими також отримують favicon для вкладки: inline вбудовує просто у файл невелику base64-копію власного apple-touch-icon.png з enodia.sh (а не повний багатороздільний favicon.ico, який додав би приблизно пів мегабайта до кожного звіту заради значка вкладки); режим cdn натомість посилається на живі значки на enodia.sh, оскільки цьому режиму й так потрібен доступ до інтернету, щоб узагалі відобразитися.

html.assets: cdn завантажує Bootstrap і, якщо не вказано html.theme: none, тему Bootswatch — обидва під ліцензією MIT — з jsdelivr або cdnjs у момент, коли хтось відкриває звіт у браузері. Жоден із них не входить до складу самої enodia чи будь-якого артефакту релізу; кожен звіт у режимі CDN згадує обидва за назвою з посиланням на їхню ліцензію у своєму футері.

Історія за багатьма інвентарями

Section titled “Історія за багатьма інвентарями”

enodia collect -o "$(date +%F).jsonl" за розкладом уже дає більшу частину того, що потрібно enodia history, — каталог датованих інвентарів. history --dir <that directory> читає кожен файл *.jsonl у ньому й оцінює кожен станом на час його власного збирання, будуючи одну хронологію для кожного ID цілі. Див. Довідник CLI.