Перейти к содержанию

Управление журналом событий#

Перечень журналируемых событий#

Для просмотра журнала событий безопасности используется утилита journalctl.

Тип события Расшифровка события
AUDIT_VIRT_CONTROL: pause Постановка ВМ на паузу
AUDIT_VIRT_CONTROL: unpause Снятие ВМ с паузы
AUDIT_VIRT_CONTROL: start Запуск ВМ
AUDIT_VIRT_CONTROL: hard_shutdown Принудительное выключение ВМ
AUDIT_VIRT_CONTROL: hard_reboot Принудительная перезагрузка ВМ
AUDIT_VIRT_CONTROL: clean_reboot Перезагрузка ВМ
AUDIT_VIRT_CONTROL: clean_shutdown Выключение ВМ
AUDIT_VIRT_CONTROL: suspend Приостановка ВМ
AUDIT_VIRT_CONTROL: resume Возобновление работы ВМ после приостановки
AUDIT_VIRT_INTEGRITY_CHECK Проверка целостности
AUDIT_VIRT_CREATE Создание ВМ
AUDIT_VIRT_DESTROY Уничтожение ВМ
AUDIT_VIRT_MIGRATE_IN Миграция ВМ в хост
AUDIT_VIRT_MIGRATE_OUT Миграция ВМ из хоста
SERVICE_START Запуск сервисов
SERVICE_STOP Остановка сервисов
USER_ROLE_CHANGE Смена роли пользователя
USER_START Аутентификация пользователя
USER_LOGIN Идентификация пользователя

Просмотр событий безопасности#

Просмотр журнала событий производится с помощью утилиты journalctl. Для просмотра определенных событий безопасности используются специальные параметры и ключи.

Ключ Описание
-b <номер журнала> Вывод журнала из определенной сессии
-f Просмотр событий в режиме реального времени
--since Просмотр событий с определенной даты/времени. Допустимые форматы: yyyy-mm-dd hh:mm:ss, yyyy-mm-dd, hh:mm, yesterday, today
--until Просмотр событий до определенной даты/времени. Допустимые форматы: yyyy-mm-dd hh:mm:ss, yyyy-mm-dd, hh:mm, yesterday, today, <N> hour ago и т.д.
-p <уровень критичности> Просмотр событий с определенным уровнем критичности, где <уровень критичности> принимает значения от 0 до 7
-n <количество> Вывод последних событий, где <количество> - количество выводимых событий

Уровни критичности:

  • 0: emergency (неработоспособность системы)
  • 1: alerts (предупреждения, требующие немедленного вмешательства)
  • 2: critical (критическое состояние)
  • 3: errors (ошибки)
  • 4: warning (предупреждения)
  • 5: notice (уведомления)
  • 6: info (информационные сообщения)
  • 7: debug (отладочные сообщения)

Просмотр всех событий из определенной сессии

journalctl -b <номер журнала>

где <номер журнала> определяется при выполнении команды journalctl --list-boots.

Просмотр списка журналов сессий

journalctl --list-boots
1
2
3
4
5
[root@vserver:~]# journalctl --list-boots
-3 0701fbd4aebb42a78a73526f2a86a4a8 Thu 2024-03-21 15:23:14 MSK—Fri 2024-03-22 19:01:21 MSK
-2 d39a3f4520da4c82932f72d6f413b9d9 Mon 2024-03-25 13:31:07 MSK—Fri 2024-04-05 19:20:35 MSK
-1 f965e7161502442eb2f59240e51b0801 Mon 2024-04-08 10:27:17 MSK—Fri 2024-04-12 19:13:42 MSK
0 02fd52b6ac92479e8784f0a6cbad32a5 Wed 2024-04-17 18:44:30 MSK—Fri 2024-04-19 10:36:03 MSK

где первый номер показывает номер журнала, а второй номер - boot ID - уникальный идентификатор журнала, который также можно использовать для вывода журнала.

Фильтрация событий безопасности#

Для фильтрации событий безопасности используется параметр grep:

Запуск сервиса

journalctl | grep SERVICE_START

Остановка сервиса

journalctl | grep SERVICE_STOP

Запуск ВМ

journalctl | grep "VIRT_CONTROL.*start"

Неуспешный запуск

journalctl | grep "VIRT_CONTROL.*start.*failed"

Запуск определенной ВМ

journalctl | grep "VIRT_CONTROL.*start.*<vm-uuid>"

где <vm-uuid> – это uuid ВМ, который можно узнать командой xe vm-list

Завершение работы ВМ

journalctl | grep "VIRT_CONTROL.*shutdown"

Успешные попытки:

journalctl | grep "VIRT_CONTROL.*clean_shutdown.*success"

Определенная ВМ:

journalctl | grep "VIRT_CONTROL.*clean_shutdown.*<vm-uuid>"

где <vm-uuid> – это uuid ВМ, который можно узнать командой xe vm-list

“Чистое” завершение работы

journalctl | grep "VIRT_CONTROL.*clean_shutdown"
journalctl | grep "VM.clean_shutdown.*audit"

Принудительное завершение работы

journalctl | grep "VIRT_CONTROL.*hard_shutdown"
journalctl | grep "VM.hard_shutdown.*audit"

Поставнока ВМ на паузу

journalctl | grep "VM.pause.*audit"

Снятие ВМ с паузы

journalctl | grep "VM.unpause.*audit"

Приостановка ВМ

journalctl | grep "VM.suspend.*audit"

Возобновление работы ВМ после приостановки

journalctl | grep "VM.resume.*audit"

Перезагрузка ВМ

journalctl | grep "VIRT_CONTROL.*VM.clean_reboot"
journalctl | grep "VM.clean_reboot.*audit"

Принудительная перезагрузка

