Ident-аутентификация
Метод аутентификации ident определяет имя пользователя операционной системы клиента, обращаясь к Ident-сервису на хосте клиента, и сравнивает его с запрошенным именем пользователя базы данных.
При необходимости можно настроить сопоставление имен пользователей операционной системы и пользователей базы данных в файле pg_ident.conf.
Метод ident поддерживается только для подключений по TCP/IP.
Для работы ident на хосте клиента должен быть запущен сервис Ident (например, oidentd), который принимает запросы на порте 113 и возвращает имя пользователя операционной системы, связанного с данным подключением.
Если при настроенном ident попытка подключения выполняется через локальный сокет домена Unix, Greengage DB автоматически использует аутентификацию peer.
В этой статье описано, как настроить аутентификацию ident для локального подключения пользователя gpadmin по TCP/IP, а также как задать сопоставление имен пользователей, чтобы разрешить другим пользователям операционной системы подключаться к базе данных как gpadmin.
Протокол Ident только проверяет личность пользователя или процесса и не определяет, какие действия им разрешены. Он не является методом авторизации или управления доступом.
Этот метод аутентификации применим только в закрытых сетях, где каждый клиентский хост находится под строгим контролем, поэтому хост с запущенным сервисом Ident должен считаться доверенным.
Если клиентский хост ненадежен или скомпрометирован, злоумышленник может запустить на порте 113 произвольное программное обеспечение и передать любое имя пользователя.
Установка oidentd
Для использования метода аутентификации ident на клиентском хосте должен быть запущен Ident-сервис, который сообщает имя пользователя операционной системы для каждого TCP/IP-подключения.
Ниже приведена инструкция по установке и запуску сервиса oidentd на мастер-хосте Greengage DB под управлением Ubuntu:
-
Подключитесь к мастер-хосту и переключитесь на пользователя
gpadmin:$ sudo su - gpadmin -
Установите пакет
oidentd:$ sudo apt install oidentd -
Включите и запустите сервис
oidentd:$ sudo systemctl enable oidentd $ sudo systemctl start oidentd -
Проверьте, что сервис
oidentdзапущен:$ sudo systemctl status oidentdОжидаемый результат:
Active: active (running)
Настройка ident-аутентификации
Редактирование pg_hba.conf
Файл pg_hba.conf управляет методами аутентификации для входящих клиентских подключений на основе типа подключения, базы данных, пользователя и адреса клиента.
В этой процедуре добавляется правило, которое включает аутентификацию ident для пользователя gpadmin при подключении с локального хоста:
-
Откройте pg_hba.conf для редактирования:
$ vi $MASTER_DATA_DIRECTORY/pg_hba.conf -
Добавьте в файл следующую строку:
# connection-type database user address auth-method host all gpadmin 127.0.0.1/32 identЭта запись настраивает Greengage DB на использование метода аутентификации
identдля TCP/IP-подключений с локального хоста для пользователяgpadmin. -
Сохраните и закройте файл.
-
Чтобы применить изменения, перезагрузите конфигурацию с помощью команды
gpstop:$ gpstop -u
Проверка ident-аутентификации
После настройки ident-аутентификации вы можете подключаться к Greengage DB через локальное TCP/IP-подключение без указания пароля, если вы вошли в систему как пользователь операционной системы gpadmin.
Подключитесь к базе данных через локальное TCP/IP-подключение:
$ psql postgres -U gpadmin -h 127.0.0.1 -p 5432
При успешном подключении будет выведен следующий результат:
psql (9.4.26) Type "help" for help. postgres=#
Если попытаться подключиться под другим пользователем операционной системы с помощью этой же команды, будет возвращена следующая ошибка:
psql: FATAL: Ident authentication failed for user "gpadmin"
Настройка сопоставления пользователей
Редактирование pg_hba.conf и pg_ident.conf
При необходимости можно настроить сопоставление имен пользователей для преобразования имен пользователей операционной системы в имена пользователей базы данных с помощью файла pg_ident.conf:
-
Откройте pg_hba.conf для редактирования:
$ vi $MASTER_DATA_DIRECTORY/pg_hba.conf -
Измените запись
ident, добавленную в предыдущем разделе, следующим образом:# connection-type database user address auth-method auth-options host all gpadmin 127.0.0.1/32 ident map=testmapПоле auth-options указывает, что
testmapиспользуется для сопоставления имени пользователя операционной системы с именем пользователя Greengage DB. Само сопоставление определяется в файле pg_ident.conf. -
Откройте pg_ident.conf для редактирования:
$ vi $MASTER_DATA_DIRECTORY/pg_ident.conf -
Добавьте следующую запись:
# MAPNAME SYSTEM-USERNAME PG-USERNAME testmap /^(.*admin)$ gpadminSYSTEM-USERNAMEуказывает шаблон регулярного выражения, который соответствует любому пользователю операционной системы, чье имя заканчивается наadmin. Эти пользователи смогут подключаться к базе данных как пользователь базы данныхgpadmin. -
Сохраните и закройте файл.
-
Перезагрузите конфигурацию с помощью
gpstopдля применения изменений:$ gpstop -u
Проверка ident-аутентификации
После настройки сопоставления пользователей вы можете подключаться к Greengage DB локально по TCP/IP без пароля, если вошли в систему под пользователем операционной системы с именем, оканчивающимся на admin.
Например, можно использовать следующую команду:
$ psql postgres -U gpadmin -h 127.0.0.1 -p 5432
Примеры результатов подключения:
-
Успешное подключение при выполнении от имени системного пользователя
gpadmin. -
Успешное подключение при выполнении от имени системного пользователя
dbadmin. -
Неудачное подключение при выполнении от имени системного пользователя
testuser.