Демон fapolicyd#

Описание#

Демон fapolicyd - это демон пространства пользователя, который определяет права доступа к файлам на основе базы данных доверия и атрибутов файлов/процессов. Может использоваться для занесения в черный или белый списки доступа к файлам и разрешений на выполнение.

Настройка fapolicyd осуществляется с помощью файлов в каталоге /etc/fapolicyd/. Функционирование демона определяют три файла:

  • compiled.rules — содержит политику доступа;

  • fapolicyd.conf — определяет конфигурацию демона (подробнее см. в «Файл /etc/fapolicyd/fapolicyd»);

  • fapolicyd.trust — позволяет определять доверенные файлы.

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

Важно

Должно существовать хотя бы одно загруженное правило аудита, чтобы система аудита создавала полное событие FANOTIFY. То, какое именно правило загружено, не имеет значения.

Управление работой fapolicyd осуществляется с помощью утилиты fapolicyd-cli (подробнее см. в «Утилита fapolicyd-cli»).

Синтаксис демона:

fapolicyd <options>

Где <options> - опции.

Опции#

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

Опции fapolicyd#

Опция

Описание

--debug

Запретить переход в фоновый режим; вся информация о событиях выводится в стандартный поток сообщений об ошибках stderr

--debug-deny

Запретить переход в фоновый режим; информация о событии записывается в stderr только тогда, когда принимается решение об отказе в доступе

--permissive

Разрешить доступ к файлу независимо от решения политики; режим полезен для отладки правил, прежде чем сделать их постоянными

--no-details

Запретить включение в отчет, формируемый по завершении fapolicyd, детальной информации, такой как имена файлов и процессов

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

  • Для запуска fapolicyd введите команду:

    systemctl start fapolicyd
    

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

  • Чтобы проверить наличие событий аудита, связанных с работой fapolicyd, введите команду:

    ausearch --start today -m fanotify -i
    

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

Проверка целостности файлов с помощью fapolicyd#

Ниже приведены этапы проверки целостности файлов с помощью fapolicyd.

Предварительные условия для всех сценариев: fapolicyd запущен и работает.

Важно

Команды в сценариях настоящего раздела представлены в качестве примера.

Включение контроля целостности исполняемых файлов#

  1. Переключите fapolicyd в режим контроля целостности по алгоритму sha256. Для этого просмотрите содержимое fapolicyd.conf:

    cat /etc/fapolicyd/fapolicyd.conf
    
  2. Убедитесь, что в файле присутствует строка integrity = sha256.

    Если строка отсутствует или ключу integrity присвоено другое значение, добавьте строку или измените значение ключа на sha256.

    Внимание

    Включение контроля целостности изменяет логику работы опции trust, используемой правилами fapolicyd. Это может потребовать внесения изменений в действующие правила.

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

    После включения контроля целостности trust=1 будет означать что субъект (или объект), описываемый правилом, находится в базе доверенных файлов и фактический размер файла и его вычисленная контрольная сумма соответствуют представленным в этой базе.

  3. Перезапустите fapolicyd:

    systemctl restart fapolicyd
    
  4. Внесите информацию о файле в базу доверенных файлов:

    fapolicyd-cli -f add <file_path> --trust-file <user_base_name>
    

    Где:

    • <file_path> — абсолютный путь к файлу, для которого будет выполнятся контроль целостности;

    • <user_base_name> — имя файла в каталоге /etc/fapolicyd/trust.d/, в который будет добавлена информация о файле. Если такого файла нет, он будет создан.

    Важно

    Для каждого файла в базе должна быть создана отдельная запись. Однако, если в команде указан путь к каталогу, то в базу будут добавлены записи обо всех файлах каталога.

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

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

  5. Обновите кеш fapolicyd:

    fapolicyd-cli -u
    

    В результате fapolicyd будет использовать обновленную базу доверенных файлов.

    Примечание

    Чтобы убедиться, что информация о нужных файлах размещена в базе, выполните команду:

    cat /etc/fapolicyd/trust.d/<user_base_name>
    
  6. Создайте правила для записи в журнал аудита.

    Важно

    Чтобы производилось создание записи аудита при попытке использования файлов, у которых рассчитанная контрольная сумма не совпадает с хранящейся в базе, нужно составить соответствующие правила. Для каждой группы файлов, подлежащих контролю целостности, следует создавать отдельный файл с правилами в каталоге /etc/fapolicyd/rules.d/.

    При срабатывании правил, ограничивающих использование файла при нарушении целостности, по умолчанию не формируется каких-либо записей аудита. Чтобы это происходило, добавьте правила allow_audit и deny_audit. При срабатывали правила allow_audit в журнал аудита будет отправлена запись типа FANOTIFY.

    Пример правила для записи в журнал аудита информации о событии:

    allow_audit perm=any all : path=/user/bin/newscript.sh trust=0
    

    В соответствии с этим правилом при любом действии любого процесса (или пользователя) с файлом /user/bin/newscript.sh, если его фактические длина или контрольная сумма отличаются от записанных ранее в базу доверенных файлов, будет создана запись в журнал аудита. Сами действия с файлом этим правилом не ограничиваются.

    Примечание

    Запись аудита не будет создаваться, если для подсистемы аудита (auditd) не задано ни одного действующего правила.

  7. После завершения создания или изменения набора правил объедините все правила:

    fagenrules --load
    
  8. Перегазгрузите fapolicyd:

    systemctl restart fapolicyd
    
  9. Для просмотра актуального списка правил выполните команду:

    fapolicyd-cli -l
    

