Установка модуля шифрования QSS с использованием ФДСЧ ПАК «Соболь»
Подготовка
Предполагается, что работы проводятся на сервере с установленной ОС Astra Linux 1.7, СУБД QHB уже установлена, файлы кластера находятся в директории /opt/qhb/, все действия выполняются от пользователя root. Также должны быть получены пакеты для установки. Необходимые пакеты запрашиваются у поставщика QHB и источника ДСЧ (в данном случае ПАК Соболь1).
Установка пакетов
Установить .deb пакеты:
sudo dpkg -i LIBGOSTCRYPTO_1_0_0_1_AMD64.DEB
sudo dpkg -i QSS_1_0_0_1_AMD64.DEB
sudo dpkg -i sobol_4.4-17-astra1.7-signed_amd64.deb
sudo dpkg -i sobol-scheck_4.4-17-astra1.7-signed_amd64.deb
Для установки libglade2-0 необходимо:
- Вставить диск с базовым репозиторием, добавить его в etc/apt/sources.list.
- Выполнить команду:
apt install libglade2-0
Настройка QSS
Добавить пользователей ОС, осуществляющих администрирование QSS, в группу qss-admin, используя следующую команду:
usermod -a -G qss-admin <имя_пользователя>
Добавить пользователей ОС, от которых будут осуществляться клиентские действия с QSS, в группу qss-client. В обязательном порядке добавляется пользователь qhb с помощью следующей команды:
usermod -a -G qss-client qhb
Дополнительные пользователи добавляются командой:
usermod -a -G qss-client <имя_пользователя>
Внести изменения в файл настроек /etc/qss/config.yml, сменить значение параметра hw_rng с Os на Sobol (используемый ФДСЧ2):
nano /etc/qss/config.yml
Рисунок 1. Внесенные изменения в файле /etc/qss/config.yml

Вычислить хеш-сумму и добавить ее в конец файла с контрольными хеш-суммами /etc/qss/bin_integrity.streebog512:
qss-client streebog512 --skip-bin-integrity /usr/lib/libsobol.so >> /etc/qss/bin_integrity.streebog512
Проверить, что хеш-сумма правильно записана:
cat /etc/qss/bin_integrity.streebog512
Внести изменения в файл свойств сервиса /lib/systemd/system/qss.service (можно просто заменить содержимое):
[Unit]
Description=Quantum Secure Storage
[Install]
WantedBy=multi-user.target
[Service]
Type=simple
User=qss
Group=qss
ExecStart=/usr/bin/qss
RestrictAddressFamilies=AF_UNIX
PrivateUsers=no
LimitMEMLOCK=infinity
LimitNOFILE=65536
RuntimeDirectory=qss
StateDirectory=qss
LogsDirectory=qss
ConfigurationDirectory=qss
RuntimeDirectoryMode=755
StateDirectory=750
LogsDirectoryMode=750
ConfigurationDirectoryMode=755
UMask=0077
CapabilityBoundingSet=~CAP_AUDIT_CONTROL CAP_AUDIT_READ CAP_AUDIT_WRITE
CapabilityBoundingSet=~CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH
CapabilityBoundingSet=~CAP_MAC_ADMIN CAP_MAC_OVERRIDE
CapabilityBoundingSet=~CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_BROADCAST CAP_NET_RAW
CapabilityBoundingSet=~CAP_SETGID CAP_SETFCAP CAP_SETPCAP CAP_SETUID
CapabilityBoundingSet=~CAP_SYS_ADMIN CAP_SYS_BOOT CAP_SYS_CHROOT CAP_SYS_NICE CAP_SYS_PACCT CAP_SYS_PTRACE CAP_SYS_RESOURCE CAP_SYS_TIME CAP_SYS_TTY_CONFIG
CapabilityBoundingSet=~CAP_IPC_LOCK CAP_BLOCK_SUSPEND CAP_CHOWN CAP_FOWNER CAP_FSETID CAP_IPC_OWNER CAP_KILL CAP_LEASE CAP_LINUX_IMMUTABLE CAP_WAKE_ALARM
Обновить конфигурацию сервисов:
systemctl daemon-reload
Запустить QSS как SystemD сервис:
systemctl start qss.service
Проверить работу сервиса:
systemctl status qss.service
Не должно быть ошибок, в строке «Active» выведено значение «active (running)». Включить автозагрузку службы при загрузке системы:
systemctl enable.service
Если после запуска происходит ошибка и сервис не запускается, нужно повысить права пользователя qss:
pdpl-user -l 63:63 qss
Инициализация хранилища QSS
Произвести инициализацию хранилища QSS от имени пользователя, входящего в группу qss-admin:
qss-admin --init <имя_пользователя>
<пароль_пользователя>
<пароль_пользователя>
Рисунок 2. Инициализация хранилища QSS из-под пользователя «user»

