Перейти к содержимому

Начало работы

Самый простой путь — одна команда, сама подберёт нужный бинарник под вашу ОС/архитектуру:

Окно терминала
curl -fsSL https://get.enodia.sh/unix | sh # Linux/macOS/Android (Termux)
Окно терминала
irm https://get.enodia.sh/windows | iex # Windows

enodia сразу же доступна в том же самом окне PowerShell — установщик патчит PATH текущей сессии напрямую, а не только сохранённое значение в реестре, которое подхватил бы только новый терминал.

На Windows также можно поставить через winget или Chocolatey, если хотите, чтобы обновления отслеживал пакетный менеджер:

Окно терминала
winget install EpicMorg.Enodia # winget
choco install enodia # Chocolatey

Либо пакет, если хотите, чтобы обновления отслеживал пакетный менеджер:

Окно терминала
sudo dpkg -i enodia_linux_amd64.deb # Debian/Ubuntu
sudo rpm -i enodia_linux_amd64.rpm # Fedora/RHEL
apk add --allow-untrusted enodia_linux_amd64.apk # Alpine
sudo pacman -U enodia_linux_amd64.pkg.tar.zst # Arch

Каждый пакет ставит бинарник в /usr/bin/enodia, man-страницы в /usr/share/man/man1/ и создаёт отдельного непривилегированного системного пользователя enodia — для запуска ничего из этого не требует root. Нужный файл — на странице последнего релиза.

Либо контейнер:

Окно терминала
docker run --rm \
-v /etc/enodia:/config:ro \
ghcr.io/epicmorg/enodia:latest check --config /config/config.yaml

Начиная с 1.1.0 этот образ собирает и публикует соседний репозиторий, EpicMorg/docker, по собственному расписанию — уже не пайплайн релизов этого проекта, хотя опубликованный адрес и теги остались теми же. Публикуется также в docker.io/epicmorg/enodia и Quay, те же теги — latest, голый тег мажорной версии (2) и точная версия без суффикса сборки (например, 2.2.1 — подтверждено вживую во всех трёх реестрах; у более раннего пайплайна теги выглядели как 1.0.0-1, они всё ещё доступны для pull, просто новые релизы с этого момента тегируются иначе). Два реальных изменения, о которых стоит знать: теперь образ собирается только под linux/amd64 (arm64 убрали при переносе публикации), и работает от root, а не от отдельного пользователя, на собственной домашней базе проекта debian:trixie-light вместо scratch. Он объявляет /var/lib/enodia/cve томом для баз CVE — смонтируйте туда свои копии или дайте enodia cve update заполнить его.

Нужен Go — точную версию, на которую сейчас рассчитана enodia, смотрите в go.mod.

Окно терминала
git clone https://github.com/EpicMorg/enodia.git
cd enodia
go build -o enodia ./cmd/enodia
./enodia version
ОС Архитектура Минимальная версия
Linux amd64, arm64 Ядро 3.2 или новее — Debian 8+, Ubuntu 14.04+, RHEL/CentOS 7+ подходят с запасом
Windows amd64, arm64, 386 Windows 10 / Windows Server 2016 или новее
macOS amd64, arm64 macOS 12 Monterey или новее
Android (Termux) только arm64 Android 7 или новее — собственный минимум Termux, строже, чем Android 5.0 Lollipop — минимум для поддержки PIE, который на деле и привёл к отдельной сборке (см. заметку про Termux выше). На рутованных устройствах может понадобиться su — см. предупреждение выше

Это собственный минимум тулчейна Go, а не что-то, что enodia добавляет сверху. Сборка из исходников более новым Go поднимает минимум для macOS ещё выше — это решение тулчейна, а не проекта.

Создайте enodia.yaml рядом с бинарником (или в любом из мест, перечисленных в Конфигурации):

enodia.yaml
schemaVersion: 1
targets:
- id: gitlab-main
product: gitlab
address: https://gitlab.example.com

Затем запустите:

Окно терминала
enodia check
Окно терминала
ID PRODUCT PATCH LIFECYCLE BRANCH SEVERITY REASON CVES
gitlab-main gitlab ...

check без --from собирает данные и оценивает их за один прогон — enodia достучится до вашего таргета, затем до интернета за данными жизненного цикла. Если у таргета есть сеть только до вашей инфраструктуры (закрытый контур), а не до интернета — разделите фазы:

Окно терминала
# внутри закрытого контура - интернет не нужен
enodia collect --config enodia.yaml -o inventory.jsonl
# где угодно ещё - доступ к сервисам не нужен
enodia check --from inventory.jsonl

Таргету с приватным API нужен именованный credential, который резолвится из карты credentials: в enodia.yaml (либо из отдельного credentials.yaml — см. Конфигурацию):

enodia.yaml
schemaVersion: 1
targets:
- id: gitlab-main
product: gitlab
address: https://gitlab.example.com
credentials: gitlab-token
credentials:
gitlab-token:
kind: token-header
header: PRIVATE-TOKEN
value: "${GITLAB_TOKEN}"

${GITLAB_TOKEN} подставляется из окружения в момент загрузки — см. Конфигурацию. Секретам не обязательно жить в одном файле с инвентарём сервисов.