podsec-inotify-check-images(1)

PODSEC-INOTIFY-CHECK-POLICY(1) PODSEC-INOTIFY-CHECK-POLICY(1)

NAME

podsec-inotify-check-policy - Плугин проверяет образы на предмет их соответствия настройки политикам контейнеризации на узле

SYNOPSIS

podsec-inotify-check-images [-v[vv]] [-a интервал] [-f интервал] -c интервал -h интервал [-m интервал] х-w интервалъ [-l интервал] [-d интервал]

DESCRIPTION

Плугин проверяет образы на предмет их соответствия настройки политикам контейнеризации на узле. Проверка идет по следующим параметрам:

Все веса метрик суммируются и формируется итоговая метрика.

OPTIONS

Уровень опасности определяется при запуске флагами:

для системных логов:


Имя уровня | Уровень | Префикс | Флаг | Рекомендуемое значение интервала
------------|---------|------------|------|------------------------
аварийный | 7 | Crash | `-a` | не указывать
фатальный | 6 | Fatal | `-f` | не указывать
критический | 5 | Critical | `-c` | 100
высокий | 4 | Heigh | `-h` | 0
средний | 3 | Middle | `-m` | не указывать
низкий | 2 | Low | `-l` | не указывать
отладочный | 1 | Debug | `-d` | не указывать
для сервера nagios:


Имя уровня | Уровень | Префикс | Флаг | Рекомендуемое значение интервала
---------------|---------|------------|------|-----------------------
критический | 2 | Critical | `-c` | 100
предупреждение | 1 | Warning | `-w` | 0

Любой параметр может отсутствовать. В этом случае он не рассматривается при просмотре соответствия полученной метрики интервалам.

Значение параметров имеют формат интервала, описанного в документации по nagios: Threshold and Ranges https://nagios-plugins.org/doc/guidelines.html#THRESHOLDFORMAT.

Общее описание:

[@]start:end

Замечания:

  • startend
  • start и : не требуется если start=0
  • если интервал задан в формате start: и конец не задан, то концом интервала считается бесконечность
  • для указания отрицательной бесконечности (-ꝏ) используйте ~
  • триггер срабатывает когда значение метрики ВНЕ УКАЗАННОГО ИНТЕРВАЛА (начальные и конечные точки включаются в интервал)
  • если интервал начинается с символа @, тогда условие инвертируется - триггер срабатывает при значении метрики В УКАЗАННОМ ИНТЕРВАЛЕ (начальные и конечные точки включаются в интервал)

Примеры возможных форматов:

Формат интервала | Описание условия срабатывания триггера
-----------------|--------------------------------------
100              | metrica < 0 || metrica > 100 (вне интервала 0-100)
100:             | metrica < 100 (вне интервала 100-ꝏ)
~:100            | metrica > 100 (вне интервала -ꝏ-100)
20-100           | metrica < 20 || metrica > 100 (вне интервала 20-100)
@20-100          | metrica >= 20 && metrica <= 100 (в интервале 20-100)

Системные логи

Для системных логов уровень опасности определяется для каждого сообщения. Интервалы уровней опасностей, заданные параметрами просматриваются в порядке от большого к меньшему. Уровень сообщения определяется по первому найденному соответствию (не забываете, что триггер срабатывает при нахождении метрики ВНЕ интервала). Если соответствие не найдено, сообщение в системный лог не выводится.

Исходя найденного уровня определяет приоритет сообщения и его тег (префикс). В системный лог командой logger посылается сообщение с указанным приоритетом и тегом:

# logger -p приоритет -t тег "тег: сообщение"

Кроме основного сообщения для nagios формируются:

  • список пользователей нарушителей;
  • укороченные сообщения для уровня детализации 1.

Логи nagios

Форматы сообщений и кодов завершения плугина описаны в Plugin Output for Nagios https://nagios-plugins.org/doc/guidelines.html#PLUGOUTPUT.

Уровень опасности для логов nagios определяется СУММАРНОЙ метрике. Суммарная метрика определяется для определения уровня сравнивается с интервалами, задаваемыми флагами

  • -c - Critical
  • -w - Warning

Если соответствие не найдено, в nagios выводится сообщение:

