Короткий ответ

journalctl по sshd не заменяет auditd: нужны syscall/file watches на /etc/passwd, /etc/sudoers, sudoers.d, ключи, execve для sudo/su по политике. На Ubuntu установите auditd, правила кладите в /etc/audit/rules.d/*.rules, загружайте augenrules --load. Проверка: auditctl -l, ausearch -f /etc/sudoers. Не ставьте -a never,task «чтобы не тормозило» как постоянный режим. Не отключайте AppArmor: это другой слой. Хост host.example (10.0.20.10), пользователь admin.

Симптомы и как отличить

  • systemctl status auditd inactive;
  • auditctl -s enabled 0;
  • после смены sudoers нет записи в audit;
  • только rsyslog auth, без syscall.
Нужен следИнструмент
Failed SSH passwordjournal ssh / auth.log
Кто открыл sudoersaudit watch
AVC SELinuxaudit на RHEL; на Ubuntu AppArmor в journal
Удаление логовзащита journal

Возможные причины

  1. Пакет не установлен.
  2. audit.rules пустой / -a never,task.
  3. Правила в /etc/audit/audit.rules затираются, а rules.d пуст (наоборот тоже бывает).
  4. Переполнен диск audit, space_left_action ignore.
  5. Контейнер без CAP_AUDIT_CONTROL — auditd на хосте, не в госте без прав.
  6. Правила с синтаксической ошибкой, загрузка оборвалась.

Диагностика

dpkg -l auditd | grep ^ii
systemctl status auditd --no-pager -l
sudo auditctl -s
sudo auditctl -l | head
ls -l /etc/audit/rules.d/ /etc/audit/auditd.conf

Тест следа (на тестовом файле, не ломая sudoers):

sudo touch /etc/myservice/audit-test
sudo auditctl -w /etc/myservice/audit-test -p wa -k testkey
echo test | sudo tee /etc/myservice/audit-test
sudo ausearch -k testkey -ts recent
sudo auditctl -W /etc/myservice/audit-test -p wa -k testkey

Если даже это пусто — демон/ядро audit не работают, не «мало правил».

Диск:

df -h /var/log/audit
sudo grep -E 'space_left|admin_space|disk_full|max_log_file' /etc/audit/auditd.conf

Решение

Сценарий A. Установка и разумный минимум

sudo apt-get update
sudo apt-get install -y auditd audispd-plugins
sudo systemctl enable --now auditd

Файл /etc/audit/rules.d/40-identity.rules (пример проверяемого минимума):

-w /etc/passwd -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/sudoers -p wa -k sudoers
-w /etc/sudoers.d/ -p wa -k sudoers
-w /etc/ssh/sshd_config -p wa -k sshd_cfg
-w /etc/ssh/sshd_config.d/ -p wa -k sshd_cfg
-w /home/admin/.ssh/authorized_keys -p wa -k ssh_keys

Sudo exec (узко, не весь execve системы):

-w /usr/bin/sudo -p x -k sudo_exec
-w /usr/bin/su -p x -k su_exec

Иммутабельность правил после загрузки (осторожно: снять только ребутом):

# в 99-finalize.rules в конце, когда набор стабилен
-e 2

На первом внедрении не включайте -e 2, пока не отладите. Иначе правка правил потребует reboot.

sudo augenrules --check
sudo augenrules --load
sudo auditctl -l

На 22.04/24.04 augenrules собирает /etc/audit/audit.rules. Не держите противоречивый ручной файл без понимания порядка.

Сценарий B. Журналы не крутятся

В auditd.conf: разумный max_log_file, max_log_file_action = rotate, num_logs. disk_full_action = syslog (или single в high-security, это уже жёстко). Не ignore на заполнении, если вам нужен след.

Вынос копии: audisp syslog plugin / remote. Связка с логами без следа.

Сценарий C. Слишком шумно

Не -a never,task. Сужайте ключи, исключите частые пути. auditctl -a exclude,never -F msgtype=... только с пониманием.

Для пользователей см. аудит учёток и sudo широкий.

Что писать в правила сверх identity. Полезный узкий набор на app-сервере: watch на /etc/crontab, /etc/cron.d, /etc/systemd/system (wa), exec на /usr/bin/passwd. Не включайте сразу -a always,exit -F arch=b64 -S execve на хосте 1С: получите гигабайты и dropped events (auditctl -s backlog). Сначала identity, через неделю — cron/systemd, потом точечные syscall по результатам IR.

Ubuntu и auditd.service: после augenrules --load проверьте, что enabled 1 пережил reboot. Если audit=0 в cmdline GRUB — правила бесполезны; уберите параметр, не «для производительности».

Буфер: auditctl -s lost/backlog. Рост lost = слишком шумно или диск тормозит. Сужайте, не audit=0.

Интерпретация ausearch -k sudoers: смотрите auid, uid, exe, success. auid=4294967295 часто unset (системные). Для человека ожидайте auid учётки admin. Корреляция с journalctl _COMM=sudo даёт команду, audit — факт записи файла.

Контейнеры: правила на хосте видят exe=/usr/bin/docker. Это нормально. Не ставьте auditd в каждый контейнер без CAP_AUDIT.

Синхронизация времени: без NTP метки audit вводят в заблуждение при сверке с SIEM. Не отключайте chrony «чтобы не мешал».

Как проверить, что проблема устранена

systemctl is-active auditd
sudo auditctl -s | grep enabled
sudo auditctl -l | grep -E 'passwd|sudoers'
sudo ausearch -k sudoers -ts today

Сделайте innocuous правку в тестовом drop-in sudoers через visudo и найдите SYSCALL. SSH admin жив. AppArmor enforce.

aureport --summary за сегодня не пустой после нагрузки.

Если не помогло

  • enabled 0 после load: синтаксис, смотрите journalctl -u auditd.
  • Правила есть, ausearch пуст: время TZ, -ts recent, или watch на каталог vs файл.
  • Контейнер: ставьте auditd на hypervisor/хост.
  • Ubuntu с SELinux не штатно; на Rocky ausearch -m AVC — не setenforce 0.
  • Производительность БД: профилируйте конкретные syscall правила, не выключайте весь audit навсегда.

Профилактика

  • Правила в ansible, ключи стабильные.
  • Мониторинг: auditd active, рост логов, space_left.
  • IR playbook: ausearch по key identity/sudoers/ssh_keys.
  • Иммутабельность -e 2 только после пилота.

FAQ

auditd vs journald

Разные буферы. journal удобен для unit. audit — syscall и watches, устойчивее к «просто не логируем приложение». Оба нужны.

Можно ли audisp → SIEM сразу

Да, syslog plugin. Сначала локальные правила должны вообще срабатывать.

Watch на /etc целиком

Шумно и тяжело. Список файлов лучше.

Docker и audit

События хоста. Root в контейнере с bind /etc будет виден как процесс docker. Это не повод не ставить правила.

Нужен ли audit для PCI «на всё execve»

Иногда требуют. Начните с identity/sudo/sshd, потом расширяйте. Слепой -a always,exit -S execve на busy хосте — шторм.