LINUX.ORG.RU
решено ФорумAdmin

Прозрачная авторизация в apache с нескольких доменов

 , , , ,


0

1

Народ, а нет у кого поделиться гарантированно работающим конфигом для прозрачной авторизации через kerberos в apache 2.4 для нескольких доменов ad с проверкой пользователей по группам из ldap?

Только доброходов прошу не бросаться в гугл. У меня уже по всем возможным запросам на 10 страниц все ссылки фиолетовые. Они все или не правильные или не точные и будут работать только в отдельных случаях. И т.д. Не нужно.

Я почти прошёл этот квест. Затык в общем на определении строк подключения к ldap для проверки соответсвия пользователя группе.

Пока я пишу всё внутри Location или Directory - всё замечательно. Но так можно описать только один домен. Когда я выношу описания в

<AuthnProviderAlias ldap ldap-server1>

и пишу

AuthBasicProvider ldap-server1

как всё кончается. В логе видно, что пользователь авторизирован, его логин сконвертирован в локальный, но запроса в ldap нет. Сразу проверка Require ldap-group, она проваливается и прощай мама дорогая, HTTP/401.

Причём, если написать AuthBasicProvider blah-blah-blah, то апач не стартует. Т.е. он проверяет корректность, но внутрь блока при работе не заходит.

В гугле упоминается, что это баг «гениального» рефакторинга 2.2 -> 2.4. Который вроде пофиксили. Обновил apache из стороннего репозитория до 2.4.25 - нет эффекта. Ещё пишут, что не работать внутри VirtualHost, но я не в нём тестирую...

Может кто прошёл это квест уже до конца и поделится конфигом?

★★★★★

freeradius поможет или ad lds

anonymous ()

А просто аутентификация через керберос, без проверки группы, готова уже? Конфиг покажи, если да.

thesis ★★★★★ ()
Ответ на: комментарий от thesis

Конфиг покажи, если да.

Ну этого-то добра в сети навалом. И почти без ошибок описано

в krb5.conf должно быть

[libdefaults]
 kdc_timesync = 1
 ccache_type = 4
 dns_lookup_realm = false
 ticket_lifetime = 600
 renew_lifetime = 7d
 forwardable = true
 proxiable = true
 rdns = false
 v4_instance_resolve = false
 v4_name_convert = {
    host = {
        rcmd = host
        ftp = ftp
    }
 }
 default_ccache_name = KEYRING:persistent:%{uid}
 default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
 default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
 permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
 default_realm = EXAMPLE.COM

[appdefaults]
 autologin = true
 forward = true
 forwardable = true
 encrypt = true

[realms]
 EXAMPLE.COM = {
    kdc = dc1.example.com:88
    # Можно задать дополнительные контроллеры
    kdc = dc2.example.com:88
    admin_server = dc1.example.com:749
    default_domain = EXAMPLE.COM
    # Правило преобразования имени kerberos пользователя в локальное
    # Нужно только если будет дальнейшая проверка через ldap, а так можно не писать
    # По умолчанию user@EXAMPLE.COM преобразуется в user. Но только для дефолтного домена
    # Для остальных нужно auth_to_local. И писать его нужно именно
    # в блоке основного домена! (Про это почти нигде не упоминают)
    auth_to_local = RULE:[1:$1@$0](.+@.+$)s/@.+$//
 }

 EXAMPLE2.COM = {
    kdc = dc1.example2.com:88
    kdc = dc2.example2.com:88
    admin_server = dc1.example2.com:749
 }

[domain_realm]
 .example.com = EXAMPLE.COM
 example.com = EXAMPLE.COM

 .example2.com = EXAMPLE2.COM
 example2.com = EXAMPLE2.COM

в httpd.conf

<Location />
    # http://modauthkerb.sourceforge.net/configure.html
    KrbServiceName HTTP
    # Вход по SSO без указания пароля для доменных пользователей
    # Браузерам требяется настройка, для этой фичи, гуглиться <бразуре> sso|spnego
    KrbMethodNegotiate on
    # Запасной режим, если sso не прошло, то выскакивает форма запроса логина/пароля
    KrbMethodK5Passwd on
    KrbVerifyKDC on
    KrbAuthRealms EXAMPLE.COM EXAMPLE2.COM
    Krb5Keytab /etc/krb5http.keytab
    # Конфертировать пользователей kerberos в локальных, по правилам заданным в
    # auth_to_local файла krb5.conf. Нужно только для взаимодействия с ldap
    KrbLocalUserMapping off
    
    # Принимаем любого залогинившегося пользователя
    require valid-user
    
    # Или только избранных. Форма записи имени пользователя зависит от KrbLocalUserMapping
    # в локальной форме @ДОМЕН не дописывается
    require user user1@EXAMPLE.COM faruser@EXAMPLE2.COM
