audit: backlog limit exceeded — Решение сбоя службы аудита Linux
Архитектура ошибки и симптомы сбоя
Сообщение «audit: backlog limit exceeded, audit messages dropped» генерируется подсистемой аудита безопасности ядра Linux (Linux Audit Subsystem / KAUID). При генерации событий безопасности (SELinux denials, системные вызовы execve, модификации файлов) ядро складывает события во внутреннюю очередь (Netlink Queue) для передачи демону auditd. Если очередь переполняется (превышен audit_backlog_limit), а политика audit_failure установлена в режим 1 (printk) или 2 (panic), ядро начинает терять события безопасности или полностью зависает.
Диагностическая таблица параметров сбоя
| Параметр | Значение | Инженерный смысл сбоя |
|---|---|---|
| backlog_limit | Integer (Default: 64/8192) | Максимальное количество сообщений в очереди ядра до передачи в auditd. |
| audit_backlog_wait_time | Milliseconds (Default: 60000) | Время ожидания освобождения очереди; при 60s вызывает полный фриз процессов. |
| audit_panic | 0 / 1 / 2 | Поведение ядра при сбое аудита (0=ignore, 1=printk, 2=kernel panic). |
Пошаговое дерево решений и сценарии траблшутинга
Сценарий 1: Проверка текущего статуса подсистемы аудита
# Просмотр параметров и заполненности очереди audit:
sudo auditctl -s
# Обратите внимание на строки: 'backlog', 'backlog_limit', 'lost'.
# Если 'lost' растет, ядро сбрасывает события аудита!Сценарий 2: Горячее увеличение размера очереди backlog и сброс ожидания
# Увеличение лимита очереди до 32768 сообщений:
sudo auditctl -b 32768
# Отключение задержки ожидания (предотвращает зависание системных вызовов fork/exec):
sudo auditctl --backlog_wait_time 0Сценарий 3: Закрепление параметров в audit.rules и параметрах загрузки GRUB
Отредактируйте конфигурацию /etc/audit/rules.d/audit.rules:
# В начале файла правил:
-D
-b 32768
--backlog_wait_time 0
-f 1
# Перезапустите службу аудита:
sudo augenrules --load
sudo systemctl restart auditdДля защиты системы на этапе ранней инициализации добавьте параметр в /etc/default/grub:
GRUB_CMDLINE_LINUX="audit=1 audit_backlog_limit=32768 audit_backlog_wait_time=0"
sudo update-grubITSTM выполнит оптимизацию правил аудита (исключение шумных cron/k8s событий), настройку SIEM-интеграций и обеспечение соответствия стандартам ГОСТ/PCI-DSS.
Частые вопросы (FAQ)
Почему при переполнении audit backlog зависают обычные команды (ls, ps, ssh)?
Если параметр backlog_wait_time не равен 0, ядро при каждом системном вызове блокирует вызвавший процесс в состоянии ожидания (Uninterruptible Sleep), пока демон auditd не освободит место в очереди.
Как найти правила аудита, генерирующие максимальный объем мусорных логов?
Выполните команду sudo aureport -s --summary. Она покажет распределение событий по типам системных вызовов и поможет отключить избыточный аудит.
Что означает флаг -f 2 в правилах audit.rules?
Флаг -f 2 задает критический режим: если система аудита выходит из строя или очередь переполняется, ядро немедленно уходит в Kernel Panic для предотвращения несанкционированных действий без логирования.
Как исключить шумные события контейнеров из auditd?
Добавьте фильтр в правила /etc/audit/rules.d/audit.rules: -a never,exclude -F msgtype=CWD (исключение смены рабочих каталогов) или фильтруйте по UID служебных демонов.