mod_auth_gssapi#

Описание#

mod_auth_gssapi предназначен для реализации аутентификации пользователей с использованием протокола GSSAPI (Generic Security Services Application Program Interface). Позволяет интегрировать веб-сервер с системами аутентификации, основанными на Kerberos, что делает его полезным в средах, где требуется безопасная аутентификация пользователей.

Примечание

  • Модуль требует наличия Kerberos для аутентификации. При необходимости установите его пакеты с помощью dnf install krb5-workstation krb5-libs. Подробнее о том, как настроить Kerberos для работы Apache HTTP Server - в разделе «Начало работы» → «Использование Kerberos».

  • Для аутентификации через HTTPS потребуется модуль mod_ssl, обеспечивающий поддержку SSL/TLS.

  • Для управления правами доступа с использованием директивы Require - модуль mod_authz_core.

  • Для работы с сессиями в процессе аутентификации - модуль mod_session.

  • Для работы с Kerberos могут потребоваться утилиты:

    • kinit - используется для получения тикетов Kerberos;

    • klist - позволяет проверить текущие тикеты Kerberos;

    • kdestroy - удаляет текущие тикеты Kerberos.

    Для получения подробной информации об указанных утилитах используйте соответствующие страницы справочника man - man kinit, man klist и man kdestroy.

Пример конфигурации#

Пример конфигурации, настроенной с помощью модуля mod_auth_gssapi - управление виртуальным хостом с использованием Kerberos:

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot "/var/www/html"

    # Включение аутентификации через GSSAPI
    <Location "/protected">
        AuthType GSSAPI
        AuthName "Kerberos Authentication"

        # Указание keytab-файла для сервера
        GssapiCredStore keytab:/etc/httpd/conf/krb5.keytab

        # Разрешение доступа только аутентифицированным пользователям
        Require valid-user

        # Преобразование имени пользователя в локальный формат
        GssapiLocalName On

        # Отключение Basic Auth (если не требуется)
        GssapiBasicAuth Off

        # Логирование ошибок для отладки
        LogLevel debug
    </Location>
</VirtualHost>

Директивы#

Список директив модуля представлен в таблице ниже.

Директивы mod_auth_gssapi#

Синтаксис

Значение по умолчанию

Контекст

Описание

GssapiSSLonly On|Off

GssapiSSLonly Off

server config, virtual host, directory

Определяет, будет ли аутентификация через GSSAPI (Kerberos) разрешена только при использовании SSL/TLS-соединения. Рекомендуемое значение для повышения безопасности - On

GssapiLocalName On|Off

GssapiLocalName Off

server config, virtual host, directory

Пытается сопоставить клиентский принципал с локальным именем, используя вызов gss_localname(). Это требует настройки в файле /etc/krb5.conf, чтобы обеспечить правильное сопоставление для принципалов, не находящихся в области по умолчанию (например, пользователя из доверенной области). Когда значение установлено в On, модуль mod_auth_gssapi устанавливает переменную REMOTE_USER на разрешенное имя пользователя, GSS_NAME - на полное имя клиентского принципала

GssapiConnectionBound On|Off

GssapiConnectionBound Off

server config, virtual host, directory

Определяет, будет ли аутентификация GSSAPI привязана к конкретному соединению для сохранения состояния между раундами аутентификации. Рекомендуется оставить ее отключенной, так как она создает дополнительную нагрузку на сервер

GssapiSignalPersistentAuth On|Off

GssapiSignalPersistentAuth Off

server config, virtual host, directory

Отправляет заголовок Persistent-Auth для клиентов, использующих его, в соответствии с настройкой GssapiConnectionBound

GssapiUseSessions On|Off

GssapiUseSessions Off

server config, virtual host, directory

Управляет использованием сессий на основе куки для поддержания аутентификации в модуле mod_auth_gssapi , что помогает избежать постоянных и затратных попыток повторной аутентификации для каждого запроса. Требуется настройка модуля mod_sessions

GssapiSessionKey key:<key>|file:<path_to_file>

Нет

server config, virtual host, directory

Используется для настройки постоянного ключа, который применяется для шифрования и создания MAC-данных (Message Authentication Code) сессии при использовании GSSAPI-сессий. Это помогает избежать проблем с нечитаемыми данными сессии после перезапуска сервера или при работе в кластере серверов. Предоставляются две схемы для чтения постоянных ключей: key и file. key — ключ считывается из директивы конфигурации, должен быть закодирован в base64 и иметь длину 32 байта. file — для хранения ключа используется файл. Если файл не существует, он будет создан со случайно сгенерированным ключом при первом выполнении

