20.6. Аутентификация GSSAPI#
20.6. Аутентификация GSSAPI
GSSAPI - это протокол, стандартизированный в отрасли, для безопасной аутентификации, определенный в RFC 2743. Tantor SE поддерживает GSSAPI для аутентификации, шифрования обмена данными или и того, и другого. GSSAPI обеспечивает автоматическую аутентификацию (однократный вход) для систем, которые ее поддерживают. Сама аутентификация является безопасной. Если используется шифрование GSSAPI или шифрование SSL, данные, отправляемые по соединению с базой данных, будут зашифрованы; в противном случае - нет.
Когда GSSAPI использует Kerberos, он использует стандартное имя службы (идентификационная личность) в формате
. Имя принципала, используемое в конкретной установке, не кодируется в сервере Tantor SE никаким образом; оно указывается в файле keytab, который сервер читает для определения своей идентичности. Если в файле keytab перечислено несколько принципалов, сервер примет любой из них. Имя области сервера - это предпочтительная область, указанная в файле(ах) конфигурации Kerberos, доступных серверу.
servicename
/hostname
@realm
При подключении клиент должен знать имя принципала сервера, к которому он намеревается подключиться. Часть 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
, если установлен, также сопоставляется без учета регистра.