Просмотр событий аудита, связанных с контролем целостности#

Для просмотра событий аудита, сформированных правилами fapolicyd, используйте утилиту ausearch:

ausearch -ts recent -m fanotify

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

Для просмотра списка файлов с нарушением контроля целостности выполните команду:

~~~bash
fapolicyd-cli --check-trustdb
~~~

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

Важно

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

Внесение информации об изменившихся контрольных суммах#

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

  1. Обновите информацию о файле в базе доверенных файлов:

    fapolicyd-cli -f update <file_path> --trust-file <user_base_name>
    

    Где:

    • <file_path> — абсолютный путь к изменившемуся файлу, для которого будет выполнятся контроль целостности;

    • <user_base_name> — имя файла в каталоге /etc/fapolicyd/trust.d/, в котором хранится информация о файле.

  2. Обновите кеш fapolicyd:

    fapolicyd-cli -u
    

Исключение файлов из процедуры контроля целостности#

  1. Удалите запись о файле из базы доверенных файлов:

    fapoilicyd-cli -f delete <file_path> --trust-file <user_base_name>
    

    Где:

    • <file_path> — абсолютный путь к файлу, подлежащему контролю;

    • <user_base_name> — имя файла в каталоге /etc/fapolicyd/trust.d/, в котором хранится информация о файле.

  2. Обновите кеш fapolicyd:

    fapolicyd-cli -u
    

    Важно

    Следует также удалить правила, связанные со снятием файлов с контроля целостности из соответствующих файлов в каталоге /etc/fapolicyd/rules.d/.

  3. Объедините заново все существующие правила с помощью утилиты fagenrules:

    fagenrules --load
    
  4. Перезагрузите fapolicyd:

    systemctl restart fapolicyd
    

Выключение режима контроля целостности#

Перевод fapolicyd в режим permissive выключит контроль и управление доступом к файлам (не будут работать правила allow и deny). Однако правила, формирующие записи аудита (allow_audit и deny_audit), продолжат работать в нормальном режиме.

Для выключения режима контроля целостности для fapolicyd:

  1. В файле /etc/fapolicyd/fapolicyd.conf установите для опции integrity значение none или size.

  2. Перезагрузите fapolicyd:

    systemctl restart fapolicyd
    

Дополнительная информация#

Дополнительную информацию можно получить, выполнив команду:

fapolicyd --help