mod_lookup_identity#

Описание#

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

Модуль часто используется в корпоративных средах для интеграции с системами управления идентификационными данными - удостоверениями (Identity Management, IdM), такими как FreeIPA или Active Directory.

Примечание

Для корректной работы mod_lookup_identity могут понадобиться:

  • SSSD (System Security Services Daemon) версии 1.13 или выше - для взаимодействия с системами управления удостоверениями, такими как FreeIPA или Active Directory (для получения подробной информации о sssd изучите соответствующую страницу справочника man, выполнив man sssd). Убедитесь в наличии установленного пакетв sssd-dbus и включите службу ifp в разделе [sssd] файла /etc/sssd/sssd.conf.

  • PAM (Pluggable Authentication Modules) - для аутентификации пользователей перед вызовом mod_lookup_identity (подробнее - в разделе «Файлы каталога /etc/pam.d/*» и с помощью man pam).

  • LDAP-библиотеки - если данные о пользователях хранятся в LDAP, необходим пакет openldap-clients.

  • Дополнительные модули:

    • mod_auth_kerb - для аутентификации через Kerberos;

    • mod_authnz_pam - для аутентификации через PAM;

    • mod_ssl - для обеспечения безопасного соединения (HTTPS) при передаче данных через защищенные каналы.

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

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

<VirtualHost *:443>
    ServerName example.com

    # Включение SSL
    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/example.com.crt
    SSLCertificateKeyFile /etc/pki/tls/private/example.com.key

    # Аутентификация через Kerberos
    <Location /protected>
        AuthType Kerberos
        AuthName "Kerberos Login"
        KrbMethodNegotiate On
        KrbMethodK5Passwd On
        KrbAuthRealms example.com
        Krb5KeyTab /etc/httpd/conf/krb5.keytab
        Require valid-user

        # Использование mod_lookup_identity для получения дополнительных данных
        LookupUserAttr mail <remote_user_mail>
        LookupUserAttr givenname <remote_user_firstname>
        LookupUserAttr sn <remote_user_lastname>
        LookupUserGroups <remote_user_groups>
    </Location>
</VirtualHost>

Директивы#

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

Директивы mod_lookup_identity#

Синтаксис

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

Контекст

Описание

LookupUserByCertificate On|Off

LookupUserByCertificate Off

server config

Включает поиск пользователя по сертификату. Использует оригинальное значение r->user в качестве входных данных. Если пользователь не найден по сертификату, значение r->user очищается. Необходимо, чтобы FakeBasicAuth не был включен в SSLOptions

LookupOutput None|Notes|Env|Headers|Headers-Base64

LookupOutput Notes, Env

server config

Указывает, будут ли выполнены запросы и где будут храниться результаты поиска. Возможные значения: None (отключить поиск), Notes (установить только в таблице заметок веб-сервера), Env (установить только в переменных окружения), Headers (установить HTTP-заголовки для использования в прокси-настройках), Headers-Base64 (установить HTTP-заголовки с закодированными в Base64 значениями для использования в прокси-настройках)

LookupUserGECOS <name>

Нет

server config

Указывает имя заметки и/или переменной окружения для значения GECOS. Если имя начинается с символа +, оно устанавливается только в том случае, если заметка/переменная окружения еще не установлена; в противном случае значение будет перезаписано. Установка данной директивы требует, чтобы идентификатор пользователя был POSIX-идентификатором и мог быть получен с помощью getpwnam

LookupUserGroups <name> [separator]

Нет

server config

Указывает имя заметки и/или переменной окружения для списка групп, полученных с помощью вызова org.freedesktop.sssd.infopipe.GetUserGroups, и (опционально) разделитель для нескольких групп. Если разделитель указан, он используется для объединения нескольких групп в одно строковое значение заметки/переменной окружения. Если разделитель не указан, устанавливается только одна группа

LookupUserGroupsIter <name>

Нет

server config

Указывает имя заметки и/или переменной окружения, в которую будет сохранено количество групп, в которых состоит пользователь (возвращается вызовом org.freedesktop.sssd.infopipe.GetUserGroups). Значения будут храниться в переменных <name>_N, <name>_1, <name>_2, и так далее. Это позволяет безопасно извлекать группы без конфликта разделителей с их значениями

LookupUserAttr <attribute> <name> [separator]

Нет

server config

Указывает имя атрибута, который будет извлечен с помощью вызова org.freedesktop.sssd.infopipe.GetUserAttr, и имя заметки и/или переменной окружения, в которую будет сохранено значение, а также (опционально) разделитель для многозначных результатов. Если разделитель указан, он используется для объединения нескольких значений в одно строковое значение заметки/переменной окружения

LookupUserAttrIter <attribute> <name>

Нет

server config

Указывает имя атрибута, значения которого будут извлечены с помощью вызова org.freedesktop.sssd.infopipe.GetUserAttr, и имя заметки и/или переменной окружения, в которую будет сохранено количество значений атрибута. Значения будут храниться в переменных <name>_N, <name>_1, <name>_2, и так далее. Это позволяет безопасно извлекать многозначные атрибуты без конфликта разделителей с их значениями

LookupDbusTimeout <milliseconds>

LookupDbusTimeout 5000

server config

Указывает время ожидания (в миллисекундах) для операций, связанных с D-Bus. Если время ожидания превышено, операция будет прервана

LookupUserByCertificateParamName <name>

Нет

server config

Задает имя параметра для строки запроса HTTP. Значение из строки запроса (если оно есть) отправляется в SSSD вместе с сертификатом. Это полезно, когда один сертификат назначен нескольким учетным записям пользователей. По умолчанию параметры не забираются из строки запроса