Практическое руководство по системным журналам, управлению сервисами rsyslog, ротации логов с помощью logrotate и мониторингу активности аутентификации.
Часть 1: journald
SYSTEM: SYSTEMD-JOURNALD
Journald (systemd-journald) — это встроенная служба системы инициализации systemd, отвечающая за сбор и централизованное хранение логов. Она сохраняет данные в бинарном формате, что позволяет очень быстро и удобно фильтровать события.
Journald также ограничивает частоту сообщений логов и сбрасывает все сообщения от сервиса, если они превышают определенные лимиты. Эти лимиты можно настроить с помощью RateLimitBurst и RateLimitIntervalSec, которые по умолчанию равны 10000 и 30с соответственно.
cat /etc/systemd/journald.conf | grep RateLimit
Функция ограничения скорости (rate limiting) очень полезна, когда у вас есть службы, генерирующие огромное количество логов. journalctl — основной инструмент для взаимодействия с журналом.
Запуск инструмента:
$journalctl
Просмотр всех доступных опций:
$man journalctl
Показать только последние 10 строк журнала (опция -n):
$journalctl -n 10
Следить за логами в реальном времени (опция -f):
$journalctl -f
Просмотр журнала в обратном порядке (от новых к старым):
$journalctl --reverse
Опция --output используется для форматирования вывода журнала. Просмотр в формате JSON (или json-pretty):
$journalctl --output=json-pretty
Фильтрация журнала для конкретного systemd юнита:
$journalctl -u multiuser.target
Показать только сообщения ядра:
$journalctl --dmesg
Фильтрация по времени (опции --since и --until):
$journalctl --since="2026-04-30 23:00:00" # ИЛИ $journalctl --since=yesterday --until=now
Поиск времени перезагрузки системы в журнале:
$journalctl MESSAGE="Server listening on 0.0.0.0 port 22."
Часть 2: rsyslog
SYSTEM: RSYSLOGD
Rsyslog — это мощный сервис для обработки и маршрутизации текстовых логов (эволюция классического syslog). Он собирает сообщения от ядра системы и приложений, фильтрует их и распределяет по текстовым файлам или отправляет по сети.
Используйте утилиту logger для генерации логов:
$logger Test
Посмотреть результат в /var/log/syslog:
$tail /var/log/syslog
Вы должны увидеть строку лога: Apr 30 02:06:04 sna-vm root: Test
Правила Rsyslog обычно содержат категорию (facility) и уровень (level). Комбинация facility.level определяет приоритет сообщения лога. Подробнее о категориях: TrendMicro Documentation.
Создайте правило rsyslog, которое сохраняет все логи с приоритетом user.emerg в файл /var/log/test.log. Добавьте следующее в /etc/rsyslog.conf:
user.emerg /var/log/test.log
Перезапустите rsyslog, чтобы применить изменения:
$systemctl restart rsyslog
Откройте новый терминал и выполните команду для проверки правила:
$logger -p user.emerg "test log"
По умолчанию при получении лога уровня "emergency" система отправляет широковещательное сообщение на все терминалы.
Просмотрите файл, куда мы перенаправили логи с этим приоритетом:
$tail /var/log/test.log
Вы должны увидеть: Apr 30 03:24:34 sna-vm user1: test log
Часть 3: Logrotate
SYSTEM: LOGROTATE
Logrotate — это системная утилита, которая защищает жесткий диск от переполнения логами. Она регулярно "ротирует" файлы: архивирует старый лог, сжимает его, создает пустой файл и удаляет самые старые логи.
Предположим, у нас есть лог-файл /var/log/lab.log, который необходимо периодически ротировать (архивировать и очищать), чтобы он не занимал все место на диске.
Посмотреть список всех конфигураций logrotate в системе:
$ls -lah /etc/logrotate.d/
Создадим свою конфигурацию. Сначала создайте директорию:
ПРИМЕЧАНИЕ: Вы можете протестировать конфигурацию без фактической ротации файлов: logrotate -s logstatus /etc/lab-rotate.d/lablog
Если ротируется лог активного сервиса, рекомендуется перезапустить сервис после ротации с помощью блока postrotate.
Часть 4: Мониторинг аутентификации
SYSTEM: AUTH.LOG
События входа в систему и попытки получения привилегий сохраняются в лог-файле /var/log/auth.log. Отслеживание неудачных попыток — ключевой шаг в обнаружении атак (например, брутфорса).
Создайте нового пользователя для имитации неудачного входа:
$sudo adduser testuser
Попробуйте переключиться на него и введите неправильный пароль:
$su testuser
Password:
su: Authentication failure
Проверьте лог-файл /var/log/auth.log:
$tail /var/log/auth.log
Вы увидите: Apr 30 20:03:07 sna-vm su: pam_unix(su:auth): authentication failure; logname= uid=1000 euid=0 tty=/dev/pts/0 ruser=user1 rhost= user=testuser
Попробуйте переключиться на root и трижды ввести неправильный пароль:
$sudo su
[sudo] password for user1:
Sorry, try again.
...
sudo: 3 incorrect password attempts
Мы можем отфильтровать файл на наличие неудачных попыток и неверных паролей: