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

Использование журнала аудита

Общие сведения

На каждом инстансе Picodata можно включить регистрацию событий и запись соответствующей информации в журнал аудита.

Журнал аудита позволяет администратору отслеживать все важные события, которые влияют на безопасность кластера Picodata, включая, например, создание новых учетных записей, изменение их паролей и привилегий, и т.д.

См. также:

Способы ведения журнала

Каждый узел кластера ведет свой собственный журнал, но настройка параметров журнала производится централизованно. В зависимости от настройки, журнал может вестись следующими способами:

  • file — в виде текстового файла, по строчке на событие. В таком случае смотреть его можно средствами защищенной ОС, а также при помощи API, предоставляемых самой СУБД.
  • pipe — с использованием внешнего процесса-коллектора, который СУБД должна будет запустить при старте узла. В этом случае журнал будет поступать в текстовом виде на вход процессу-коллектору (через stdin). Вся дальнейшая логика работы целиком зависит от запущенного процесса; например, он может отправлять журнал в централизованное внешнее хранилище.
  • syslog — с использованием общесистемного логирования и встроенных средств защищенной ОС. Подобная схема решает вопросы архивации, ротации и оповещения администратора. В качестве реализации Syslog на современных дистрибутивах Linux часто используется journald (компонент системного менеджера Systemd), который имеет множество настроек и даже позволяет отправлять журналы на внешние хосты.

Включение журнала

По умолчанию, запись событий не ведется. Включить журнал можно при запуске инстанса, указав параметр picodata run --audit.

Для примера, задействуем файл журнала при запуске инстанса:

Вывод журнала в текстовый файл:

picodata run --audit=/tmp/audit.log

Вывод журнала в syslog:

picodata run --audit=syslog:

Получение доступа к журналу

Если журнал выводится в отдельный текстовый файл, то отслеживать изменения в нем можно следующей командой:

tail -f /tmp/audit.log

Вывод журнала в syslog в современных дистрибутивах Linux предполагает доступ к данным с помощью journalctl (компонента Systemd). Для изоляции событий, относящихся только к инстансу Picodata, используйте такую команду:

journalctl -f | grep tarantool

Если запись в syslog происходит через скрипт-обработчик (пример), то команда для доступа к журналу будет немного отличаться:

journalctl -f | grep AUDIT

Оповещения о событиях безопасности

Поддерживаемые способы доставки оповещений

В Picodata существует возможность получать оповещения о событиях, зафиксированных в журнале аудита. Поддерживаются следующие способы доставки оповещений:

  • уведомления для графического рабочего стола
  • уведомления по электронной почте

Оповещения для рабочего стола

Для доставки оповещений на рабочий стол используется программа notify-send, имеющаяся в составе защищенной ОС. Для того, чтобы использовать ее совместно с Picodata, потребуется создать файл-обработчик следующего содержания:

#!/usr/bin/env python

import json
import subprocess
import sys
from systemd import journal

for line in sys.stdin:
    if line:
        journal.send(f"AUDIT {line}")
        entry = json.loads(line)
        if entry['severity']:
            subprocess.call(['notify-send', entry['message']])

Сохраните этот код в файл audit-sink.py в директорию, из которой будет запускаться picodata, сделайте его исполняемым (chmod +x audit-sink.py) и затем запустите инстанс:

picodata run --admin-sock ./i1.sock --audit='|/tmp/audit-sink.py'
В результате, сообщения из журнала аудита будут сохраняться в syslog и дублироваться в виде уведомлений на рабочем столе.

Оповещения по электронной почте

Для получения оповещений по электронной почте потребуются:

  • программа sendmail, имеющаяся в составе защищенной ОС
  • настройка sendmail для корректной работы с почтовым сервером
  • файл-обработчик для дублирования событий журнала аудит в виде сообщений для sendmail

Для настройки sendmail нужно отредактировать файл настроек /etc/mail/sendmail.mc следующим образом:

define(`SMART_HOST', `your.smtp.server')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
FEATURE(`authinfo',`hash -o /etc/mail/authinfo.db')dnl

где your.smtp.server — адрес SMTP-сервера для отправки писем

Далее следует настроить аутентификацию, отредактировав файл /etc/mail/authinfo:

AuthInfo:your.smtp.server "U:your_username" "P:your_password" "M:PLAIN"

где:

  • your.smtp.server — адрес SMTP-сервера для отправки писем
  • your_username — имя пользователя
  • your_password — пароль пользователя
  • PLAIN — тип аутентификации

Следующим шагом нужно сгенерировать базу данных для аутентификации:

sudo makemap hash /etc/mail/authinfo < /etc/mail/authinfo

сгенерировать конфигурацию sendmail:

sudo make -C /etc/mail

включить и запустить sendmail:

sudo systemctl enable --now sendmail.service

Теперь можно использовать модифицированный скрипт audit-sink.py со следующим содержанием:

#!/usr/bin/env python

import json
import subprocess
import sys
from systemd import journal

for line in sys.stdin:
    if line:
        journal.send(f"AUDIT {line}")
        entry = json.loads(line)
        if entry['severity']:
            subprocess.call(['sendmail user@example.com <', entry['message']])

В результате, сообщения из журнала аудита будут попадать в syslog от имени процесса python и дублироваться в виде писем на указанный вместо user@example.com почтовый ящик.