Использование журнала аудита¶
Общие сведения¶
На каждом инстансе 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
почтовый ящик.