Утилита podman-integrity#

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

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

podman-integrity <subcommand> <arguments>

Где:

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

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

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

Команда

Описание

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>. Опционально: можно указать опцию -d (--direct), сигнализирующую, что было введено точное название/ID образа и дополнительное уточнение названия/ID не требуется

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>. Опционально: можно указать опцию -d (--direct), сигнализирующую, что было введено точное название/ID образа и дополнительное уточнение названия/ID не требуется

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

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

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

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

  • Для проверки контрольной суммы контейнера ecstatic_brattain без предварительного вызова update_container введите команду:

    podman-integrity validate_container ecstatic_brattain; echo $?
    

    Где echo $? выводит код результата выполнения команды (подробнее см. в «Утилита echo»), в данном случае - код ошибки 51.

    Также после выполнения команды будет сделана запись в аудит, например:

    type=UNKNOWN[2156] msg=audit(1710935630.678:61741): pid=990365 uid=0 auid=1000 ses=358 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 msg='event_type="integrity control"
    importance_level="critical" event_description="software integrity verification" event_name="facts of integrity violation of controlled objects"
    image_id="25d4db7cd88e23e61d2aadadf6cf6864b054083abfb16ffd72fbe530dd385305" resource_name="/var/lib/containers/storage" integrity_control_method="SHA-256"
    reaction_type="blocking" reference_hash_value="<saved digest absents or has wrong format>" calculated_hash_value="<saved digest absents or has wrong format>
    exe="/usr/sbin/podman-integrity" hostname=localhost1 addr=? terminal=pts/0 res=failed'UID="root" AUID="user1"
    
  • Для проверки контрольной суммы контейнера ecstatic_brattain c предварительным обновлением:

    1. Обновите контрольную сумму:

      podman-integrity update_container ecstatic_brattain; echo $?
      

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

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

      podman-integrity validate_container ecstatic_brattain; echo $?
      

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

  • Для создания файла abc и проведения проверки его контрольной суммы без ее обновления:

    1. Создайте пустой файл:

      touch abc
      

      Подробнее про touch см. в «Утилита touch».

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

      podman-integrity validate_file abc; echo $?
      

      В данном случае вывод команды будет содержать код ошибки 51. Также после выполнения команды будет сделана запись в аудит, например:

      type=UNKNOWN[2156] msg=audit(1710935551.015:61738): pid=990350 uid=0 auid=1000 ses=358 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 msg='event_type="integrity control"
      importance_level="critical" event_description="software integrity verification" event_name="facts of integrity violation of controlled objects" file_name="/home/user1/abc"
      integrity_control_method="SHA-256" reaction_type="blocking" reference_hash_value="<saved digest absents or has wrong format>" calculated_hash_value="<saved digest absents or has wrong format>"
      exe="/usr/sbin/podman-integrity" hostname=localhost1 addr=? terminal=pts/0 res=failed'UID="root" AUID="user1"
      
  • Для проверки контрольной суммы файла abc c предварительным обновлением:

    1. Обновите контрольную сумму:

      podman-integrity update_file abc; echo $?
      

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

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

      podman-integrity validate_container ecstatic_brattain; echo $?
      

      Вывод команды при успешном выполнении - 0 - контрольная сумма файла совпадет с записанной в расширенных атрибутах.