</Location>

файл krb5http.keytab генерируется на венде (на контроллере домена), командой типа

ktpass.exe /princ HTTP/my.web.site.example.com@EXAMPLE.COM /mapuser kerbuser@EXAMPLE.COM /crypto ALL /ptype KRB5_NT_PRINCIPAL /mapop set /pass <пароль> /out krb5http.keytab

Подробнее о ktpass можно в мануале M$ прочесть.

atrus ★★★★★ ()

В логе видно, что пользователь авторизирован, его логин сконвертирован в локальный, но запроса в ldap нет. Сразу проверка Require ldap-group, она проваливается и прощай мама дорогая, HTTP/401.

Нужен debug log LogLevel debug ErrorLog /var/log/httpd/error_log

выхлоп в студию после попытки авторизации. Подозреваю нет поддержки ldap в apr-util - если что пересобрать апач из исходников --enable-ldap \ --enable-authnz-ldap \ --with-included-apr \ --with-ldap

Kerberos в принципе нах не нужен - какой нах керберос если потребуется с моб гаджетов ходить. Оставляем ldap basic auth И всё.

anonymous ()

Когда я выношу описания в
Но так можно описать только один домен.

Что такое «описания», что за «один домен» - я ничего не понял.

zgen ★★★★★ ()
Ответ на: комментарий от gasinvein

Тогда зачем ты basic auth с ldap делаешь?

Я не делаю.

Как минимум AuthType Kerberos должно быть.

Так и стоит. AuthBasicProvider это опция по доке апача для указания вариантов AuthnProviderAlias. И там прямой пример для ldap есть.

atrus ★★★★★ ()
Ответ на: комментарий от zgen

Что такое «описания»

Описание соединения с AD, параметры AuthLDAPURL, AuthLDAPBindDN, AuthLDAPBindPassword.

что за «один домен»

Домен Active Directory. Типа EXAMPLE.COM, DOMAIN.TLD и такое всё. :)

atrus ★★★★★ ()
Ответ на: комментарий от anonymous

Нужен debug log

Стоит уже. Толку от него. Даже trace8 мало что даёт.

Тем не менее я сделал ещё шаг в квесте. Обнаружил, что хотя apache полностью игнорирует записи AuthnProviderAlias, AuthBasicProvider для AuthType Kerberos, можно использовать «AuthzProviderAlias ldap-group» для проверки пользователя по группам.

К сожалению, это оставило одну не приятную проблему, которая не проявлялась, когда AuthLDAPURL был в Location.

Теперь в режиме KrbMethodNegotiate on, KrbMethodK5Passwd on при входе с недоменного компа после ввода логина пароля соединение просто умирает. Но по нажатию в баузере «обновить страницу» всё начинает работать.

Автовход для доменных клиентов работает. Если оставить только KrbMethodNegotiate on для автовхода - работает. Только KrbMethodK5Passwd on - работает. Но они вместе для случай ввод пароля получают сбой на первой попытке...

В логах мало что (даже на trace8):

