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

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

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

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

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

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

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

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

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

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

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

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

include_realm

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

map

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

krb_realm

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

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