Выйти из административного интерфейса, используя команду exit либо комбинацию
клавиш Ctrl+C или Ctrl+D. Проверить авторизацию в административном
интерфейсе:
qss-admin <имя_пользователя>
<пароль_пользователя>
Рисунок 3. Проверка авторизации в административном интерфейсе

Создать рабочие ключи в административном интерфейсе, используя команду (типы ключей можно получить, используя встроенную справку либо автодополнение по нажатию Tab):
key create <key_type (аргумент выбрать клавишей <Tab>)> <key_label>
Пример: key create kuznyechik key.
Рисунок 4. Создание рабочего ключа

Рисунок 5. Проверка статуса командой «key list»

Разблокировать рабочие ключи в административном интерфейсе, используя команду:
key unlock <key_label> (key unlock key)
Рисунок 6. Разблокировка рабочих ключей командой «key unlock key»

Проверить статус рабочих ключей в административном интерфейсе, используя команду:
key list
Рисунок 7. Проверка статуса командой «key list» после разблокировки

Выйти из административного интерфейса, используя команду exit либо комбинацию
клавиш Ctrl+C или Ctrl+D. Добавить ключи в конфигурацию qss для
qhb: в файле /opt/qhb/qss2_config.toml задать значение для параметра
key — созданные и разблокированные раннее ключи key = <key_label>
(в примере key).
Рисунок 8. Добавление ключа в конфигурацию «qss» для «qhb»

Установить доступ по умолчанию к таблицам с шифрованием в файле qhb.conf: установить default_table_access_method = 'qss' и qss_mode = 2. После этого нужно выполнить команду:
systemctl restart qhb-test»
Рисунок 9. Редактирование файла «qhb.conf»

Рисунок 10. Установка и настройка автоматического шифрования

Проверка работоспособности модуля шифрования QSS
После того как был установлен модуль шифрования QSS, который использует ФДСЧ ПАК «Соболь», необходимо проверить его работоспособность. Для этого проводится небольшой тест. Нужно авторизоваться как qhb.
Рисунок 11. Авторизация под пользователем «qhb»

Перед началом тестирования необходимо проверить значения в полях меню port и
default_table_access_method. Значение в поле port требуется для того,
чтобы можно было подключиться к оболочке, в которой будут выполняться команды SQL.
Параметр Default_table_access_method задает табличный метод доступа по
умолчанию, который используется при создании таблиц или материализованных
представлений, если тот не указан явно в команде CREATE, либо при выполнении
команды SELECT ... INTO, которая не позволяет явно задать метод доступа.
Значение по умолчанию — heap (не шифрованные данные).
Открыть в текстовом редакторе конфигурационный файл qhb.conf командой
nano /opt/qhb/qhb.conf (так как этот файл нужно открыть только для проверки;
вместо nano можно использовать vim или cat).
Найти поле со значением port и запомнить его.
Рисунок 12. Уточнение значения в поле «port»

Далее найти поле default_table_access_method. В примере указано значение qss. Оно было изменено при настройке модуля шифрования QSS. Это значит, что по умолчанию записи в новых созданных таблицах будут зашифрованы модулем шифрования QSS. Также в данном поле может быть указано значение heap. Это означает, что в новых таблицах значения будут не зашифрованы.
Рисунок 13. Уточнение значения в поле «default_table_access_method»

