19.6. Аутентификация GSSAPI#

19.6. Аутентификация GSSAPI

19.6. Аутентификация GSSAPI #

GSSAPI является промышленным стандартом протокола для безопасной аутентификации, определенным в RFC 2743. Tantor BE поддерживает GSSAPI для аутентификации, шифрования коммуникаций или обоих. GSSAPI обеспечивает автоматическую аутентификацию (единую регистрацию) для систем, которые это поддерживают. Сама аутентификация является безопасной. Если используется шифрование GSSAPI или шифрование SSL, данные, передаваемые по соединению с базой данных, будут зашифрованы; в противном случае они не будут зашифрованы.

Когда GSSAPI использует Kerberos, он использует стандартное имя службы (идентификационная личность) в формате servicename/hostname@realm. Имя принципала, используемое в конкретной установке, не кодируется в сервере Tantor BE никаким образом; оно указывается в файле keytab, который сервер читает для определения своей идентичности. Если в файле keytab перечислено несколько принципалов, сервер примет любой из них. Имя области сервера - это предпочтительная область, указанная в файле(ах) конфигурации Kerberos, доступных серверу.

При подключении клиент должен знать имя принципала сервера, к которому он намеревается подключиться. Часть servicename принципала обычно равна postgres, но можно выбрать другое значение с помощью параметра подключения krbsrvname в libpq. Часть hostname - это полностью определенное имя хоста, к которому libpq должен подключиться. Имя области - это предпочтительное имя области, указанное в файле(ах) конфигурации Kerberos, доступном(ых) клиенту.

Клиент также должен иметь основное имя для своей собственной идентификации (и у него должен быть действительный билет для этого имени). Для аутентификации можно использовать GSSAPI, клиентское основное имя должно быть связано с именем пользователя базы данных Tantor BE. Файл конфигурации pg_ident.conf может использоваться для отображения основных имен на имена пользователей; например, pgusername@realm может быть отображено только на pgusername. В качестве имени роли в Tantor BE можно также использовать полное основное имя username@realm без какого-либо отображения.

Tantor BE также поддерживает отображение клиентских принципалов на имена пользователей путем удаления области из принципала. Этот метод поддерживается для обратной совместимости и настоятельно не рекомендуется, так как невозможно различить разных пользователей с одинаковым именем пользователя, но из разных областей. Чтобы включить это, установите include_realm в 0. Для простых установок с одной областью, совместное использование этого параметра с установкой параметра krb_realm (который проверяет, что область принципала точно соответствует тому, что указано в параметре krb_realm) все еще безопасно; но это менее гибкий подход по сравнению с явным указанием отображения в pg_ident.conf.

Местоположение файла ключа сервера указывается параметром конфигурации krb_server_keyfile. По соображениям безопасности рекомендуется использовать отдельный ключевой файл только для сервера Tantor BE, а не разрешать серверу читать системный ключевой файл. Убедитесь, что ваш файл ключа сервера доступен для чтения (и желательно только для чтения, а не для записи) учетной записи сервера Tantor BE. (См. также Раздел 17.1).

Файл keytab создается с использованием программного обеспечения Kerberos; см. документацию Kerberos для получения подробной информации. В следующем примере показано, как это сделать с помощью инструмента kadmin MIT Kerberos:

kadmin% addprinc -randkey postgres/server.my.domain.org
kadmin% ktadd -k krb5.keytab postgres/server.my.domain.org

Поддерживаются следующие параметры аутентификации для метода аутентификации GSSAPI:

include_realm

Если установлено значение 0, то имя области из аутентифицированного пользователя принципала удаляется перед передачей через отображение имени пользователя (Раздел 19.2). Это не рекомендуется и в основном доступно для обратной совместимости, так как оно не безопасно в средах с несколькими областями, если не используется krb_realm. Рекомендуется оставить настройку include_realm по умолчанию (1) и предоставить явное отображение в pg_ident.conf для преобразования имен принципалов в имена пользователей Tantor BE.

map

Позволяет сопоставлять имена клиентских принципалов с именами пользователей базы данных. См. Раздел 19.2 для получения подробной информации. Для принципала GSSAPI/Kerberos, такого как username@EXAMPLE.COM (или, реже, username/hostbased@EXAMPLE.COM), используется имя пользователя для сопоставления username@EXAMPLE.COM (или username/hostbased@EXAMPLE.COM, соответственно), если параметр include_realm не установлен в 0, в этом случае системное имя пользователя при сопоставлении будет username (или username/hostbased).

krb_realm

Устанавливает область для сопоставления имен пользователей с принципалами. Если этот параметр установлен, будут приниматься только пользователи этой области. Если он не установлен, могут подключаться пользователи любой области, с учетом сопоставления имен пользователей.

В дополнение к этим настройкам, которые могут отличаться для разных записей pg_hba.conf, существует параметр конфигурации krb_caseins_users, действующий на уровне всего сервера. Если он установлен в значение true, принципалы клиента сопоставляются с записями в карте пользователей без учета регистра. krb_realm, если установлен, также сопоставляется без учета регистра.