journalctl | grep "VIRT_CONTROL.*VM.hard_reboot"
journalctl | grep "VM.hard_reboot.*audit"

Импорт ВМ

Импорт ВМ фиксируется как событие создания ВМ.

Экспорт ВМ

journalctl | grep VM.*export

Клонирование ВМ

journalctl | grep "VIRT_CREATE.*VM.clone"

Создание субъекта доступа

journalctl | grep subject.create

Удаление субъекта доступа

journalctl | grep subject.destroy

Доступ субъектов доступа к УВМ

journalctl -b 0 | grep USER_LOGIN

journalctl | grep USER_AUTH

Успешный доступ

journalctl | grep "USER_LOGIN.*success"

journalctl | grep "USER_AUTH.*success"

Неуспешный доступ

journalctl | grep "USER_LOGIN.*failed"

journalctl | grep "USER_AUTH.*failed"

Доступ определенного субъекта доступа к УВМ

journalctl | grep "USER_LOGIN.*user"

Доступ по ssh

journalctl | grep "USER_LOGIN.*ssh"

Неуспешная попытка доступа по ssh (неправильный логин)

journalctl | grep "sshd.*invalid"

Создание ВМ

journalctl | grep "VIRT_CREATE.*VM.create"

Удаление ВМ

journalctl | grep VIRT_DESTROY

Копирование ВМ

journalctl | grep "VIRT_CREATE.*VM.copy"

Управление ролями пользователей (присвоение/удаление/изменение)

journalctl | grep 'role.*add' && journalctl -b | grep 'role.\*remove'

Контроль целостности объектов контроля (VDI ВМ)

journalctl | grep VIRT_INTEGRITY_CHECK

Успешный контроль целостности

journalctl | grep "VIRT_INTEGRITY_CHECK.*success"

Неуспешный контроль целостности

journalctl | grep "VIRT_INTEGRITY_CHECK.*failed"

Обновление КС VDI ВМ

journalctl | grep VDI.update_checksum

Создание снапшота

journalctl | grep VM.snapshot

Миграция ВМ на другой сервер

journalctl | grep VIRT_MIGRATE_OUT

Миграция ВМ с другого сервера

journalctl | grep VIRT_MIGRATE_IN

Создание хранилища

journalctl | grep sr.create

Удаление журнала событий#

Удалить журналы, оставив только последние 100 Мб:

journalctl --vacuum-size=100M

Удалить журналы, оставив журналы только за последние 7 дней:

journalctl --vacuum-time=7d

Экспорт журнала событий#

  1. Выполните команду по выгрузке журнала в файл. Пример выгрузки:
    journalctl [ключи|параметры] > journal.log
    
  2. Подключите и смонтируйте USB-Flash-накопитель к устройству, на которое установлен Numa vServer.
  3. Скопируйте полученный файл на USB-Flash-накопитель.

Контроль целостности журнала событий#

Для обеспечения проверки целостности журнала аудита:

  1. Сгенерируйте пару ключей для подписи журнала аудита.

    journalctl --setup-key
    
    Команда выведет значение секретного ключа.

  2. Проверьте целостность журнала.

    journalctl --verify --verify-key '<значение секретного ключа>'
    

Для автоматизации контроля целостности журнала аудита рекомендуем использовать связку systemd-сервиса и таймера, для этого:

  1. Создайте файл сервиса:

    nano /etc/systemd/system/journal-verify.service
    
    [Unit]
    Description=Verify integrity of systemd journal
    After=systemd-journald.service
    Requires=systemd-journald.service
    
    [Service]
    Type=oneshot
    
    User=root
    
    ExecStart=/bin/sh -c '/usr/sys/sw/bin/journalctl --verify --verify-key=<значение секретного ключа>'
    

    где <значение секретного ключа> – значение, выводимое при выполнении команды journalctl --setup-key

  2. Создайте таймер:

    nano /etc/systemd/system/journal-verify.timer
    

    1
    2
    3
    4
    5
    6
    7
    8
    Description=Daily systemd journal integrity check at 07:00
    
    [Timer]
    OnCalendar=*-*-* 07:00:00
    Persistent=yes
    
    [Install]
    WantedBy=timers.target 
    
    3. Перечитайте конфигурацию systemd и включите в автозагрузку таймер:

    systemctl daemon-reload
    systemctl enable --now journal-verify.timer
    
    4. Результат проверки доступен с помощью команды:

    journalctl -u journal-verify.service
    
    Пример вывода:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    [root@vserver-55:~]# journalctl -u journal-verify.service
    -- Logs begin at Sun 2025-11-30 20:04:15 MSK, end at Fri 2025-12-05 10:53:46 MSK. --
    дек 05 07:00:00 vserver-55 systemd[1]: Starting Verify integrity of systemd journal...
    дек 05 07:00:02 vserver-55 sh[23801]: PASS: /var/log/journal/38855a3423a049e2be9042a56f9aa8a3/system@1f60a7aadceb499392f410739b8f11bc-0000000002f93c01-0006450d97e3a086.journal
    дек 05 07:00:05 vserver-55 sh[23801]: PASS: /var/log/journal/38855a3423a049e2be9042a56f9aa8a3/system@1f60a7aadceb499392f410739b8f11bc-0000000002ec0bb1-000644f64f0875f9.journal
    ........
    дек 05 07:01:58 vserver-55 sh[23801]: PASS: /var/log/journal/38855a3423a049e2be9042a56f9aa8a3/system@1f60a7aadceb499392f410739b8f11bc-00000000030276f0-0006451e2c1fa56d.journal
    дек 05 07:01:58 vserver-55 systemd[1]: journal-verify.service: Succeeded.
    дек 05 07:01:58 vserver-55 systemd[1]: Finished Verify integrity of systemd journal.