После проверки продолжить тестирование модуля QSS. Подключиться к оболочке
для выполнения команд SQL. Для этого ввести команду psql -h localhost -p 50000,
где:
- -h — указывает хост, на котором работает сервер QHB (по умолчанию используется localhost, если сервер находится на одной машине);
- -p — указывает номер порта который представлен в qhb.conf (в данном случае это не порт по умолчанию (5432), а измененный порт при настройке QHB).
Рисунок 14. Подключение к СУБД

Командой \dt+ выводится список таблиц с наполнением. В примере представлены
ранее созданные таблицы (далее будут создаваться другие).
Рисунок 15. Вывод списка таблиц БД

Создать 2 таблицы. Одна будет с шифрованными данными вторая с незашифрованными данными. Для создания таблицы с шифрованием используется команда:
create table test_qss (id int4, test text) using qss;
using qss писать в команде не обязательно, так как уже стоит режим, который шифрует данные в таблицах.
Для создания таблицы без шифрования используется команда:
create table test_heap (id int4, test text) using heap;
обязательно нужно указать, что таблица не должна шифроваться, с помощью параметра using heap.
Рисунок 16. Создание 2 таблиц БД

Командой \dt+ проверить созданные таблицы. В столбце Метод доступа видно,
что одна таблица шифруется, а вторая — нет.
Рисунок 17. Вывод списка таблиц БД после добавления

Ввести команды:
SELECT pg_relation_filepath('test_qss');
SELECT pg_relation_filepath('test_heap');
Они показывают путь к файлу таблицы, индекса, последовательности или другой сущности, хранящейся в отдельном файле (необходимые далее поля base/5/16398 и base/5/16403).
Рисунок 18. Вывод пути к файлу таблицы БД и его индексу

Добавить новые записи в таблицу базы данных командами:
insert into test_qss(id,test) values (1…,'Gamma test QSS 1…');
insert into test_heap(id,test) values (1…,'Gamma test HEAP 1…');
Рисунок 19. Добавление новых записей в таблицу базы данных

Выполнить команду:
checkpoint;
Данная команда нужна для принудительного выполнения контрольной точки (checkpoint) в журнале упреждающей записи (WAL). Это необходимо, чтобы:
- Обеспечить целостность данных — изменения записываются на диск, что гарантирует, что база данных может восстановиться до согласованного состояния после сбоя.
- Оптимизировать производительность — регулярные контрольные точки ограничивают объем журнала транзакций (WAL), который нужно обработать при восстановлении.
- Управлять использованием памяти — контрольные точки сбрасывают «грязные» страницы данных из памяти на диск, позволяя QHB освободить память для новых транзакций.
После подготовки требуется проверка, шифруются ли данные. Для этого необходимо подключиться к базе данных по SFTP. Так как обычный пользователь не имеет прав для каталога /opt/qhb/ и всех объектов внутри него, то нужно повысить права командой
chmod -R 775 /opt/qhb/
Далее необходимо перейти в директорию /opt/qhb/base/5/ и там найти созданные ранее таблицы 16398 и 16403.
Рисунок 20. Просмотр созданных ранее таблиц

При просмотре таблицы 16398 видно, что записанные в ней данные зашифрованы.
Рисунок 21. Проверка шифрования таблицы БД 16398

В таблице 16403 видно, что записанные в ней данные не зашифрованы.
Примечание
Очень важно учитывать, на каком языке записаны данные в таблицах базы данных. Не всегда кириллица корректно воспринимается редакторами или программами, даже если они изначально были на нее рассчитаны.
Рисунок 22. Проверка шифрования таблицы БД 16403

ПАК Соболь (Программно-аппаратный комплекс) — сертифицированное решение для защиты критически важной информации, обеспечивающее доверенную загрузку операционной системы, контроль целостности системы и идентификацию пользователей с использованием электронных ключей.
ФДСЧ — физический датчик случайных чисел.