Перейти к содержимому

auditd: логирование доступа к файлам и вызовам

Linux не пишет в syslog факт каждого обращения к /etc/shadow или вызова unlink. Для расследования инцидентов и compliance это критично. auditd решает эту задачу: подсистема ядра Linux Audit, которая фиксирует системные вызовы, доступ к файлам и не только.

Установка и запуск

auditd входит в пакет audit и есть в любом дистрибутиве.

# Debian/Ubuntu
apt install auditd

# RHEL/CentOS/Alma
yum install audit

# Arch
pacman -S audit

После установки сервис запускается через systemd.

systemctl enable --now auditd

Проверка статуса и текущих правил:

systemctl status auditd
auditctl -l
Примечание

В RHEL-дистрибутивах с включённым SELinux может потребоваться настройка политик для работы auditd с нестандартными путями. Обычно хватает стандартной установки.

Мониторинг файлов: флаг -w

Флаг -w добавляет правило наблюдения за файлом. По умолчанию отслеживаются open, read, write, truncate, chmod, chown.

# Мониторим файл паролей
auditctl -w /etc/shadow -p rwxa -k shadow_access

# Мониторим директорию конфигов
auditctl -w /etc/nginx/ -p rwxa -k nginx_config
ФлагЗначение
-wпуть для наблюдения
-pправа: r(read), w(write), x(execute), a(append)
-kключевое слово для поиска в логах

Проверить правила:

auditctl -l

Удалить правило по ключу:

auditctl -W /etc/shadow -p rwxa -k shadow_access

Правила, добавленные через auditctl, не сохраняются после перезагрузки. Для персистентности правила записывают в /etc/audit/rules.d/:

echo "-w /etc/shadow -p rwxa -k shadow_access" >> /etc/audit/rules.d/audit.rules

В RHEL правила загружаются из /etc/audit/audit.rules скриптом augenrules. В Debian/Ubuntu — тоже работает.

Логирование системных вызовов: флаг -S

Флаг -S регистрирует указанный системный вызов для всех процессов или с фильтрами.

# Логируем удаление файлов
auditctl -S unlink -S unlinkat -k file_deletion

# Логируем создание сокетов
auditctl -S socket -k network_socket

Список доступных системных вызовов можно посмотреть через ausyscall --dump. Не все вызовы доступны на любой архитектуре — на x86_64 часть вызовов идёт через compat-слой.

Предупреждение

Избыточный syscall-мониторинг генерирует огромный объём логов. На production-сервере ограничивайте правила фильтрами.

Комбинированное правило — syscall плюс путь:

# Только удаление из /var/log/
auditctl -S unlink -S unlinkat -w /var/log/ -p wa -k log_deletion

Фильтрация по uid и исполняемому файлу

Без фильтров правила применяются глобально. Для точечного мониторинга добавляют условия.

# Только запуски rm от имени пользователя www-data
auditctl -S execve -a always,entry -F arch=b64 -F uid=33 -F exe=/usr/bin/rm -k rm_by_www

# Все access() к файлу от любого uid
auditctl -a always,entry -S access -F path=/etc/shadow -F perm=r -k shadow_read

Основные фильтры:

ФлагОписаниеПример
-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:

auditctl -a always,entry -S openat -F dir=/etc -F perm=w -F uid=0 -k etc_write_root

Чтение логов: ausearch

Логи хранятся в /var/log/audit/audit.log. Формат бинарный, читается утилитой ausearch.

# Поиск по ключевому слову
ausearch -k shadow_access

# Поиск по времени (сегодня, последний час)
ausearch -k shadow_access -ts today
ausearch -k shadow_access -ts recent

# Поиск по пользователю
ausearch -k shadow_access -ui 0

# Поиск по типу события
ausearch -m SYSCALL -k file_deletion

# Фильтр по результату (успех/неудача)
ausearch -k shadow_access -sv success
ausearch -k shadow_access -sv failed

Полезные форматы вывода:

# Сырой текст (по умолчанию)
ausearch -k shadow_access -i

# CSV для парсинга
ausearch -k shadow_access --format csv
Подсказка

Для автоматизации используйте -if (input file) — читайте из дампа, а не из активного лога:

ausearch -if /tmp/audit_events.dump -k shadow_access

Чтение логов: aureport

aureport агрегирует логи в читаемые отчёты.

# Сводка по всем событиям
aureport

# Отчёт по системным вызовам
aureport -s

# Отчёт по файловым событиям
aureport -f

# Отчёт по пользователям
aureport -u

# Отчёт по времени (с какого момента что происходило)
aureport -t

# Только ошибки и отказы
aureport --failed

Типичный вывод aureport -s:

Syscall Report
============================================
UID        Syscall    Count
--------------------------------------------
0          unlink      12
0          openat      8
33         unlink      3

Комбинация для быстрого расследования — сводка и детали:

aureport -t -i | head -20
ausearch -k file_deletion -ts recent | less

Для отправки в SIEM или ELK логи конвертируют в JSON или текст:

ausearch -k shadow_access --format json > /var/log/audit/shadow_access.json

Auditd не требует сложной настройки, чтобы начать фиксировать критичные события. Достаточно установить пакет, добавить несколько правил с ключевыми словами и привыкнуть к ausearch и aureport для чтения логов.