LINUX.ORG.RU
ФорумAdmin

NTLM и несколько AD


0

1

Всем привет! Уже всю голову сломал, никак не могу придумать (или найти) решение поставленной задачи.

Стоит апач с авторизацией по NTLM. Есть 2 сервака AD без взаимного доверия доменами. Как организовать возможность авторизации пользователей из обоих доменов?

Если следовать классической схемой, то поднимать winbindd, прописывать realm домена и ntlm_auth будет ходит в него. Но что делать когда появляется второй AD? Теоретически можно поднять второй winbindd с realm второго домена, даже можно поднять второй ntlm_auth. Но как тогда заставить апач перебирать среди этих двух NTLMAuthHelper'ов пока не найдет нужного пользователя?

Гугл упорно говорит что winbindd не умеет смотреть в два сервака. Может есть какие-то обходные пути?

да - написать своего хелпера, который будет спрашивать сначала у первого АД, а если там нету - то у второго. по сути, просто прокси, тривиальная хрень.

val-amart ★★★★★ ()

Во 1ых, НТЛМ старое говно :)

Во 2ых я для решения подобной задачи использовал несколько виртуалхостов вида site.domain1.ru, site.domain2.ru etc. с авторизацией по керберосу, которые вели на один и тот же сайт. В каждом вх я указывал свой домен для авторизации керберосу. У модуля mod_auth_kerb можно указать альтернативные домены для авторизации, но они почему-то не работали, авторизация шла тоьлко по первому.

А так бы можно было обойтись без кучи виртуалхостов...

blind_oracle ★★★★★ ()
Ответ на: комментарий от val-amart

вместо хелпера гораздо проще не изобретать велосипед, а заюзать PAM, в котором несколько доменов авторизуются подряд. У меня так довкот работает с 4 доменами.

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

По первому пункту никаких возражений.. не я такой - жизнь такая (политика партии) =)

