Привет, Я DocuDroid!
Оценка ИИ поиска
Спасибо за оценку нашего ИИ поиска!
Мы будем признательны, если вы поделитесь своими впечатлениями, чтобы мы могли улучшить наш ИИ поиск для вас и других читателей.
GitHub

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:

  1. Подключитесь к мастер-хосту и переключитесь на пользователя gpadmin:

    $ sudo su - gpadmin
  2. Установите пакет oidentd:

    $ sudo apt install oidentd
  3. Включите и запустите сервис oidentd:

    $ sudo systemctl enable oidentd
    $ sudo systemctl start oidentd
  4. Проверьте, что сервис oidentd запущен:

    $ sudo systemctl status oidentd

    Ожидаемый результат:

    Active: active (running)

Настройка ident-аутентификации

Редактирование pg_hba.conf

Файл pg_hba.conf управляет методами аутентификации для входящих клиентских подключений на основе типа подключения, базы данных, пользователя и адреса клиента. В этой процедуре добавляется правило, которое включает аутентификацию ident для пользователя gpadmin при подключении с локального хоста:

  1. Откройте pg_hba.conf для редактирования:

    $ vi $MASTER_DATA_DIRECTORY/pg_hba.conf
  2. Добавьте в файл следующую строку:

    # connection-type  database  user     address       auth-method
    host               all       gpadmin  127.0.0.1/32  ident

    Эта запись настраивает Greengage DB на использование метода аутентификации ident для TCP/IP-подключений с локального хоста для пользователя gpadmin.

  3. Сохраните и закройте файл.

  4. Чтобы применить изменения, перезагрузите конфигурацию с помощью команды 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:

  1. Откройте pg_hba.conf для редактирования:

    $ vi $MASTER_DATA_DIRECTORY/pg_hba.conf
  2. Измените запись 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.

  3. Откройте pg_ident.conf для редактирования:

    $ vi $MASTER_DATA_DIRECTORY/pg_ident.conf
  4. Добавьте следующую запись:

    # MAPNAME  SYSTEM-USERNAME    PG-USERNAME
    testmap    /^(.*admin)$       gpadmin

    SYSTEM-USERNAME указывает шаблон регулярного выражения, который соответствует любому пользователю операционной системы, чье имя заканчивается на admin. Эти пользователи смогут подключаться к базе данных как пользователь базы данных gpadmin.

  5. Сохраните и закройте файл.

  6. Перезагрузите конфигурацию с помощью gpstop для применения изменений:

    $ gpstop -u

Проверка ident-аутентификации

После настройки сопоставления пользователей вы можете подключаться к Greengage DB локально по TCP/IP без пароля, если вошли в систему под пользователем операционной системы с именем, оканчивающимся на admin. Например, можно использовать следующую команду:

$ psql postgres -U gpadmin -h 127.0.0.1 -p 5432

Примеры результатов подключения:

  • Успешное подключение при выполнении от имени системного пользователя gpadmin.

  • Успешное подключение при выполнении от имени системного пользователя dbadmin.

  • Неудачное подключение при выполнении от имени системного пользователя testuser.