Г. База данных безопасности
Информация обо всех пользователях баз данных СУБД «РЕД База Данных» хранится в общей базе данных безопасности,
которая расположена в корневой директории каталога установки сервера и называется security5.fdb. В этой
базе хранятся параметры пользователей системы, созданных с помощью различных плагинов управления пользователями,
политики безопасности, хэши старых паролей. Эти данные располагаются в системных таблицах, которые представлены
в таблице Г.1.
Таблица |
Содержание |
|---|---|
PLG$USERS |
Хранит параметры пользователей системы, созданных с помощью плагина управления пользователями |
PLG$SRP |
Хранит параметры пользователей системы, созданных с помощью плагина управления пользователями |
PLG$MF |
Хранит параметры пользователей системы, созданных с помощью плагина управления пользователями |
PLG$POLICIES |
Хранит политики учетных записей пользователей |
PLG$PASSWD_HISTORY |
Хранит хэши старых паролей |
PLG$USER_POLICY |
Хранит информацию о назначенных пользователям политиках |
Г.1. PLG$USERS
Хранит параметры пользователей системы, созданных с помощью плагина управления пользователями Legacy_UserManager.
Идентификатор столбца |
Тип данных |
Описание |
|---|---|---|
PLG$USER_NAME |
VARCHAR(63) |
Уникальное имя пользователя (логин). |
PLG$GROUP_NAME |
VARCHAR(63) |
Название группы. |
PLG$UID |
INTEGER |
ID пользователя. |
PLG$GID |
INTEGER |
ID группы. |
PLG$PASSWD |
VARBINARY(64) |
Пароль. |
PLG$COMMENT |
BLOB SUB_TYPE TEXT SEGMENT 80 |
Комментарий. |
PLG$FIRST_NAME |
VARCHAR(32) |
Имя пользователя. |
PLG$MIDDLE_NAME |
VARCHAR(32) |
Отчество пользователя. |
PLG$LAST_NAME |
VARCHAR(32) |
Фамилия пользователя. |
PLG$PASSWD_TIME |
TIMESTAMP |
Дата установки пароля |
Г.2. PLG$SRP
Идентификатор столбца |
Тип данных |
Описание |
|---|---|---|
PLG$USER_NAME |
VARCHAR(63) |
Уникальное имя пользователя (логин). |
PLG$VERIFIER |
VARCHAR(128) |
Зашифрованный пароль. |
PLG$SALT |
VARCHAR(32) |
Некоторая случайная последовательность для формирования |
PLG$COMMENT |
BLOB SUB_TYPE TEXT SEGMENT 80 |
Комментарий. |
PLG$FIRST |
VARCHAR(32) |
Имя пользователя. |
PLG$MIDDLE |
VARCHAR(32) |
Отчество пользователя. |
PLG$LAST |
VARCHAR(32) |
Фамилия пользователя. |
PLG$ATTRIBUTES |
BLOB SUB_TYPE TEXT SEGMENT 80 |
Пользовательские атрибуты |
PLG$ACTIVE |
BOOLEAN |
Состояние пользователя: активное или неактивное |
PLG$PASSWD_TIME |
TIMESTAMP |
Дата установки пароля |
Г.3. PLG$MF
Идентификатор столбца |
Тип данных |
Описание |
|---|---|---|
PLG$USER_NAME |
VARCHAR(63) |
Уникальное имя пользователя (логин). |
PLG$HASH_ALG |
VARCHAR(32) |
Название алгоритма хэширования. Этот алгоритм будет использован для проверки пароля. Если поле не указано, то используется старый алгоритм хэширования. |
PLG$MF_PASSWD |
VARCHAR(256) |
хэш пароля многофакторного пользователя. |
PLG$COMMENT |
BLOB SUB_TYPE TEXT SEGMENT 80 |
Комментарий. |
PLG$FIRST |
VARCHAR(32) |
Имя пользователя. |
PLG$MIDDLE |
VARCHAR(32) |
Отчество пользователя. |
PLG$LAST |
VARCHAR(32) |
Фамилия пользователя |
PLG$PASSWD_TIME |
TIMESTAMP |
Дата установки пароля |
PLG$ATTRIBUTES |
BLOB SUB_TYPE TEXT SEGMENT 80 |
Пользовательские атрибуты. |
PLG$ACTIVE |
BOOLEAN |
Состояние пользователя: активное или неактивное. |
Г.4. PLG$POLICIES
Используется для хранения политик учетных записей пользователей.
Идентификатор столбца |
Тип данных |
Описание |
|---|---|---|
PLG$POLICY_NAME |
VARCHAR(32) |
Имя политики безопасности. Политика по умолчанию имеет значение поля равное |
PLG$PSWD_NEED_CHAR |
INTEGER |
Минимально допустимое число буквенных символов в пароле. |
PLG$PSWD_NEED_DIGIT |
INTEGER |
Минимально допустимое число цифровых символов в пароле |
PLG$PSWD_NEED_DIFF_CASE |
INTEGER |
Необходимость наличия в пароле буквенных символов в различных регистрах |
PLG$PSWD_MIN_LEN |
INTEGER |
Минимально допустимая длина пароля |
PLG$PSWD_VALID_DAYS |
INTEGER |
Срок действия пароля в днях. |
PLG$PSWD_UNIQUE_COUNT |
INTEGER |
Количество не повторяющихся подряд паролей |
PLG$MAX_FAILED_COUNT |
INTEGER |
Максимальное число ошибок при прохождении аутентификации. |
PLG$AUTH_FACTORS |
VARCHAR(64) |
Методы аутентификации хранятся в виде строки, состоящей из символов:
|
PLG$MAX_UNUSED_DAYS |
INTEGER |
Максимальное время неактивности учетных записей пользователя в днях. |
Г.5. PLG$PASSWD_HISTORY
Хранит хэши старых паролей.
Идентификатор столбца |
Тип данных |
Описание |
|---|---|---|
PLG$KEY_ID |
INTEGER |
Суррогатный первичный ключ |
PLG$PLUGIN |
VARCHAR(64) |
Плагин управления пользователями |
PLG$USER_NAME |
VARCHAR(63) |
Ссылается на логин пользователя, определенный в системной таблице |
PLG$PASSWD |
VARBINARY(64) |
Пароль Legacy |
PLG$MF_PASSWD |
VARCHAR(256) |
Хэш пароля многофакторного пользователя |
PLG$HASH_ALG |
VARCHAR(32) |
Название алгоритма хэширования. Этот алгоритм будет использован для проверки пароля. Если поле не указано, то используется старый алгоритм хэширования. |
PLG$VERIFIER |
VARCHAR(128) |
Зашифрованный пароль (верификатор) SRP |
PLG$SALT |
VARCHAR(32) |
Соль SRP |
Г.6. PLG$USER_POLICY
Информация о назначенных пользователям политиках.
Идентификатор столбца |
Тип данных |
Описание |
|---|---|---|
PLG$USER_NAME |
VARCHAR(63) |
Уникальное имя пользователя (логин) |
PLG$POLICY_NAME |
VARCHAR(32) |
Имя политики безопасности |
PLG$FAILED_COUNT |
INTEGER |
Число ошибок при прохождении аутентификации |
PLG$ACCESS_TIME |
TIMESTAMP |
Время после которого пользователю будет разрешен доступ |
PLG$LAST_ONLINE |
TIMESTAMP |
Дата последней активности пользователя |
Д. Настройка КриптоПро (на примере версии 4.0)
Д.1. Настройка в операционной системе Windows
Д.1.1. Общие настройки
Скачайте дистрибутив КриптоПро с официального сайта КриптоПРО в разделе загрузка. Доступ к скачиванию обеспечивается после регистрации на сайте.
Установите КриптоПро.
Настройте провайдер через Панель управления->КриптоПро CSP. На вкладке Алгоритмы настраиваются параметры для криптопровайдера (рисунок).
Рис. Д.1 Настройка алгоритмов
Название криптопровайдера –
GOST R 34.10-2012 Signature with Diffie_Hellman Key Exchange. Используется в параметреProviderNameфайла конфигурацииfirebird.conf;Параметры алгоритма шифрования – название алгоритма шифрования по умолчанию. Используется в параметре
SymmetricMethodфайла конфигурацииfirebird.conf;Параметры алгоритма подписи – название алгоритма ЭЦП по умолчанию, аналогично использование псевдонима
AT_SIGNATUREкак значение параметра для утилитыmint;Параметры алгоритма Диффи-Хелмана – название алгоритма, который будет использоваться по умолчанию для обмена сессионными ключами, аналогично использованию псевдонима
AT_KEYEXCHANGEкак значение параметра для утилитыmint.
Д.1.2. Создание контейнеров с закрытыми ключами
Сессионные ключи генерируются плагином автоматически на время сессии. Для более безопасного обмена ими и аутентификации с использованием сертификата желательно использовать секретные ключи, которые хранятся в контейнерах.
Контейнеры сохраняются на считывателях, соответственно, необходимо настроить считыватели на вкладке оборудование.
Необходимо установить биологический датчик случайных чисел на вкладке оборудование.
Для генерирования секретных ключей можно воспользоваться средством КриптоПро
<каталог_установки_КриптоПро>\csptest.exe:csptest –keyset -provtype 81 -newkeyset -container <имя контейнера с секретным ключом>
Необходимо создавать ключи без паролей, так как при аутентификации используется режим
CRYPT_SILENT(чтобы не нарушать работу сервера(рисунок)).
Рис. Д.4 Запрос установки пароля
При создании ключа следует учитывать разграничение доступа среди пользователей Windows, то есть ключ, созданный одним пользователем, не будет доступен другому. Если сервер работает в режиме службы (то есть от имени системного пользователя), то необходимо, чтобы владельцем контейнера с серверными ключами была сама операционная система. Для этого необходимо при создании серверного контейнера указать опцию
-machinekeys:csptest –keyset -provtype 81 -newkeyset -container <имя контейнера> -machinekeys
Ключи хранятся в следующем разделе реестра:
HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Settings\USERS\SID пользователя\Keys\<имя контейнера>
Д.1.2.1. Пример создания ключевой пары
csptest -keyset -newkeyset -container test_keyq
CSP (Type:80) v4.0.9014 KC1 Release Ver:4.0.9842 OS:Windows CPU:IA32
FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 8411672
GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2012 Cryptographic
Service Provider
Container name: "test_keys"
Signature key is not available.
Attempting to create a signature key...
a signature key created.
Exchange key is not available.
Attempting to create an exchange key...
an exchange key created.
Keys in container:
signature key
exchange key
Extensions:
OID: 1.2.643.2.2.37.3.9
PrivKey: Not specified - 17.08.2018 19:19:40 (UTC)
OID: 1.2.643.2.2.37.3.10
PrivKey: Not specified - 17.08.2018 19:19:59 (UTC)
Total: SYS: 0,515 sec USR: 0,359 sec UTC: 121,656 sec
[ErrorCode: 0x00000000]
Д.1.3. Получение сертификата
Для получения сертификата в ОС Windows с помощью тестового центра КриптоПро выполните следующие действия:
Сформируйте запрос на получение сертификата с помощью утилиты
cryptcpи ее командыcreatrqst.-creatrqst -dn <RDN> [-provtype <N>] [-provname <CSP>] [-SMIME] [-nokeygen|-exprt] [-keysize <n>] [-hashAlg <OID>] [-ex|-sg|-both] [-ku|-km] [-cont <имя>] [-silent] [-pin <пароль>|-askpin] [-certusage <OIDs>] [-der] [-ext <расширение>] <имя файла>
При генерации запроса для клиентского сертификата необходимо указать заранее созданный клиентский контейнер с ключевой парой. Для этого используется опция
-nokeygen. Например:cryptcp -creatrqst -nokeygen -cont test_keys -provtype 81 -dn CN=tester test.req
Подробнее о командах и входных параметрах этой утилиты см. руководство по приложению командной строки
CryptCPпо адресу: http://cryptopro.ru/sites/default/files/products/cryptcp/cryptcp_5.0.x.pdf.Откройте в браузере ссылку http://www.cryptopro.ru/certsrv (тестовый удостоверяющий центр КриптоПро).
Нажмите "Отправить готовый запрос PKCS#10 или PKCS#7 в кодировке Base64"
Вставьте в поле "Base-64-шифрованный запрос сертификата" содержимое файла
test.reqи нажмите кнопку "Выдать".Сохраните файл по ссылке "Загрузить сертификат". Выгрузку сертификата необходимо проводить в формате Base64.
Установите полученный от УЦ сертификат в указанный ключевой контейнер:
certmgr -inst -store uMy -file certnew.cer -cont test_keys
Также в ОС Windows возможно получение сертификата с помощью тестового центра КриптоПро без самостоятельного создания запроса.
Для этого нажмите "Сформировать ключи и отправить запрос на сертификат" и заполните некоторые данные.
Выданные сертификаты можно посмотреть в окне "Сертификаты" (Пуск\(\longrightarrow\)КРИПТО-ПРО\(\longrightarrow\)Сертификаты).
Рис. Д.5 Просмотр сертификатов
Д.2. Настройка в операционной системе Linux
Д.2.1. Общие настройки
Архив с программным обеспечением можно загрузить с официального сайта КриптоПРО в разделе загрузка:
linux-ia32.tgz, linux-amd64.tgz.Примечание
По умолчанию при скачивании с сайта КриптоПро выдается лицензия на три месяца
Распакуйте архив и перейдите в распакованную папку.
Установите основные пакеты:
rpm -i lsb-cprocsp-base-X.X.X-X.rpm rpm -i lsb-cprocsp-rdr-X.X.X-X.rpm rpm -i lsb-cprocsp-capilite-X.X.X-X.rpm rpm -i lsb-cprocsp-kc1-X.X.X-X.rpm
На ОС, основанных на Debian (Debian/Ubuntu) сначала необходимо поставить (если не установлены) пакеты LSB из состава дистрибутива, а также пакет
alien, который является штатным средством для установки.rpm:apt-get install lsb-base alien lsb-core
Затем при помощи
alienпоставить необходимые пакеты CSP, например:alien -kci ./lsb-cprocsp-base-X.X.X-X.rpm alien -kci ./lsb-cprocsp-rdr-X.X.X-X.rpm alien -kci ./lsb-cprocsp-capilite-X.X.X-X.rpm alien -kci ./lsb-cprocsp-kc1-X.X.X-X.rpm
КриптоПро устанавливается по пути
/opt/cprocsp. Контейнер должен быть доступен для пользователяreddatabase. Для этого скопируйте содержимое папки/var/opt/cprocsp/keys/userв/var/opt/cprocsp/keys/reddatabaseи назначьте права:chown -R reddatabase: /var/opt/cprocsp/keys/reddatabase
По мере удовлетворения зависимостей, возможно, потребуется установить другие пакеты.
В Linux поддерживается провайдер
Crypto-Pro GOST R 34.10-2012 KC1 CSP.Настройте сервер «РЕД База Данных» на работу с криптоплагином. Для этого в конфигурационном файле
firebird.confуказываются следующие параметры:CryptoPlugin– имя криптоплагина (значение по умолчаниюCrypto_API)SymmetricMethod– алгоритм, используемый для симметричного шифрования. Можно указывать название алгоритма или его идентификатор в криптопровайдере (AlgId). Идентификатор алгоритма можно узнать утилитамиmintиhashgenпри запуске без параметров (параметрCryptoPluginв конфигурационном файле должен быть задан) или утилитой КриптоПроcsptestс параметрами-enum -info.Если используется неанглоязычные названия алгоритмов, необходимо перекодировать их в 2-х байтный юникод, напримерГОСТ Р 34.11-2012примет вид%D0%93%D0%9E%D0%A1%D0%A2+%D0%A0+34.11-2012HashMethod– название или идентификатор алгоритма хэширования. Способ представления аналогиченSymmetricMethod.ProviderName– название или идентификатор алгоритма криптопровайдера. Способ представления аналогиченSymmetricMethod.
Д.2.2. Создание контейнера с закрытыми ключами
Предупреждение
Убедитесь, что пользователь операционной системы, от которого выполняется подключение, имеет достаточно прав на файл .registry_lock.
При использовании криптографических функций (например, во время многофакторной аутентификации) СУБД может падать внутри библиотеки КриптоПро версии 4.0 и ниже,
если на файл /var/opt/cprocsp/tmp/.registry_lock установлены неправильные права (владелец root, например).
В таком случае при попытке доступа к этому файлу из библиотеки КриптоПро происходит падение приложения, которое её использует.
Таким приложением может быть клиент (например, ISQL) или процесс сервера.
При этом выводится ошибка "support_mutex_open("registry_lock") failed:: Permission denied".
Ридеры (readers) — устройства размещения контейнеров (аппаратные токены, каталог для размещения файлов). Просмотр доступных ридеров:
$ csptest -enum -info -type PP_ENUMREADERS | iconv -f cp1251
Ридер
HDIMAGEразмещается на/var/opt/cprocsp/keys/<имя пользователя>/.Инициализация ридера
HDIMAGE(под правами root):cpconfig -hardware reader -add HDIMAGE store
Создадим контейнер с именем
testв локальном ридереHDIMAGE. Команды для работы с сертификатом нужно выполнять от имени пользователя ОС, от которого в дальнейшем будет запускаться клиентское приложение:$ csptest -keyset -provtype 81 -newkeyset -cont '\\.\HDIMAGE\test' -keytype exchange
Для аутентификации по сертификату необходимо создать только ключи обмена (
-keytype exchange). Если создать ключи и обмена и подписи, то сертификат будет по умолчанию привязан к ключу подписи и аутентификация с ним работать не будет.При установленном пакете
cprocsp-rdr-gui-gtkбудет показано графическое окно, где предложат двигать курсором мыши. Если такой пакет не установлен, будет предложено ввести любые символы с клавиатуры. После показа окна будет предложено указать пароль на контейнер (можно указать пустой, тогда пароль запрашиваться не будет) и снова предложат двигать курсором мыши.CSP (Type:81) v4.0.9006 KC1 Release Ver:4.0.9708 OS:Linux CPU:AMD64 FastCode:READY:AVX. AcquireContext: OK. HCRYPTPROV: 6679219 GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2012 KC1 CSP Container name: "card" Signature key is not available. Attempting to create a signature key... signature key created. Exchange key is not available. Attempting to create an exchange key... an exchange key created. Keys in container: signature key exchange key Extensions: OID: 1.2.643.2.2.37.3.9 OID: 1.2.643.2.2.37.3.10 Total: SYS: 0,030 sec USR: 0,160 sec UTC: 22,910 sec [ErrorCode: 0x00000000]
Ключи в Linux хранятся в
/var/opt/cprocsp/keys/<имя пользователя>/<имя контейнера>.Просмотр доступных контейнеров:
$ csptest -keyset -enum_cont -fqcn -verifyc
Удаление контейнера:
$ csptest -keyset -deletekeyset -cont '\\.\HDIMAGE\test'
Д.2.3. Создание сертификата
Для получения сертификата в ОС Linux с помощью тестового центра КриптоПро выполните следующие действия:
Сформируйте запрос на получение сертификата с помощью утилиты
cryptcpи ее командыcreatrqst.-creatrqst -dn <RDN> [-provtype <N>] [-provname <CSP>] [-SMIME] [-nokeygen|-exprt] [-keysize <n>] [-hashAlg <OID>] [-ex|-sg|-both] [-ku|-km] [-cont <имя>] [-silent] [-pin <пароль>|-askpin] [-certusage <OIDs>] [-der] [-ext <расширение>] <имя файла>
При генерации запроса для клиентского сертификата необходимо указать заранее созданный клиентский контейнер с ключевой парой. Для этого используется опция
-nokeygen. Контейнер может быть указан без спецификатораHDIMAGE. Например:/opt/cprocsp/bin/ia32/cryptcp -creatrqst -nokeygen -cont '\\.\HDIMAGE\test' -provtype 81 -dn 'CN=tester' test.req
Предупреждение
Контейнер с ключевой парой, который используется для генерации запроса на получение клиентского сертификата, должен принадлежать тому же пользователю, для которого запрашивается сертификат.
Подробнее о командах и входных параметрах этой утилиты см. руководство по приложению командной строки
CryptCPпо адресу: https://www.cryptopro.ru/sites/default/files/products/cryptcp/cryptcp_5.0.x.pdf.Откройте тестовый удостоверяющий центр КриптоПро.
Нажмите "Отправить готовый запрос PKCS#10 или PKCS#7 в кодировке Base64"
Вставьте в поле "Base-64-шифрованный запрос сертификата" содержимое файла
test.reqи нажмите кнопку "Выдать".Сохраните файл по ссылке "Загрузить сертификат". Выгрузку сертификата необходимо проводить в формате Base64.
Примечание
Не все браузеры в ОС Linux могут поддерживать выгрузку сертификатов. Это зависит от настроек сервера центра сертификации.
Устанавливаем, полученный от УЦ сертификат, в указанный ключевой контейнер:
$ certmgr -inst -store uMy -file certnew.cer -cont '\\.\HDIMAGE\test'
Чтобы посмотреть сертификаты, введите команду:
$ certmgr -list
Чтобы удалить сертификат, введите команду:
$ certmgr -delete 1 $ certmgr -delete -all
Д.2.4. Проверка сертификата
При проверке сертификата КриптоПро необходимо проверить сертификат центра сертификации и список отзыва. Можно в режиме онлайн, если с хоста сервера СУБД разрешено подключение к серверу УЦ КриптоПро. Если подключение запрещено или невозможно, для проверки сертификата нужно установить сертификат ЦС и список отзыва, скачав их по ссылке.
Установка должна выполняться в хранилище root от имени пользователя ОС, от которого будет запущен сервер СУБД. Пример команды установки сертификата ЦС:
sudo -u reddatabase /opt/cprocsp/bin/amd64/certmgr -inst -store uRoot -file /tmp/ca.cer
Установка списка отзыва сертификатов:
sudo -u reddatabase /opt/cprocsp/bin/amd64/certmgr -inst -crl -store uRoot -file /tmp/certcrl.crl