# Контроль целостности

Данный раздел описывает средства контроля целостности ПО Picodata при
работе в защищенной ОС.

## Объекты контроля {: #control_objects }

<!--
9.1. СУБД 6, 5 класса защиты должна:
- в процессе запуска СУБД самостоятельно или с применением
  сертифицированной ОС контролировать целостность
  - конфигурации СУБД,
  - конфигураций БД,
  - процедур (программного кода) СУБД,
  - процедур (программного кода), хранимых в БД;
-->

Объектами контроля целостности в Picodata выступают:

- конфигурация СУБД
- конфигурация БД
- программный код СУБД
- процедуры, хранимые в БД <!-- TODO link sql routines doc -->

С точки зрения реализации защиты, эти объекты овеществляются в виде
файлов `*.xlog` / `*.snap` в рабочей директории инстанса и исполняемого
файла [picodata](../reference/cli.md) из состава дистрибутива.

## Реализация контроля целостности {: #implementation }

Контроль целостности реализуется через меры, направленные на
защиту рабочих и исполняемых файлов СУБД.

### Контроль при запуске инстанса {: #instance_start }

Контроль целостности происходит во время повторного запуска инстанса
Picodata, когда в рабочей директории присутствуют ранее созданные файлы
(объекты контроля). Для такой проверки предусмотрены следующие механизмы:

- внутренняя проверка валидности журналов `*.xlog`/`*.snap` средствами
  Picodata. Для каждой записи журнала производится проверка контрольной
  суммы (crc32). Изменение любой записи приводит к недействительности
  всего журнала. Подробнее см. [устройство формат
  WAL](https://www.tarantool.io/ru/doc/latest/dev_guide/internals/file_formats/#the-snapshot-file-format)
- размещение рабочей директории инстанса Picodata на отдельном
  логическом разделе, в опциях монтирования которого использован
  параметр `iversion`. Одновременно с этим следует настроить политику
  проверки целостности (службы `integrity-notifier` и
  `integrity-scanner` в защищенной ОС) на единовременную проверку
  содержимого рабочей директории. Подробнее см. [документацию ОС Альт 8
  СП](https://www.basealt.ru/altsp/docs), Руководство
  по комплексу средств защиты, п. 3.6.2. "Подсистема IMA/EVM"
- сверка контрольных сумм (md5sum) рабочих и исполняемых файлов СУБД
  средствами защищенной ОС
- запуск инстанса Picodata из-под специально созданного пользователя
  `picodata`, который эксклюзивно владеет правом записи в рабочую
  директорию инстанса

Данные механизмы подтверждают, что в промежутке времени между
остановкой инстанса и его повторным запуском данные файлы не были
изменены и/или повреждены.

!!! note "Примечание"
    Проверка целостности для первого запуска инстанса не применима и не
    производится (по причине отсутствия рабочих файлов).

### Контроль во время работы инстанса {: #instance_runtime }

<!--
9.2. СУБД 4 класса защиты наряду с требованиями, установленными
подпунктом 9.1 пункта 9 настоящих Требований, дополнительно должно
контролировать целостность процедур (программного кода) СУБД, процедур
(программного кода), хранимых в БД, в процессе функционирования СУБД не
реже одного раза в сутки.
-->

Контроль целостности в процессе функционирования СУБД также
осуществляется средствами защищенной ОС, которая должна быть настроена
на проверку целостности рабочих и исполняемых файлов СУБД не реже одного
раза в сутки.

## Информирование о нарушении целостности {: #notifications }

<!--
9.1. СУБД 6, 5 класса защиты должна:
- информировать администратора СУБД о нарушении целостности
  объектов контроля;
- информировать администратора БД о нарушении целостности
  - конфигураций БД,
  - процедур (программного кода), хранимых в БД;
-->

Факты нарушения целостности фиксируются в журнале аудита, см.
[integrity_violation](../reference/audit_events.md#integrity_violation)

Для настройки информирования см. [Оповещения о событиях
безопасности](../admin/audit_log.md#notifications)

Событие неуспешного запуска инстанса также фиксируется в стандартном
выводе (stdout) в виде ошибок `ER_INVALID_XLOG`,`ER_INVALID_XLOG_NAME`,
`ER_INVALID_XLOG_ORDER`, свидетельствующих о невозможности чтения
рабочих файлов СУБД.

## Блокирование доступа {: #blocking }

<!--
9.1. СУБД 6, 5 класса защиты должна:
- блокировать доступ пользователей СУБД (за исключением администратора
  СУБД) к СУБД и БД при выявлении нарушения целостности объектов
  контроля;
- блокировать доступ пользователей БД к БД при выявлении нарушения
  целостности конфигураций БД, процедур (программного кода), хранимых
  в БД.
-->

В случае выявления нарушения целостности доступ пользователей СУБД
блокируется за исключением Администратора СУБД. Для восстановления
целостности следует восстановить рабочие файлы инстанса из резервной
копии, см. [Резервное копирование и восстановление](../admin/backup_and_restore.md) и перезапустить
инстанс командой [`picodata run`](../reference/cli.md).