[authz_core:debug] [pid 19783] mod_authz_core.c(809): [client 192.168.1.6:50398] AH01626: authorization result of Require valid-user : denied (no authenticated user yet)
[authz_core:debug] [pid 19783] mod_authz_core.c(809): [client 192.168.1.6:50398] AH01626: authorization result of Require ldap-group-1 : denied (no authenticated user yet)
[authz_core:debug] [pid 19783] mod_authz_core.c(809): [client 192.168.1.6:50398] AH01626: authorization result of Require ldap-group-2 : denied (no authenticated user yet)
[authz_core:debug] [pid 19783] mod_authz_core.c(809): [client 192.168.1.6:50398] AH01626: authorization result of <RequireAny>: denied (no authenticated user yet)
[authz_core:debug] [pid 19783] mod_authz_core.c(809): [client 192.168.1.6:50398] AH01626: authorization result of <RequireAll>: denied (no authenticated user yet)
[authz_core:debug] [pid 19783] mod_authz_core.c(809): [client 192.168.1.6:50398] AH01626: authorization result of Require ldap-group CN=***,OU=***,OU=***,OU=***,OU=***,DC=***,DC=***: denied (no authenticated user yet)
[authz_core:debug] [pid 19783] mod_authz_core.c(809): [client 192.168.1.6:50398] AH01626: authorization result of <RequireAny>: denied (no authenticated user yet)
[auth_kerb:debug] [pid 19783] src/mod_auth_kerb.c(1954): [client 192.168.1.6:50398] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[core:trace3] [pid 19783] request.c(119): [client 192.168.1.6:50398] auth phase 'check user' gave status 401: /
[http:trace3] [pid 19783] http_filters.c(1129): [client 192.168.1.6:50398] Response sent with status 401, headers:
[http:trace5] [pid 19783] http_filters.c(1136): [client 192.168.1.6:50398]   Date: Thu, 20 Jul 2017 13:59:21 GMT
[http:trace5] [pid 19783] http_filters.c(1139): [client 192.168.1.6:50398]   Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips mod_auth_kerb/5.4 PHP/7.1.6
[http:trace4] [pid 19783] http_filters.c(958): [client 192.168.1.6:50398]   WWW-Authenticate: Negotiate
[http:trace4] [pid 19783] http_filters.c(958): [client 192.168.1.6:50398]   WWW-Authenticate: Basic realm=\\"Test Private Zone\\"
[http:trace4] [pid 19783] http_filters.c(958): [client 192.168.1.6:50398]   Content-Length: 381
[http:trace4] [pid 19783] http_filters.c(958): [client 192.168.1.6:50398]   Keep-Alive: timeout=5, max=100
[http:trace4] [pid 19783] http_filters.c(958): [client 192.168.1.6:50398]   Connection: Keep-Alive
[http:trace4] [pid 19783] http_filters.c(958): [client 192.168.1.6:50398]   Content-Type: text/html; charset=iso-8859-1
[ssl:trace4] [pid 19783] ssl_engine_io.c(1514): [client 192.168.1.6:50398] coalesce: have 0 bytes, adding 346 more
[core:trace6] [pid 19783] core_filters.c(525): [client 192.168.1.6:50398] core_output_filter: flushing because of FLUSH bucket
[core:trace6] [pid 19783] core_filters.c(525): [client 192.168.1.6:50398] core_output_filter: flushing because of FLUSH bucket
[ssl:trace4] [pid 19783] ssl_engine_io.c(2078): [client 192.168.1.6:50398] OpenSSL: I/O error, 5 bytes expected to read on BIO#7f7c13125d40 [mem: 7f7c1315fe93]
[core:trace6] [pid 19783] core_filters.c(525): [client 192.168.1.6:50398] core_output_filter: flushing because of FLUSH bucket
[core:trace6] [pid 19783] core_filters.c(525): [client 192.168.1.6:50398] core_output_filter: flushing because of FLUSH bucket
[ssl:trace4] [pid 19783] ssl_engine_io.c(2078): [client 192.168.1.6:50398] OpenSSL: I/O error, 5 bytes expected to read on BIO#7f7c13125d40 [mem: 7f7c1315fe93]
[ssl:info] [pid 19783] (70007)The timeout specified has expired: [client 192.168.1.6:50398] AH01991: SSL input filter read failed.
[core:trace6] [pid 19783] core_filters.c(525): [client 192.168.1.6:50398] core_output_filter: flushing because of FLUSH bucket
[ssl:trace3] [pid 19783] ssl_engine_kernel.c(1778): [client 192.168.1.6:50398] OpenSSL: Write: SSL negotiation finished successfully
[ssl:debug] [pid 19783] ssl_engine_io.c(992): [client 192.168.1.6:50398] AH02001: Connection closed to child 1 with standard shutdown (server test.site.local:443)

atrus ★★★★★ ()
Последнее исправление: atrus (всего исправлений: 1)
Ответ на: комментарий от atrus

Но по нажатию в баузере «обновить страницу» всё начинает работать

Так проблема осталась только у недоменных машин? Сделайте fallback для них на basic auth

Server: Apache/2.4.6

Старьё - обновить

anonymous ()

