Учетные данные Kerberos не пересылаются в openldap с использованием mod_auth_kerb/Apache2, Authen::SASL/perl

Я пишу веб-интерфейс для управления сервером OpenLDAP нашей компании. Я использую Perl, Apache2, OpenLDAP, Cyrus SASL.

Проблема в том, что я не могу аутентифицироваться в OpenLDAP как пользователь, проверенный Kerberos, при использовании веб-интерфейса, потому что мои учетные данные Kerberos не пересылаются, а в журнале ошибок Apache написано:

Credentials cache file '/tmp/krb5cc_33' not found

где «33» — это uidNumber для Apache. Что имеет смысл, но не решает проблему. Как ни странно, все это работает из-за пределов области, потому что тогда mod_auth_kerb запрашивает имя пользователя и пароль, аутентифицируется, кэширует билеты, и все это работает.

Я использую mod_auth_kerb для аутентификации в Apache2, и он работает нормально: пароль не запрашивается, защищенная страница отображается для аутентифицированного пользователя (и отклоняется в противном случае). Соответствующий фрагмент конфигурации:

<Directory "/usr/lib/cgi-bin">
            AllowOverride None
            Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
            Order allow,deny
            Allow from all 
            AuthType Kerberos
            AuthName "Kerberos Login"
            KrbAuthRealms EXAMPLE.COM
            Krb5Keytab /etc/apache2/HTTP.keytab
            KrbServiceName HTTP
            KrbSaveCredentials on
            require valid-user
    </Directory>

Аутентификация Kerberos/GSSAPI/SASL также работает нормально, поэтому этот код дает OK при запуске из командной строки:

1 #!perl
  2 use strict;
  3 use warnings;
  4 use Net::LDAP;
  5 use Authen::SASL;
  6 
  7 my $l = Net::LDAP->new( 'ldap.example.com', onerror=>'die', );
  8 my $sasl = Authen::SASL->new(mechanism=>'GSSAPI');
  9 $l->bind( sasl=>$sasl );
 10 
 11 print "OK\n";

Итак, какое может быть решение?


person badbishop    schedule 22.04.2012    source источник
comment
Вы столкнулись с случаем двойного прыжка? Вы проверили возвращаемое значение вызова привязки в сценарии perl? Может быть ошибка.   -  person Jayen    schedule 08.06.2012


Ответы (1)


Веб-браузеры по умолчанию не пересылают билеты Kerberos. (К счастью! Это было бы серьезной проблемой безопасности, поскольку браузер просто раздавал бы ваши билеты любому веб-сайту в вашей локальной области, который их запрашивал.)

К сожалению, заставить браузер сделать это требует некоторых усилий. Например, в Firefox вам нужно зайти в about:config и настроить network.negotiate-auth.delegation-uris, чтобы добавить URL-адреса, которым вы хотите делегировать билеты. (Я думаю, что в IE есть аналогичная процедура, чтобы пометить веб-сайт как часть доверенного домена.)

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

Две реализации, которые поддерживают это:

Обе они представляют собой клиент-серверные корпоративные системы веб-аутентификации, которые требуют настройки некоторой инфраструктуры.

person rra    schedule 17.03.2013