Файл /etc/audit/audit.rules#

audit.rules - это файл, содержащий набор правил аудита, которые загружаются сценарием инициализации демона аудита при каждом его запуске с использованием auditctl. Подробная информация содержится в разделе «Аудит в Platform V SberLinux OS Server» → «Утилита auditctl».

Синтаксис правил аналогичен синтаксису команд auditctl. Правила аудита разделяются на три вида: control, file, syscall.

  • control - управляющие команды, обычно включающие в себя настройку системы аудита, а не указание ей, на что обращать внимание. Эти команды обычно включают удаление всех правил, настройку размера очереди backlog ядра, настройку режима сбоев, ограничение частоты событий или указание auditctl игнорировать синтаксические ошибки в правилах и продолжать загрузку.

  • file - правила файловой системы (правила отслеживания), используемые для проверки доступа к определенным файлам/каталогам. Если указанный путь является каталогом, то используемое правило является рекурсивным в нижней части дерева каталогов, исключая любые каталоги, которые могут быть точками подключения. Синтаксис данных правил обычно соответствует формату:

    -a always,exit -F arch=b64 -F path=path-to-file -F perm=permissions -F key=keyname
    

    Где разрешения могут быть:

    • r - чтение файла;

    • w - запись в файл;

    • x - выполнение файла;

    • a - изменение атрибута файла.

    Поле arch заполняется для повышения производительности. Индивидуальные разрешения приведут к выбору конкретных системных вызовов, которые используют данный тип доступа. Неуказание arch приведет к выбору всех системных вызовов, что негативно повлияет на производительность, поскольку будут оцениваться все системные вызовы.

    Записи также могут быть созданы с использованием формата -w, который обеспечивает обратную совместимость за счет снижения производительности системы, аналогичного описанному выше. Используя syscall, можно выбрать между path и dir, которые соответствуют определенному индексному узлу или дереву каталогов соответственно. Рекурсивный просмотр каталогов будет остановлен, если точка монтирования находится ниже родительского каталога. Существует возможность сделать подключенный подкаталог эквивалентным, используя правило a -q.

  • syscall - правила системных вызовов загружаются в соответствующий модуль, который перехватывает каждый системный вызов, выполняемый всеми программами в системе; влияют на производительность. Чем больше правил, тем ниже производительность. Для минимизации влияния на производительность можно объединить системные вызовы в одно правило, когда это возможно.

    В ядре есть 6 списков соответствия правил (фильтров): task, exit, user, exclude, filesystem и io_uring:

    • Фильтр task проверяется только во время системных вызовов fork или clone; на практике используется редко.

    • exit - место, где обрабатываются все системные вызовы и запросы на аудит файловой системы.

    • user - используется для фильтрации (удаления) некоторых событий, происходящих в пользовательском пространстве. По умолчанию разрешено любое событие.

    • exclude - исключение отправки определенных событий. Атрибут msgtype и ряд полей subject могут использоваться для указания ядру, какие типы сообщений не нужно записывать. Данный фильтр может удалять событие в целом и не является избирательным в отношении каких-либо других атрибутов. Для выборочного аудита событий больше подходят фильтры user и exit. Для фильтра exclude действие игнорируется, по умолчанию установлено значение never.

    • filesystem - исключение событий для конкретной файловой системы.

    • io_uring - отслеживание базовых системных вызовов, выполняемых с помощью операций io_uring (интерфейс системного вызова).

      Формат правил системных вызовов:

      -a action,list -S syscall -F field=value -k keyname
      

      Опция -a сообщает механизму сопоставления правил ядра о необходимости добавить правило в конец списка. Также необходимо указать, в какой список правил оно добавляется и какие действия следует предпринять при его срабатывании. Допустимыми действиями являются:

      • always - всегда создавать событие;

      • never - никогда не создавать событие.

      Действие и список разделяются запятой, без пробела. Допустимыми списками являются: task, exit, user, exclude, filesystem и io_uring (см. выше).

      -S - имя/номер системного вызова. При отправке в ядро все поля системного вызова помещаются в маску, чтобы при сравнении можно было определить, представляет ли системный вызов интерес. На машинах с би-архитектурой 32- и 64-разрядные номера системных вызовов иногда совпадают, поэтому необходимо разбивать правило на 2 части, в одной из которых указать -F arch=b32, а в другой - -F arch=b64 - перед опцией -S, чтобы auditctl просматривал правильную таблицу поиска при возврате номера.

      -F - позволяет точно настроить соответствие. -k - ключевое поле, представляющее собой текстовую строку произвольной формы, которую можно вставить в событие, чтобы помочь определить его значение.

Пример записей#

-D
-b 8192
-f 1
--backlog_wait_time 60000

Где:

  • -D - удаление правил аудита;

  • -b - максимальное количество доступных буферов аудита;

  • -f - режим реакции ядра на критические ошибки;

  • --backlog_wait_time - время ожидания, после которого ядро попытается отправить новые события службе аудита по достижении лимита backlog.