Я пытаюсь настроить единый вход на моем веб-сервере Apache с помощью Kerberos, чтобы пользователи, вошедшие в локальный домен, сразу распознавались и входили в систему.
Я следил это руководство к письму, но я не могу избавиться от подсказки пользователя / пароля после того, как все настроено.
Я использую Ubuntu 8.04, установил mod_auth_kerb 5.4 для Apache.
Мой /etc/krb5.conf:
[libdefaults]
default_realm = COMPANY.LOCAL
[domain_realm]
.company.local = COMPANY.LOCAL
company.local = COMPANY.LOCAL
[realms]
COMPANY.LOCAL = {
default_domain = company.local
kdc = DC01.COMPANY.LOCAL:88
admin_server = DC01.COMPANY.LOCAL
}
Моя конфигурация Apache:
<Location />
AuthType Kerberos
AuthName "server login"
KrbMethodNegotiate On
KrbMethodK5Passwd On
KrbAuthRealms COMPANY.LOCAL
KrbServiceName HTTP
Krb5KeyTab /etc/apache2/httpd.keytab
KrbVerifyKDC off
KrbLocalUserMapping on
require valid-user
</Location>
Keytab был создан нашим администратором с использованием
ktpass -princ HTTP/hostname.company.local@COMPANY.LOCAL -mapuser hostname -crypto rc4-hmac-nt -ptype KRB5_NT_SRV_HST -pass CHOOSEPASSWORD -out httpd.keytab
Я выполнил соответствующие команды chmod / chown. На сервере успешно выдал kinit HTTP/hostname.company.local@COMPANY.LOCAL
и вошли в систему.
kvno
/ klist
вывод:
# kvno HTTP/hostname.company.local@COMPANY.LOCAL
HTTP/hostname.company.local@COMPANY.LOCAL: kvno = 8
# klist -ke httpd.keytab
Keytab name: FILE:httpd.keytab
KVNO Principal
---- --------------------------------------------------------------------------
8 HTTP/hostname.company.local@COMPANY.LOCAL (ArcFour with HMAC/md5)
Я настроил свой браузер (пробовал как ff, так и ie на windows7) для передачи учетных данных, чтобы, надеюсь, избавиться от приглашения, но он не работает.
Журналы ошибок Apache говорят:
[error] [client 10.0.0.1] gss_accept_sec_context() failed: Unspecified GSS failure. Minor code may provide more information (, Key version number for principal in key table is incorrect)
[error] [client 10.0.0.1] gss_accept_sec_context() failed: Invalid token was supplied (, No error)
Есть ли у кого-нибудь предложения относительно того, что мне нужно, чтобы это работало?
Если я правильно интерпретирую ошибку, я считать это означает, что у вас есть старая версия ключа в /etc/apache2/httpd.keytab. Каждый раз, когда ключ для принципала Kerberos изменяется через kadmin, номер версии увеличивается, а более старые версии этого ключа становятся недействительными.
В kinit
Команда / login показывает только то, что ключ хоста внутри /etc/krb5.keytab не поврежден. Это не обязательно означает, что kvno внутри httpd.keytab действителен, и вам нужно будет проверить его по KDC.
Начните сеанс kadmin с вашим KDC и вызовите getprinc <principalname>
. Найдите «Key: vno», это говорит вам, что KDC считает номером версии. Если у KDC есть более новая версия ключа, вам необходимо повторно экспортировать этот ключ на соответствующий хост. Я бы продолжил и проверил действительность всех ключей в /etc/krb5.keytab, пока вы находитесь в нем, просто чтобы убедиться, что поблизости нет других бомб замедленного действия.
Надеюсь, это поможет!