Данная статья применима к:
- Astra Linux
Где хранятся настройки аутентификации
Настройки аутентификации хранятся в файле /etc/postgresql/<номер_версии>/<имя_кластера>/pg_hba.conf.
Где:
- <номер_версии> - 9.6, 11, 14;
- <имя_кластера> - по умолчанию main.
Настройка "по умолчанию" после установки postgresql
После установки настройки выглядят так:
local all postgres peer local all all peer host all all 0.0.0.0/0 md5
Беспарольная аутентификация локальных подключений с помощью собственной БД пользователей
local all all peer
Примеры:
Команда:
createdb <имя_БД>Пояснение: по умолчанию подключение выполняется к локальной машине (localhost). При выполнении команды автоматически определено имя пользователя (текущий пользователя), и такое имя не найдено в собственной БД пользователей (далее - БДП). Отказ в выполнении. Для устранения отказа следует зарегистрировать пользователя в БДП;
createdb: не удалось подключиться к базе template1: ВАЖНО: роль <имя_пользователя> не существуетРегистрация текущего пользователя (роли) в БДП:
sudo -u postgres psql -c "CREATE ROLE $USER LOGIN;"Пояснение: приведенная команда создает роль с именем, совпадающим с именем текущего пользователя (здесь и далее используется подстановка переменной окружения $USER, содержащей имя текущего пользователя). Имя роли, регистрируемое в БДП не обязательно должно совпадать с именем существующего пользователя ОС, но при работе с включенным МРД такие роли не смогут получить авторизацию, см. следующий пункт. Далее предполагается, что для текущего пользователя заведена роль с совпадающим именем;Команда:
createdb <имя_БД>Пояснение: аутентификация пользователя выполнена. Возникшая ошибка - не ошибка аутентификации, а ошибка авторизации (назначения мандатных прав доступа) при включенной поддержке МРД в СУБД и ОС. Для устранения ошибки:
createdb: не удалось подключиться к базе template1: ВАЖНО: error obtaining MAC configuration for user "<имя_пользователя>"
- либо выключить МРД (см. документацию в части применения параметра ac_ignore_maclabel в файле /etc/postgresql/<номер_версии>/<имя_кластера>/postgresql.conf, а также см. описания уровней защиты ОС для Astra Linux x.7):
- либо явно назначить классификационную метку пользователю (даже если это нулевая метка) и предоставить служебному пользователю postgres право на чтение файла, содержащего метку. Например, для текущего пользователя:sudo pdpl-user -l 0:0 $USERДанная ошибка авторизации не возникает при отключенном МРД или если у пользователя уже есть явно заданная классификационная метка. Далее предполагается, что ошибка не возникает.
sudo setfacl -m u:postgres:r /etc/parsec/macdb/`id -u`При включенном МРД для прохождения мандатной авторизации имя роли должно совпадать с имен пользователя ОС.Команда:
createdb <имя_БД>Пояснение: аутентификация и авторизация пользователя выполнена. Возникающая ошибка - не ошибка аутентификации, и не ошибка авторизации, а результат получения при авторизации недостаточных прав, как и указано в описании ошибки. Настройка прав пользователя выходит за рамки вопросов аутентификации и в данной статье не рассматривается.
createdb: создать базу данных не удалось: ОШИБКА: нет прав на создание базы данных
Парольная аутентификация внешних подключений в БДП
host all all 0.0.0.0/0 md5
Пример:
Команда:
createdb -h <IP-адрес> <имя_БД>Пояснение: по умолчанию подключение выполняется к локальной машине (localhost), но в этом примере явно задана опция -h, указывающая адрес, к которому нужно подключаться. При выполнении команды автоматически определено имя пользователя (текущий пользователь), подключение определено как внешнее, и, в соответствии с правилом для внешних подключений, запрошен пароль, который должен быть задан в БДП. Так как пароль в БДП отсутствует - аутентификация невозможна.
Пароль:Задание пароля в БДП:
sudo -u postgres psql -c "ALTER USER $USER WITH PASSWORD '<пароль>';"Команда:
createdb -h <IP-адрес> <имя_БД>Пояснение: после ввода пароля, заданного в БДП, аутентификация и авторизация пройдены успешно, но права на создание БД отсутствуют.
Пароль:
createdb: создать базу данных не удалось: ОШИБКА: нет прав на создание базы данных
Аутентификация внешних подключений с использованием PAM
host all all 0.0.0.0/0 pam
В качестве пароля использовать пароль пользователя в ОС:
createdb -h <IP-адрес> <имя_БД>Эта ошибка может возникать при неправильно введенном пароле или при ошибках в PAM-стеке, но в рассматриваемом примере причиной ошибки является невозможность проверки введенного пароля из-за отсутствия доступа к файлу /etc/shadow (при этом пароль трактуется как неверный). Для устранения ошибки предоставить служебному пользователю postgresql право чтения файла /etc/shadow:
Пароль:
Пароль:
Пароль:
createdb: не удалось подключиться к базе template1: ВАЖНО: пользователь "<имя_пользователя>" не прошёл проверку подлинности (PAM)
ВАЖНО: пользователь "<имя_пользователя>" не прошёл проверку подлинности (PAM)sudo setfacl -m u:postgres:r /etc/shadowПосле предоставления служебному пользователю postgresql права чтения файла /etc/shadow аутентификация по паролю ОС (паролю из /etc/shadow) и дальнейшая авторизация выполняются успешно:
createdb -h <IP-адрес> <имя_БД>После ввода пароля, заданного в ОС (в /etc/shadow) аутентификация и авторизация пройдены успешно, но права на создание БД отсутствуют.
Пароль:
createdb: создать базу данных не удалось: ОШИБКА: нет прав на создание базы данных