Утилита podman-integrity#

Утилита podman-integrity служит для проверки целостности отдельных файлов, каталогов и образов контейнеров через расчет контрольных сумм по алгоритму SHA-256. В случае обнаружения нарушения целостности ведет запись в журнал аудита и возвращает код ошибки 51.

Синтаксис podman-integrity:

podman-integrity <command> <arguments>

Где:

  • <command> - действие, которое необходимо выполнить;

  • <arguments> - аргументы.

Команды утилиты представлены в таблице ниже.

Команда

Описание

update_container

Принимает в качестве аргумента название/ID контейнера. Находит используемый контейнером образ, вычисляет его контрольную сумму и записывает в файл /var/lib/containers/checksums/<ID_image>

update_file

Принимает в качестве аргумента путь к файлу/каталогу. Записывает подсчитанную контрольную сумму в расширенные атрибуты в поле security.checksum. Если задан каталог, то обрабатывает его рекурсивно и вычисляет контрольную сумму для содержимого всех регулярных файлов в лексикографическом порядке

update_each_file

Принимает в качестве аргумента путь к каталогу. Обрабатывает его рекурсивно, записывает контрольную сумму каждого найденного файла в поле security.checksum его расширенных атрибутов

update_image

Принимает в качестве аргумента название/ID образа контейнера. Вычисляет его контрольную сумму и записывает в файл /var/lib/containers/checksums/<ID_image>. Название/ID будет принято за основу для поиска средствами podman. Для точного указания названия/ID образа добавьте опцию -d (--direct)

validate_container

Принимает в качестве аргумента название/ID контейнера. Находит используемый контейнером образ, вычисляет его контрольную сумму и сравнивает с записанной в файл /var/lib/containers/checksums/<ID_image>

validate_file

Принимает в качестве аргумента путь к файлу/каталогу. Сравнивает подсчитанную контрольную сумму с записанной в поле security.checksum расширенных атрибутов. Если задан каталог, то обрабатывает его рекурсивно и вычисляет контрольную сумма для содержимого всех регулярных файлов в лексикографическом порядке

validate_each_file

Принимает в качестве аргумента путь к каталогу. Рекурсивно обрабатывает его, сравнивает подсчитанную контрольную сумму каждого файла с записанной в поле security.checksum его расширенных атрибутов

validate_image

Принимает в качестве аргумента название/ID образа контейнера. Вычисляет его контрольную сумму и записывает в файл /var/lib/containers/checksums/<ID_image>. Название/ID будет принято за основу для поиска средствами podman. Для точного указания названия/ID образа добавьте опцию -d (--direct)

Справку по использованию команд можно получить, запустив утилиту или ее команду с опцией --help, например:

podman-integrity validate_image --help

Важно

При выполнении команд валидации если контрольные суммы совпадают — утилита возвращает код 0; в противном случае утилита возвращает код 51 и в log-файл аудита выводится ошибка 2156 (Integrity violation).

При выполнении команды validate_file_each происходит последовательная проверка контрольных сумм каждого файла в указанном каталоге. Если в ходе проверки вычисленная контрольная сумма отличается от записанной в расширенных атрибутах, то проверка целостности останавливается, а в log-файл аудита выводится ошибка 2156 (Integrity violation).

При вычислении контрольной суммы образа контейнера и проверке целостности образа контейнера утилитой предварительно выполняется его монтирование с помощью podman image mount <Image_ID>. Контрольная сумма вычисляется для cмонтированного каталога. После подсчета выполняется размонтирование — podman image unmount <Image_ID>. Операции монтирования и размонтирования происходят в автоматическом режиме, без вмешательства пользователя.

В случае успешного выполнения команд podman-integrity возвращает 0. В случае ошибки, например, при неуспешной валидации или вводе аргументов неверного формата, утилита возвращает ненулевой код ошибки. Ошибка при валидации файла, образа или контейнера инициирует внесение соответствующей записи в журнал аудита.

Примеры использования#

Проверка целостности образа контейнера#

Порядок проверки целостности образа контейнера ecstatic_brattain (имя контейнера взято для примера):

  1. Рассчитайте контрольную сумму для последующего контроля целостности:

    podman-integrity update_container ecstatic_brattain; echo $?
    

    Вывод команды при успешном выполнении — 0, при неуспешном - 51.

  2. Проведите валидацию контрольной суммы:

    podman-integrity validate_container ecstatic_brattain; echo $?
    

    Вывод команды при успешном выполнении — 0, при неуспешном - 51.

Проверка целостности исполняемого файла#

Порядок проверки целостности образа контейнера abc (имя файла взято для примера):

  1. Рассчитайте контрольную сумму для последующего контроля целостности:

    podman-integrity update_file abc; echo $?
    

    Вывод команды при успешном выполнении — 0, при неуспешном - 51.

  2. Проведите валидацию контрольной суммы:

    podman-integrity validate_file abc; echo $?
    

    Вывод команды при успешном выполнении — 0, при неуспешном - 51.