(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/[email protected]
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 - [email protected] [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)
решение1
Не знаю, нужен ли вам еще ответ, но надеюсь, что помогу кому-то еще, поделившись своим опытом. Я верю, что если вы выполните эти шаги, все будет работать хорошо.
- Убедитесь, что у вас есть правильная запись DNS дляSYD01TBUG02(Запись) на вашем DNS-сервере, указывающая на ваш веб-сервер
- Убедитесь, что у вас есть связь между SPN вашего веб-сервиса и пользователем AD. На сервере AD выполните эту команду:
setspn -A HTTP/SYD01TBUG02.onevue.com.au.local ad_username
- Убедитесь, что у вас сгенерирован правильный keytab. Выполните эту команду на сервере AD:
где xxxxxx — пароль пользователя AD. Мы используем-крипто ВСЕопция, позволяющая убедиться, что мы добавляем все поддерживаемые хэши в файл keytab.ktpass -princ HTTP/[email protected] -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 [email protected] <Location "/"> AuthType Kerberos KrbAuthRealms ONEVUE.COM.AU.LOCAL KrbServiceName HTTP/[email protected] 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 на веб-сервере.
ПСЕсли вы хотите включить SSO по полному адресу (например,SYD01TBUG02.onevue.com.au.local) вам следует добавитьSYD01TBUG02.onevue.com.au.localв зону интрасети либо через групповые политики AD (если это нужно на нескольких машинах в домене), либо локально через настройки Internet Explorer. Эти настройки влияют на все браузеры, установленные в системе.
решение2
Это потому, что когда пользователь в первый раз вводит u/p, на сервер отправляется токен ntlm. Во второй раз это правильный токен kerberos.
К сожалению, нет возможности исключить первую подсказку.
решение3
Если единый вход не является обязательным, вы можете отключить согласование, установив 'KrbMethodNegotiate off'. Это даст вам только один базовый вход, а также позволит избежать дополнительного запроса GET для каждой транзакции.