GssapiCredStore <param>

Нет

server config, virtual host, directory

Позволяет указать несколько параметров, связанных с расположением учетных данных, таких как keytab, client_keytab, ccache и т.д.

GssapiDelegCcacheDir <directory>

Нет

server config, virtual host, directory

Экспортирует учетные данные в частный каталог, доступный процессу веб-сервера, если это требуется. Делегированные учетные данные (credentials) будут храниться в файле, названном по имени клиентского принципала, а переменная окружения запроса (по умолчанию KRB5CCNAME) будет установлена для указания на этот файл

GssapiDelegCcacheUnique On|Off

GssapiDelegCcacheUnique Off

server config, virtual host, directory

Включает использование уникальных имен для файлов ccache (credentials cache) при делегировании. Файлы ccache будут размещены в GssapiDelegCcacheDir и названы с использованием имени принципала и шестизначного уникального суффикса. Потребляющее приложение должно удалять ccache, иначе это приведет к захламлению файловой системы при использовании сессий

GssapiDelegCcacheEnvVar <var_name>

KRB5CCNAME

server config, virtual host, directory

Устанавливает имя переменной окружения запроса, которая будет получать имя кеша учетных данных

GssapiUseS4U2Proxy On|Off

GssapiUseS4U2Proxy Off

server config, virtual host, directory

Включает использование расширения Kerberos s4u2Proxy (ограниченная делегация). Это позволяет приложению, работающему в веб-сервере, действовать от имени пользователя на других серверах, используя предоставленный тикет (при условии авторизации KDC). Требует установки GssapiDelegCcacheDir. Не имеет эффекта при использовании Basic-Auth, так как учетные данные пользователя все равно делегируются, когда установлено GssapiDelegCcacheDir. Клиентский keytab необходим для того, чтобы GSSAPI мог инициировать аутентификацию через keytab самостоятельно. Если он отсутствует, необходимо использовать внешний механизм для выполнения kinit с keytab и хранения кеша учетных данных в настроенном файле кеша

GssapiBasicAuth On|Off

GssapiBasicAuth Off

server config, virtual host, directory

Позволяет использовать Basic Auth в сочетании с Negotiate. Если браузер не использует Negotiate, он будет автоматически переключаться на Basic, и имя пользователя и пароль будут использованы для попытки получения учетных данных в модуле через GSSAPI. Если учетные данные успешно получены, они проверяются на соответствие ключу сервера

GssapiAllowedMech krb5|iakerb|ntlmssp

Нет

server config, virtual host, directory

Задает разрешенный механизм (-ы) аутентификации, который может использоваться, когда доступны учетные данные для нескольких механизмов. По умолчанию разрешены все механизмы, доступные локально

GssapiBasicAuthMech krb5|iakerb|ntlmssp

Нет

server config, virtual host, directory

Задает механизм (-ы) для базовой аутентификации. Это полезно для ограничения механизмов, которые могут использоваться для попытки аутентификации по паролю. По умолчанию разрешены все доступные локально механизмы, если не установлен GssapiAllowedMech, в этом случае используются только указанные механизмы. GssapiBasicAuthMech всегда имеет приоритет над GssapiAllowedMech

GssapiNameAttributes <env_var_name> <attribute_name>

Нет

server config, virtual host, directory

Используется для извлечения атрибутов клиентского имени (например, данных авторизации) из установленного контекста GSSAPI и их экспорта в виде переменных окружения. Это позволяет передавать дополнительные данные о клиенте (например, имя пользователя, группу или другие атрибуты) в приложения или скрипты, работающие на сервере. Переменные не сохраняются в данных сессии, хранящихся в куки, поэтому они доступны только при первом аутентифицированном запросе, когда используется GssapiUseSessions

GssapiRequiredNameAttributes <attribute_name=value>

Нет

server config, virtual host, directory

Позволяет указать один или несколько атрибутов имени, которые клиент должен иметь для авторизации доступа к ресурсу. Если атрибуты имени, связанные с клиентом, не удовлетворяют заданному выражению или отсутствуют, возвращается ответ 403

GssapiNegotiateOnce On|Off

GssapiNegotiateOnce Off

server config, virtual host, directory

Управляет поведением сервера при попытке аутентификации через механизм Negotiate Kerberos. Она позволяет избежать повторных запросов аутентификации, если первая попытка не удалась. Обычно, когда клиент не может использовать аутентификацию Negotiate, возвращается HTTP 401 с заголовком WWW-Authenticate: Negotiate, что подразумевает, что клиент может повторить попытку с другими учетными данными или механизмом. Включите GssapiNegotiateOnce, чтобы избежать этой ситуации, а также когда разрешен только один механизм единого входа или включена GssapiBasicAuth