А можно помер конфига, который не работает и пример, который работает?

zgen ★★★★★ ()
Ответ на: комментарий от anonymous

Сделайте fallback для них на basic auth

Это и есть fallback. :) Пользователь вводит свой логин и пароль в форму basic auth, а уже сервер проверяет пароль сам.

Видите строку:

kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
mod_auth_kerb видит, что пользователь токен не принёс и посылает ему фальшивый basic auth:
auth phase 'check user' gave status 401
WWW-Authenticate: Basic realm=\\"Test Private Zone\\"

Старьё - обновить

Ну английским по белому же написал - CentOS. Туда красношапочники бекпортируют патчи без накрутки номера версии. Все патчи на исправление багов в mod_ldap присутствуют и даже в багтрекере описаны были.

atrus ★★★★★ ()
Ответ на: комментарий от atrus

Теперь в режиме KrbMethodNegotiate on, KrbMethodK5Passwd on при >входе с недоменного компа после ввода логина пароля соединение >просто умирает. Но по нажатию в баузере «обновить страницу» всё >начинает работать.

..

401

можно добавить костыли в виде nginx: ... error_page 401 = @retry; } location @retry { proxy_pass $scheme://$http_host$request_uri; ...

в багтрекере описаны были

ну ok

anonymous ()

Так, в общем отбой. :( Я тут дочитал интернеты и похоже это известная проблема mod_auth_kerb. Оказывается раньше пароль не спрашивали дважды, потому что тестировал на локальном пользователе в виртуалке, чьё имя и пароль совпадали с доменным. А срыв соединения - изветсный баг лисы. (Который пару лет как закрыт, но почему-то у некоторых воспроизводится, а вот IE послушно показывает две формы подряд.)

Это какой-то п#@$ец!

atrus ★★★★★ ()
Ответ на: комментарий от atrus

Ну и последнее. Чтобы уж все решения были вместе.

1. Как сделать чтобы Firefox не сбрасывал соединение.
Надо отключить KeepAlive в apache.

2. Как сделать чтобы в IE/Edge/Chrome не вываливалось по два окна с запросом пароля?
Надо включить сайт в доверенные. o_O

atrus ★★★★★ ()
Ответ на: комментарий от atrus

Чтобы уж все решения были вместе

Покажите конфиги апача с ldap частью, пожалуйста. Керберос работает, не могу добавить ldap авторизацию, не понимаю, как её дебажить. [authz_core:error] [pid 25056] [client :52226] AH01631: user : authorization failure for «/» Такое ощущение, что это всё, что он умеет писать.

psazonov ()
Ответ на: Чтобы уж все решения были вместе от psazonov

Re: Чтобы уж все решения были вместе

не могу добавить ldap авторизацию, не понимаю, как её дебажить

Можно логи избирательно включать. Я так делал: LogLevel warn authz_core:debug auth_kerb:debug

Со ldap всё просто и сложно одновременно. То, как это делалось в apache 2.2 в 2.4 сломали по каким-то внутренним причинам. Соответственно, те 100500 примеров, что находятся гуглом абсолютно не рабочие.

Добавить точнее даже не авторизацию (авторизацию у вас делает kerberos), а фильтр по группам/пользователям ldap можно. Но есть подводный камень. У вас появятся потенциальные проблемы с коллизией пользователей. Вам придётся включить KrbLocalUserMapping on, что усечёт имя пользователя с user@EXAMPLE.COM до user. Если в разных доменах будет пользователь с одинаковым именем, то он сможет проскочить теоретически...

И ещё одно, если у вас несколько доменов, то вам потребуется правильный keytab файл для нескольких доменов. К сожалению, инструкции опять же лажают и большая часть таких файлов не работает. Рабочую инструкцию по правильному созданию keytab файлов, в том числе с поддержкой нескольких доменов можно найти здесь: https://pro-ldap.ru/art/levintsa/20160420-ktpass/

Теперь переходим к ldap. Общая часть:

KeepAlive off

LDAPSharedCacheSize 50000
LDAPCacheEntries 1024
LDAPCacheTTL 600
LDAPOpCacheEntries 1024
LDAPOpCacheTTL 600

Описание групп:

<AuthzProviderAlias ldap-group example-group-developers "CN=Developers,OU=Groups,DC=example,DC=com">
    Include conf/httpd-ldap-example.conf
</AuthzProviderAlias>

<AuthzProviderAlias ldap-group example2-group-developers "CN=Developers,OU=Groups,DC=example2,DC=com">
    Include conf/httpd-ldap-example2.conf
</AuthzProviderAlias>

Отдельный пользователь:

<AuthzProviderAlias ldap-dn example-user-boss "CN=Big Boss,OU=Users,OU=FooBar,DC=example,DC=com">
    Include conf/httpd-ldap-example.conf
</AuthzProviderAlias>

Добавляем проверку:

AuthType Kerberos
AuthName "Use your windows login/password"
AuthzSendForbiddenOnFailure on
KrbAuthoritative off
AuthLDAPBindAuthoritative off
AuthBasicAuthoritative off

<RequireAll>
    Require valid-user
    <RequireAny>
       Require example-user-boss
       Require example-group-developers
       Require example2-group-developers
    </RequireAny>
</RequireAll>

Теперь инклуды. Вы видите, что я там включаю внешние файлы, причём некоторые по нескольку раз. Это описания подключения к ldap, где apache собственно и будет искать пользователей. Поскольку описывать конфигурацию надо каждый раз заново, даже если она повторяется, я вынес её в отдельные файлы.

conf/httpd-ldap-example.conf:

AuthLDAPURL "ldap://dc1.example.com dc2.example.com/dc=example,dc=com?sAMAccountName?sub?(objectClass=*)"
AuthLDAPBindDN WatchUser@example.com
AuthLDAPBindPassword "top_secret_password"

conf/httpd-ldap-example2.conf:

AuthLDAPURL "ldap://dc1.example2.com dc2.example2.com/dc=example2,dc=com?sAMAccountName?sub?(objectClass=*)"
AuthLDAPBindDN WatchUser@example2.com
AuthLDAPBindPassword "another_top_secret_password"

Эти пользователи должны существовать в домене с минимальными правами, они нужны только для того, чтобы apache мог получить список пользователей и групп для проверки. Кроме того, в домене обычно бывает несколько контроллеров, там показано как задавать несколько имён (dc1.example.com, dc2.example.com. просто через пробел.) Ну и ещё в зависимости от настройки домена может быть доступен или требоваться ldaps://, а не ldap://.

И ещё одно важное замечание. Даже важнейшее. :) DN (вот эти строки CN=Developers,OU=Groups,DC=example,DC=com) в описании групп или пользователей никак не парсятся и сравниваются побайтово. По крайней мере, по умолчанию. По этому чтобы не писали в интернете, нельзя писать их из головы и надеяться, что заработает. Надо взять их для нужной группы или пользователя из Active Directory и точно как есть вставить в конфиг с сохранением всех пробелов, регистра и т.д. (Кодировка UTF-8). Вот тогда заработает.

atrus ★★★★★ ()
Ответ на: Re: Чтобы уж все решения были вместе от atrus

За дебаг спасибо, сейчас буду искать проблему. Отсечение домена в логине пользователя меня как раз в тупик ставит, у нас как раз ситуация с несколькими доменами. Инструкция зачетная: https://pro-ldap.ru/art/levintsa/20160420-ktpass/ Теперь keytab файлы только по ней и делаю, автору спасибо)

psazonov ()
Ответ на: комментарий от psazonov

Отсечение домена в логине пользователя меня как раз в тупик ставит, у нас как раз ситуация с несколькими доменами.

Мне это тоже не нравится, но у нас хотя бы логины делаются так, чтобы коллизии были более редкими даже между доменами.

Я находил упоминание решения проблемы. Вроде бы как-то можно сохранить домен, порезать его уже на уровне ldap и скормить фильтру. Но на практике ни руководство, ни примеры не сработали. К сожалению ссылок не сохранил.

Если сможете пройти этот квест на золото - отпишитесь, у себя внедрю. :)

