Использование журнала аудита¶
Общие сведения¶
На каждом инстансе 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:
В файле конфигурации¶
Используйте параметр instance.audit в файле конфигурации:
-
Сгенерируйте шаблон файла конфигурации со значениями по умолчанию:
picodata config default -o config.yaml
-
Отредактируйте полученный файл
config.yaml
, задав нужные значения у параметров. В том числе, измените строкуaudit: null
, указав требуемый способ вывода журнала.
Вывод журнала в текстовый файл:Вывод журнала в syslog:audit: file:/tmp/audit.log
audit: syslog:
-
Запустите инстанс, используя параметры из файла конфигурации:
picodata run --config config.yaml
С помощью переменной окружения¶
Задайте нужное значение для переменной PICODATA_AUDIT_LOG
.
Вывод журнала в текстовый файл:
PICODATA_AUDIT_LOG=audit.log picodata run
Вывод журнала в syslog:
PICODATA_AUDIT_LOG=syslog: picodata run
Необходимый набор переменных иногда удобнее задать в shell-скрипте. Например:
#!/bin/bash
export PICODATA_AUDIT_LOG=syslog:
picodata run
С помощью Ansible¶
Используйте переменные audit
, audit_to
и audit_pipe_command
при настройке роли
Picodata для Ansible:
audit
— включение аудита событий в кластере. Может принимать значенияtrue
иfalse
audit_to
— способ ведения журнала аудита. Может принимать значенияsyslog
(по умолчанию),file
иpipe
audit_pipe_command
— команда для перенаправления сообщений аудит в подпроцесс в том случае, если вaudit_to
задано значениеpipe
Порядок действий для использования переменных:
- Ознакомьтесь с инструкцией по Развертыванию кластера с помощью Ansible
-
Создайте инвентарный файл
hosts/cluster.yml
и добавьте в него нужный набор параметров аудита.Вывод журнала в текстовый файл (файлы аудита будут размещаться в
log_dir
и начинаться сaudit-
):all: vars: log_dir: /var/log/picodata audit: true audit_to: file
Вывод журнала в syslog:
all: vars: audit: true audit_to: syslog
-
Создайте плейбук
playbooks/picodata.yml
(см. подробнее) - Установите кластер:
ansible-playbook -i hosts/cluster.yml playbooks/picodata.yml
Получение доступа к журналу¶
Если журнал выводится в отдельный текстовый файл, то отслеживать изменения в нем можно следующей командой:
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
почтовый ящик.