Но несмотря ни на что решил попытать счастье с mod_auth_kerb. И тут совсем встал ( Никто не знает почему после подгрузки mod_auth_kerb и указания в конфиге AuthType Kerberos. Апач по всем запросам отдает 401 и даже не пытается дергать модуль? Вернее скажу больше - он отдает страничку 401 без заголовка WWW-Authenticate, соответственно браузер даже не пытается логиниться. Проверил с NTLM-модулем там все ок - «WWW-Authenticate: NTLM», а вот с керберосом болт... Ладно, фиг с ним, с mod_auth_kerb, установил mod_spnego - и таже фигня. Такое ощущение что апач не знает таких AuthType как «Kerberos» или «SPNEGO» и соответственно не знает что предложить пользователю в заголовке «WWW-Authenticate»....

pioneer3 ()
Ответ на: комментарий от blind_oracle
# cat /etc/krb5.conf
[libdefaults]
        default_realm = 4TO-TO.RU
        ticket_lifetime = 600
        forwardable = yes
        default_keytab_name = FILE:/etc/krb5.keytab
        dns_lookup_realm = false
        dns_lookup_kdc = false
[realms]
        4TO-TO.RU = {
        kdc = dc.4to-to.ru:88
        admin_server = dc.4to-to.ru:749
        default_domain=4to-to.ru
}

[domain_realm]
        .4to-to.ru = 4TO-TO.RU
        4to-to.ru = 4TO-TO.RU
        .4TO-TO.RU = 4TO-TO.RU
        4TO-TO.RU = 4TO-TO.RU

[logging]
        kdc = FILE:/var/log/krb5/krb5kdc.log
        admin_server = FILE:/var/log/krb5/kadmind.log
        default = FILE:/var/log/krb5lib.log

[appdefaults]
pam = {
debug = true
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = false
krb4_convert = false
}

# cat /etc/apache2/vhosts.d/test.conf
<VirtualHost *:8089>
    ServerAdmin webmaster@example.com
    ServerName www.4to-to.ru
    DocumentRoot /srv/www/vhosts/test
    LogLevel debug
    ErrorLog /var/log/apache2/test-error_log
    CustomLog /var/log/apache2/test-access_log combined
    HostnameLookups Off
    UseCanonicalName On
    ServerSignature On
    <Directory "/srv/www/vhosts/test">
        Options Indexes FollowSymLinks
        AllowOverride None

        LoadModule auth_kerb_module /usr/lib64/apache2/mod_auth_kerb.so
        AuthType Kerberos
        AuthName        "Please Log"
        KrbServiceName "HTTP/www.4to-to.ru"
        KrbVerifyKDC off
        KrbAuthRealms 4TO-TO.RU
        KrbMethodK5Passwd on
        KrbMethodNegotiate on
        Krb5Keytab /etc/apache2/vhosts.d/apache.keytab

#       Krb5ServiceName HTTP
#       Krb5KeyTabFile /etc/apache2/vhosts.d/apache.keytab
#       AuthName "Please Log"
#       AuthType SPNEGO
        
        require valid-user
        Order Allow,Deny
        Allow from all
    </Directory>
</VirtualHost>
# curl --include http://localhost:8089
HTTP/1.1 401 Authorization Required
Date: Thu, 04 Oct 2012 05:37:07 GMT
Server: Apache/2.2.12 (Linux)
Vary: accept-language,accept-charset
Accept-Ranges: bytes
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1
Content-Language: en

# tail -f /var/log/apache2/test-access_log
127.0.0.1 - - [04/Oct/2012:09:37:07 +0400] "GET / HTTP/1.1" 401 1299 "-" "curl/7.19.7 (x86_64-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8j zlib/1.2.3 libidn/1.10"

В error-log пусто. С настроенным NTLM на другом порту запрос авторизации есть.

# curl --include http://localhost:8088
HTTP/1.1 401 Authorization Required
Date: Thu, 04 Oct 2012 05:46:54 GMT
Server: Apache/2.2.12 (Linux)
WWW-Authenticate: NTLM                       <------
Vary: accept-language,accept-charset
Accept-Ranges: bytes
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1
Content-Language: en
pioneer3 ()
Ответ на: комментарий от pioneer3

Вот рабочий конфиг (debian stable)

# cat site1.domain.ru.conf
<VirtualHost *:80>
...
    <Directory "/var/www/site1.domain.ru">
        Options FollowSymlinks
        AllowOverride All
        Order allow,deny
        Allow from all

        AuthType Kerberos
        AuthName "Login"
        Krb5Keytab /etc/apache2/keytabs/site1.domain.ru.keytab
        KrbAuthoritative On
        KrbLocalUserMapping On
        KrbMethodNegotiate On
        KrbMethodK5Passwd On
        KrbAuthRealms DOMAIN.RU
        KrbServiceName HTTP/site1.domain.ru@DOMAIN.RU
        Require valid-user
    </Directory>
</VirtualHost>

# cat /etc/krb5.conf
[appdefaults]
    pam = {
        debug = false
        alt_auth_map = %s
        force_alt_auth = true
        ticket_lifetime = 24h
        renew_lifetime = 24h
        forwardable = true
    }

[libdefaults]
    default_realm = DOMAIN.RU
    kdc_timesync = 1
    ccache_type = 4
    forwardable = true
    proxiable = true
    ticket_lifetime = 24h
    dns_lookup_realm = false
    dns_lookup_kdc = false
    rdns = false

    default_tgs_enctypes = rc4-hmac
    default_tkt_enctypes = rc4-hmac
    permitted_enctypes = rc4-hmac

[realms]
    DOMAIN.RU = {
        kdc = 10.1.0.9
        kdc = 10.1.0.10
        admin_server = 10.1.0.9
        admin_server = 10.1.0.10
        default_domain = DOMAIN.RU
    }

[domain_realm]
    .domain.ru = DOMAIN.RU
    domain.ru = DOMAIN.RU

Ну и вообще Loadmodule делать внутри директории виртуалхоста это как-то вызывает недоумение :)

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

Полностью актуализировал свой конфиг в соответствии с Вашим. Результата «0». Видать есть еще какое-то узкое место :(

ПС: Loadmodule в виртуалхосте - это естественно не продакшен решение, а для теста сойдет - что бы не редактировать кучу файлов, все в одном месте. =)

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