atrus ★★★★★ ()
Ответ на: комментарий от atrus

KrbLocalUserMapping

KrbLocalUserMapping в моём случае не удаляет реалм, а превращает его в домен. Т.е. SAMPLE.LOCAL становится sample.local Хотя я уверен, что в какой то момент реалм просто удалялся, как и написано в статье! С одной стороны это плохо: лдап не работает, с другой хорошо: домен больше не пропадает, потенциально это заявка на «золото». kerb_authenticate_a_name_to_local_name User@TST.LOCAL -> user@tst.local Далее видим в логах ошибку: AH01711: auth_ldap authorise: User DN not found, User not found По видимому, она связана как раз с «появлением домена» вместо его удаления.

psazonov ()
Ответ на: KrbLocalUserMapping от psazonov

Увы, это не заявка пока. Чтобы сохранять домен достаточно поставить KrbLocalUserMapping в off.
Я припомнил. Основная засада там в том, что попытка отдать домен фильтру ldap потребует его в нижнем регистре, а kerberos отдаёт в верхнем.
Правило auth_to_local имеет возможность конвертации в нижний регистр (ключ /L согласно документации), но с двумя «сюрпризами». Во первых у меня он не работает, а во вторых согласно той же документации опустит регистр всей строки, т.е. включая имя, что никуда не годится, поскольку проверка имени так же регистрочувствительна. :(

Что касается вашей проблемы, скорее всего дело в неправильном правиле RULE: параметра auth_to_local. Его проблема в том же. Поведение не соответствует документации. Т.е. пишешь по доке, а оно не работает. Свой я тупо подобрал перебрав пяток вариантов из интернета, пока не нашёл работающий. :( Вот, например, дока.

atrus ★★★★★ ()
Ответ на: KrbLocalUserMapping от psazonov

Вообще вам стоит попробовать отключить преобразование имён и посмотреть в логе что вам выдаёт kerberos. Может у вас не вариант user@EXAMPLE.COM, а что-то типа atm/fully.qualified.domain.name@YOUR-REALM.COM. Это бы объяснило почему у вас вдруг домен вырезался. Да ещё и в нижнем регистре.

atrus ★★★★★ ()
Ответ на: комментарий от atrus

KrbLocalUserMapping в off

Нет, у меня всё работает так, как я описал: с параметром off сохраняется реалм, т.е. User@TST.LOCAL c параметром on вместо realm подставляется domain, т.е. user@tst.local Выглядит как переход в нижний регистр (аля функция strtolower), но я уверен, что это именно замена реалм на домен. Я потратил уже кучу времени на то, чтобы повторить результат User@TST.LOCAL --> user, так, как это описано в 1000 инструкций, но этого не происходит! «Доку» я видел, неплохая, хоть понятно стало, как составляются эти правила замены. И такое ощущение, что я видел уже большиство доков в инете по этой теме, но они не помогают!!! Кроме того, нашёл вот такую статью: https://httpd.apache.org/docs/2.4/mod/mod_authnz_ldap.html#activedirectory Вроде бы в ней говорится, как использовать мой вариант с понижением регистра, и тут и решается проблема с 2 доменами. Но пока не удалось заставить это работать)

psazonov ()
Ответ на: KrbLocalUserMapping в off от psazonov

Заработал ldap

Использовал другого пользователя, у которого логин написан маленькими буквами и заработало, проходит ldap авторизация. Выходит, что это таки изменение регистра, а не замена realm на domain, т.е. User@TST.LOCAL превращается в user@tst.local Использовал AuthLDAPURL как в описании https://httpd.apache.org/docs/2.4/mod/mod_authnz_ldap.html#activedirectory Что делать с большими буквами не понимаю.

psazonov ()
Ответ на: Заработал ldap от psazonov

Заявка на золото

В общем, мне так и не удалось обойти дурацкое case sensitive ограничение с использованием mod_authnz_ldap. И тогда я начал смотреть в сторону перл хендлера PerlAuthzHandler и нашёл готовый хендлер AuthZLDAP, который осуществляет авторизацию. При этом аутентификацию по прежнему выполняет mod_auth_kerb. В отличие от mod_authnz_ldap хендлер AuthZLDAP предоставляет нам возможность влиять на строку поиска/фильтрации. И она таки case sensitive, но если использовать сравнение >= то внезапно нет! Таким образом, получаем конфиг: PerlSetVar LDAPURI ldap://ad.tst.local:3268 PerlSetVar LDAPbaseDN DC=tst,DC=local PerlSetVar LDAPuser readonlyuser@tst.local PerlSetVar LDAPpassword superpassword PerlSetVar LDAPfilter &(userPrincipalName>=[uid])(memberOf=CN=MyUsers,OU=MyOU,DC=tst,DC=local) PerlAuthzHandler MyApache2::AuthZLDAP

psazonov ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.