Засекречивание параметров подключения
Для исключения хранения паролей в открытом виде и предотвращения компрометации паролей в СУБД Pangolin подготовлен набор утилит, позволяющих засекречивать и хранить пароли в закодированном виде:
pg_auth_config
— утилита засекречивания/хранения параметров подключения к БД;pg_auth_password
— утилита засекречивания паролей. Позволяет получить пароль в засекреченном виде после ввода исходного пароля.
Обе утилиты располагаются в каталоге $PGHOME/bin
и доступны только владельцу (postgres
).
При работе с расширением oracle_fdw
пароль пользователя oracle
вносится в хранилище паролей, но при проверке хранилища этот пароль не проверяется при вызове команды: pg_auth_config check
.
Внимание!
Ключи, используемые при засекречивании паролей, уникальны для сервера. Они вычисляемые и нигде не хранятся.
Как следствие, пароли в засекреченном виде и файл хранилища:
- применимы только в рамках сервера, где выполнялось кодирование;
- уникальные/свои для каждого узла кластера.
В случае изменения конфигурации сервера могут потребоваться действия по пересозданию засекреченного хранилища/перекодированию паролей в конфигурационных файлах.
При использовании ванильного libpq
работа с шифрованным хранилищем недоступна, так как мы не гарантируем работоспособность сторонних реш ений.
Утилита засекречивания и хранения параметров подключения к БД (pg_auth_config)
Утилиты, выполняющие автоматизированное подключение к БД, выполняют получение параметров подключения из защищенного хранилища для дальнейшего подключения к БД.
Утилита pg_auth_config
формирует засекреченное хранилище, которое хранится в файле /etc/postgres/enc_utils_auth_settings.cfg
. Ключи, используемые при кодировании, уникальны в рамках узла. Они не хранятся, а вычисляются в процессе. Также возможно добавление нескольких записей одной командой через разделитель «,».
Примечание:
В качестве ключа засекречивания используется фраза, конструируемая из параметров:
- парольная фраза - CPU manufacturer ID CPU, CPU stepping, CPU model, CPU family, CPU feature flags, список MAC и IP-адресов постоянных сетевых интерфейсов;
- соль - тип credentials, machineId из /etc/machine-id, UUID корневой файловой системы, домен для использования credentials (сейчас
POSTGRESQL
- для засекречивания конфигурационных файлов компонент отказоустойчивого кластера илиKMS
- для засекречивания параметров доступа к KMS).
Алгоритм определяется сконфигурированным плагином засекречивания (по умолчанию AES-256). Хранилище может быть рассекречено только на узле, где было создано. Оно автоматически формируется на этапе установки дистрибутива СУБД Pangolin.
Запуск утилиты pg_auth_config
отображает параметры использования:
pg_auth_config - view and edit encrypted postgres credentials
Usage:
./pg_auth_config show | add | remove | check | reset | edit [options...]
Options:
--host [-h] host (add only: hosts delimeted by ",") for which password will be used
--json [-j] show in json format
--port [-p] port (add only: ports delimeted by ",") for which password will be used
--user [-U] user name for which password will be used
--database-all [-D] pecify all database mark (must be before --database if both)
--database [-d] database (add only: databases delimeted by ",") for which password will be used
--all [-a] check only: database (databases delimited by ",") for the 'all' lines during check, use "-" to ignore
--skip-confirm [-s] manual input without confirmation
--help show this help, then exit
Pangolin product version information:
--product_version prints product name and version
--product_build_info prints product build number, date and hash
--product_component_hash prints component hash string
The './pg_auth_config' utility is used to securely save password information
for internal Pangolin utilities
Using corresponding host, port, database tuples if multiple provided
the concept is simular to .pgpass, except this utility encrypts password information
Report bugs to <pangolin@sbertech.ru>.
Параметры host
и port
необходимы для того, чтобы пароль нельзя было использовать для подключения к произвольным БД, в том числе к модифицированным версиям postgres, показывающим, с каким паролем пыталось произойти подключение. Запись в хранилище можно перезаписать только целиком. Например, нельзя поменять отдельно только host
. Для добавления множества записей одной командой количество host
, port
, database
, написанных через разделитель ,
должно совпадать:
-
add
— команда добавляет в хранилище пароль пользователяname
. По умолчанию утилита дважды просит ввести пароль. Передача пароля через командную строку отсутствует.Внимание!
В момент добавления пароля в хранилище его корректность не проверяется (т.е. не проводится сверка с паролем, хранящимся в БД).
Пример использования:
./pg_auth_config add -h 127.0.0.1 -p 5432 -d postgres -U test
enter password:
****
confirm password:
****Опция
--skip-confirm
позволяет не запрашивать второго ввода пароля. Данную опцию рекомендуется использовать в автоматизированных системах, когда ввод пароля автоматизирован../pg_auth_config add -h 127.0.0.1 -p 5432 -d postgres -U test --skip-confirm
enter password:
****
confirm password:
****Через разделитель
,
можно добавить несколько записей одной командой:./pg_auth_config add -h <IP-адрес>,<IP-адрес> -p 5432,1234 -U postgres -d database,dabatase
-
show
— команда выводит в консоль содержимое хранилища (за исключением паролей).Пример использования:
$ pg_auth_config show
| host | port | database | username |
|----------------------------------------------------------|
| localhost | 5433 | postgres | patroni |
| localhost | 5433 |replication | patroni |
| <hostname> | 5433 | postgres | patroni |
| <hostname> | 5433 |replication | patroni |
| <hostname> | 5433 | database | user |
| <hostname> | 5433 | database | user1 |