Apache, использующий mod_auth_kerb, всегда запрашивает пароль дважды
(Debian Squeeze)
Я пытаюсь настроить apache для использования аутентификации Kerberos, чтобы позволить пользователям AD войти в систему. Он работает, но дважды запрашивает у пользователя имя пользователя и пароль, при этом первый раз игнорируется (независимо от того, что он вставлен.) Только второе приглашение содержит строку AuthName из конфигурации (то есть: первое окно является общим именем пользователя / паролем, второе включает заголовок "Вход в Kerberos"). Меня не волнует встроенная проверка подлинности Windows, работающая на этом этапе, Я просто хочу, чтобы пользователи могли входить со своей учетной записью AD, поэтому нам не нужно настраивать второй репозиторий учетных записей пользователей.
Как я могу это исправить, чтобы устранить эту первую бесполезную подсказку?
Директивы в файле apache2.conf:
<Directory /var/www/kerberos>
AuthType Kerberos
AuthName "Kerberos Login"
KrbMethodNegotiate On
KrbMethodK5Passwd On
KrbAuthRealms ONEVUE.COM.AU.LOCAL
Krb5KeyTab /etc/krb5.keytab
KrbServiceName HTTP/SYD01TBUG02.onevue.com.au.local@ONEVUE.COM.AU.LOCAL
require valid-user
</Directory>
krb5.conf:
[libdefaults]
default_realm = ONEVUE.COM.AU.LOCAL
[realms]
ONEVUE.COM.AU.LOCAL = {
kdc = SYD01PWDC01.ONEVUE.COM.AU.LOCAL
master_kdc = SYD01PWDC01.ONEVUE.COM.AU.LOCAL
admin_server = SYD01PWDC01.ONEVUE.COM.AU.LOCAL
default_domain = ONEVUE.COM.AU.LOCAL
}
[login]
krb4_convert = true
krb4_get_tickets = false
Журнал доступа при доступе к защищенному каталогу (обратите внимание на два отдельных 401)
192.168.10.115 - - [24/Aug/2012:15:52:01 +1000] "GET /kerberos/ HTTP/1.1" 401 710 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1"
192.168.10.115 - - [24/Aug/2012:15:52:06 +1000] "GET /kerberos/ HTTP/1.1" 401 680 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1"
192.168.10.115 - myaccount.lastname@MYDOMAIN.LOCAL [24/Aug/2012:15:52:10 +1000] "GET /kerberos/ HTTP/1.1" 200 375 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1"
И одна строка в error.log
[Fri Aug 24 15:52:06 2012] [error] [client 192.168.0.115] gss_accept_sec_context(2) failed: An unsupported mechanism was requested (, Unknown error)
3 ответа
Я не знаю, нужен ли вам ответ, но я надеюсь, что помогу кому-то еще, поделившись своим опытом. Я верю, что если вы будете следовать этим шагам, все будет хорошо.
- Убедитесь, что на вашем DNS-сервере правильно указана запись DNS для SYD01TBUG02 (запись A), указывающая на ваш веб-сервер.
- Убедитесь, что у вас есть связь между SPN вашего веб-сервиса и пользователем AD. На сервере AD выполните эту команду:
setspn -A HTTP/SYD01TBUG02.onevue.com.au.local ad_username
- Убедитесь, что вы правильно сгенерировали keytab. Запустите эту команду на вашем сервере AD:
где xxxxxx - пароль пользователя AD. Мы используем опцию -crypto ALL, чтобы убедиться, что мы добавили все поддерживаемые хеши в файл keytab.ktpass -princ HTTP/SYD01TBUG02.onevue.com.au.local@ONEVUE.COM.AU.LOCAL -mapuser ad_username -pass xxxxxx -crypto ALL -ptype KRB5_NT_PRINCIPAL -out SYD01TBUG02.keytab -setupn -setpass
- Теперь вы должны скопировать сгенерированный файл SYD01TBUG02.keytab на ваш веб-сервер и скопировать его в определенный каталог. Например, давайте скопируем его в папку /etc/apache2/keytab/.
- Пример конфигурационного файла apache для веб-сервиса:
<VirtualHost *:80> DocumentRoot "/var/www/kerberos" ServerName SYD01TBUG02.onevue.com.au.local ServerAlias SYD01TBUG02 AddDefaultCharset UTF-8 DirectoryIndex index.php ErrorLog /var/log/apache2/error_SYD01TBUG02.log TransferLog /var/log/apache2/transfer_SYD01TBUG02.log LogLevel warn ServerAdmin admin@onevue.com.au <Location "/"> AuthType Kerberos KrbAuthRealms ONEVUE.COM.AU.LOCAL KrbServiceName HTTP/SYD01TBUG02.onevue.com.au.local@ONEVUE.COM.AU.LOCAL Krb5Keytab /etc/apache2/keytab/SYD01TBUG02.keytab KrbMethodNegotiate on KrbMethodK5Passwd on KrbVerifyKDC on require valid-user </Location> <Directory /> </Directory> </VirtualHost>
Перезагрузите или перезапустите apache - Теперь, если вы введете http://SYD01TBUG02/ в адресную строку браузера, вы автоматически войдете в веб-сервис через SSO (Chrome, Chromium-подобные браузеры и IE поддерживают SSO из коробки, но есть и плагин для Firefox).
sudo service apache2 reload
Надеюсь, это поможет настроить аутентификацию Kerberos на веб-сервере.
PS Если вы хотите включить единый вход по полному адресу (например, SYD01TBUG02.onevue.com.au.local), вы должны добавить SYD01TBUG02.onevue.com.au.local в зону интрасети либо с помощью групповых политик AD (если вам это нужно на нескольких машины в домене) или локально через настройки Internet Explorer. Эти настройки влияют на все браузеры, установленные в системе.
Это потому, что в первый раз, когда пользователь вводит u/p, токен ntlm отправляется на сервер. Второй раз это правильный токен Kerberos.
К сожалению, вы не можете удалить первое приглашение.
Если единый вход не является обязательным, вы можете отключить согласование, установив "KrbMethodNegotiate off". Это даст вам только один базовый логин, а также позволит избежать дополнительного запроса GET для каждой транзакции.