GssapiImpersonate On|Off

GssapiImpersonate Off

server config, virtual host, directory

Позволяет использовать механизм S4U2Self (Service for User to Self) для получения сервисного тикета от имени пользователя, который уже был аутентифицирован другим модулем. Это полезно в сценариях, где требуется имитация действий пользователя или делегирование его прав без повторной аутентификации через GSSAPI. Убедитесь, что принципал сервера имеет право получать переносимые тикеты от произвольных пользователей (опция +ok_to_auth_as_delegate)

GssapiDelegCcachePerms mode:<mode> [uid:<uid>] [gid:<gid>]

Нет

server config, virtual host, directory

Используется для управления правами доступа и владельцами файлов ccache (credentials cache), которые создаются при делегировании учетных данных через механизм GSSAPI. Позволяет обеспечивать безопасность и контроль доступа к файлам, содержащим чувствительные данные аутентификации. Может принимать настройки:
mode - позволяет установить режим файла, формат - числовой режим с теми же семантиками, как у chmod для сопоставления чисел с разрешениями.
uid - номер или имя идентификатора пользователя; будет предпринята попытка изменить владельца файла на указанный uid. Если указано имя пользователя, оно будет разрешено во время запуска, и идентификатор пользователя будет храниться для всех последующих операций.
gid - номер или имя идентификатора группы; будет предпринята попытка изменить владельца группы файла на указанный gid. Если указано имя группы, оно будет разрешено во время запуска, и идентификатор группы будет храниться для всех последующих операций. Если настройка отсутствует, соответствующее свойство файла не будет изменено, и будут сохранены владельцы и/или режим по умолчанию

GssapiPublishErrors On|Off

GssapiPublishErrors Off

server config, virtual host, directory

Публикует ошибки в виде переменных окружения, которые могут использоваться процессами веб-сервера. Общий тип ошибки задается в переменной MAG_ERROR и может иметь значения: GSS ERROR, INTERNAL ERROR, AUTH NOT ALLOWED. Дополнительно в переменной MAG_ERROR_TEXT может содержаться произвольное сообщение об ошибке. При типе ошибки GSS ERROR переменные GSS_ERROR_MAJ и GSS_ERROR_MIN содержат числовые ошибки, возвращенные GSSAPI, а MAG_ERROR_TEXT будет содержать сообщение об ошибке GSS

GssapiAcceptorName <name>

Нет

server config, virtual host, directory

Ограничивает веб-сервер только определенным именем (principal) при работе с механизмом GSSAPI (Kerberos). Это полезно в случаях, когда в keytab-файле содержится несколько ключей (учетных данных), и необходимо явно указать, какое имя должно использоваться для аутентификации. Специальное значение {HOSTNAME} заставит использовать имя из HTTP-запроса для выбора правильного имени. По умолчанию будет разрешено любое имя в keytab или механизме специфических учетных данных. Глобальные параметры GSSAPI, установленные в krb5.conf, такие как ignore_acceptor_hostname, могут повлиять на возможность ограничения имен. Для имен используется формат GSS_C_NT_HOSTBASED_SERVICE

GssapiBasicTicketTimeout <seconds>

GssapiBasicTicketTimeout 300

server config, virtual host, directory

Управляет временем действия тикета, запрашиваемого для TGT-пользователя методом Basic Auth. Обычно базовая аутентификация повторяется при каждом запросе, поэтому используется короткий срок действия, чтобы уменьшить объем тикета, так как он будет быстро заменен. Однако в случаях, когда страница аутентификации отдельна, и сессия используется другими страницами, срок действия может быть изменен на произвольный. Срок действия билета ограничен конфигурацией KDC

GssapiPublishMech On|Off

GssapiPublishMech Off

server config, virtual host, directory

Публикует механизм, используемый для аутентификации, в виде переменной окружения GSS_MECH. Она вернет строку формата Authtype/Mechname. Authtype представляет тип аутентификации, выполненной модулем. Возможные значения: Basic, Negotiate, NTLM, Impersonate. Mechname - имя механизма, сообщаемое GSSAPI, или OID механизма, если имя недоступно. В случае ошибок также может быть возвращена строка Unavailable для Authtype или Mechname

Встроенная переменная#

gssapi-no-negotiate - используется для подавления установки заголовков Negotiate в HTTP-запросах, чтобы избежать проблем с аутентификацией в некоторых случаях. Заголовки Negotiate используются в процессе аутентификации, особенно в контексте GSSAPI и Kerberos.