auditd: логирование доступа к файлам и вызовам
Linux не пишет в syslog факт каждого обращения к /etc/shadow или вызова unlink. Для расследования инцидентов и compliance это критично. auditd решает эту задачу: подсистема ядра Linux Audit, которая фиксирует системные вызовы, доступ к файлам и не только.
Установка и запуск
auditd входит в пакет audit и есть в любом дистрибутиве.
После установки сервис запускается через systemd.
Проверка статуса и текущих правил:
В RHEL-дистрибутивах с включённым SELinux может потребоваться настройка политик для работы auditd с нестандартными путями. Обычно хватает стандартной установки.
Мониторинг файлов: флаг -w
Флаг -w добавляет правило наблюдения за файлом. По умолчанию отслеживаются open, read, write, truncate, chmod, chown.
| Флаг | Значение |
|---|---|
-w | путь для наблюдения |
-p | права: r(read), w(write), x(execute), a(append) |
-k | ключевое слово для поиска в логах |
Проверить правила:
Удалить правило по ключу:
Правила, добавленные через auditctl, не сохраняются после перезагрузки. Для персистентности правила записывают в /etc/audit/rules.d/:
В RHEL правила загружаются из /etc/audit/audit.rules скриптом augenrules. В Debian/Ubuntu — тоже работает.
Логирование системных вызовов: флаг -S
Флаг -S регистрирует указанный системный вызов для всех процессов или с фильтрами.
Список доступных системных вызовов можно посмотреть через ausyscall --dump. Не все вызовы доступны на любой архитектуре — на x86_64 часть вызовов идёт через compat-слой.
Избыточный syscall-мониторинг генерирует огромный объём логов. На production-сервере ограничивайте правила фильтрами.
Комбинированное правило — syscall плюс путь:
Фильтрация по uid и исполняемому файлу
Без фильтров правила применяются глобально. Для точечного мониторинга добавляют условия.
Основные фильтры:
| Флаг | Описание | Пример |
|---|---|---|
-F | поле для сравнения | -F uid=1000 |
arch | архитектура (b32/b64) | -F arch=b64 |
uid | реальный UID | -F uid=33 |
euid | эффективный UID | -F euid=0 |
exe | полный путь к исполняемому файлу | -F exe=/bin/bash |
perm | права доступа | -F perm=awx |
Комбинация фильтров собирается в цепочку через -a:
Чтение логов: ausearch
Логи хранятся в /var/log/audit/audit.log. Формат бинарный, читается утилитой ausearch.
Полезные форматы вывода:
Для автоматизации используйте -if (input file) — читайте из дампа, а не из активного лога:
Чтение логов: aureport
aureport агрегирует логи в читаемые отчёты.
Типичный вывод aureport -s:
Комбинация для быстрого расследования — сводка и детали:
Для отправки в SIEM или ELK логи конвертируют в JSON или текст:
Auditd не требует сложной настройки, чтобы начать фиксировать критичные события. Достаточно установить пакет, добавить несколько правил с ключевыми словами и привыкнуть к ausearch и aureport для чтения логов.