POLICY OK: Политики контейнеризации не нарушены

Код завершение программы (которое обрабатывается на стороне сервера nagios) - 0.

Формат логов для nagios зависит от уровня детализации, задаваемый флагом -v[vv] (см. Verbose Output https://nagios-plugins.org/doc/guidelines.html#AEN41):

Флаг        | Уровень
------------|--------
отcутствует | 0
-v          | 1
-vv         | 2
-vvv        | 3

Для всех уровней формируется префикс сообщение формата:

POLICY $prefix:

Где prefix в зависимости от уровня опасности принимает значения:

  • -c - Critical
  • -w - Warning

Если уровень детализации - 0, то выводится укороченное сообщение.

POLICY $prefix: Нарушение политик контейнеризации пользователей users

Где users - список пользователей у которых обнаружены нарушения.

Если уровень детализации - 1, то к сообщению с префиксом Есть пользователи: добавляется первый уровень детализации из списка укороченных сообщений сформированных при формировании системных логов.

POLICY $prefix: Нарушение политик контейнеризации пользователей $users | Есть пользователи:
укороченное сообщение

Если уровень детализации - 2, то к сообщению добавляется второй уровень детализации из списка полных сообщений сформированных при формировании системных логов.

POLICY $prefix: Нарушение политик контейнеризации пользователей $users | Есть пользователи:
укороченное сообщение
укороченное сообщение |
полное сообщение

После вывода сообщений плугин завершается кодом завершения:

  • Critical - 2
  • Warning - 1
создайте в /etc/nagios/commands/ конфигурационный файл nagios-plugins-podsec.cfg для всех podsec планинов
define command{

command_name podsec-inotify-check-policy
command_line $USER1$/check_by_ssh -H $HOSTADDRESS$ -l root -C ´/usr/lib/nagios/plugins/podsec-inotify-check-policy -vvv -w $ARG1$ -l $ARG1$ -c $ARG2$ ´
}

В command_name надо указать имя плагина которое будет использоваться в секции define service файла конфигурации в каталоге /etc/nagios/objects. В command_line не забудьте если в этом есть необходимость указать флаг -l root для запуска скрипта под пользователем root на удаленной машине. Если для плагина достаточно прав обыкновенного пользователя nagios, флаг -l не нужен.

Переменныe $ARG1, $ARG2, ... берутся из командной строки описания сервиса в каталоге /etc/nagios/objects.

define service {

use generic-service
host_name <host>
service_description Check containers policy
check_command podsec-inotify-check-policy!0!100
}

В строке service_description укахите иям сервиска которое будет отображаться в WEB-интерейсе nagios. В check_command имя команды, из вышеописанного файла nagios-plugins-podsec.cfg каталога /etc/nagios/commands/. Параметры использумые в команде указываются через символ |.

Запуск сервиса через systemd/Timers

Кроме запуска скрипта через nagios скрипт может запускаться через systemd/Timers.

В состав пакета входит systemd-файлы podsec-inotify-check-images.service, podsec-inotify-check-images.timer. Файл сервисов podsec-inotify-check-images.service описывает в параметре ExecStart строку с описанием режима запуска скрипта podsec-inotify-check-images. Скрипт запускается с флагами -vvv -c 100 - выводить подробную информацию, все сообщения имеют уровень c - критический. Если во время работы скрипта обнаружены некорректные настройки политики, они выводятся в системный лог и передаются почтой системному администратору (root).

Расписание запуска сервиса podsec-inotify-check-images.service описывается в параметре OnCalendar файла расписания podsec-inotify-check-images.timer. Сервис вызывается ежечасно.

По умолчанию таймер запуска сервиса выключен. Для его включения наберите команду:

#  systemctl enable --now podsec-inotify-check-images.timer

Если необходимо изменить режим запуска скрипта отредактируйте параметр OnCalendar файла расписания podsec-inotify-check-images.timer.

EXAMPLES

podsec-inotify-check-images -vvv -w 0 -h 0 -c 100

SECURITY CONSIDERATIONS

SEE ALSO

AUTHOR

Костарев Алексей, Базальт СПО kaf@basealt.ru

November 2023