Как избежать частого увеличения KVNO при использовании Apache HTTPD с mod_auth_kerb, разговаривающим с AD?

Я установил Apache HTTPD 2.4 с mod_auth_kerb, создал учетную запись службы в Active Directory, добавил имя участника-службы для моего имени хоста http, создал файл keytab на машине linux, и система SSO начала нормально работать для пользователей, вошедших в домен AD из IE, Все было хорошо!

Тем не менее, каждую неделю или около того, пользователи вместо того, чтобы войти на сайт, вместо этого получают запрос http auth, который не принимает свои учетные данные. Просматривая логи сервера httpd, мы видим такие записи:

[auth_kerb:error] [pid 8040] [client 192.168.100.100:54460] gss_accept_sec_context() failed: Unspecified GSS failure.  Minor code may provide more information (, Key version number for principal in key table is incorrect)

Кажется, что произошло то, что KVNO (номер версии ключа Kerberos) в AD увеличился, поэтому их таблица ключей недействительна. Мы можем увидеть это, сделав что-то вроде:

$ kinit 'MACHINENAME$@DOM.AIN'
Password for MACHINENAME$@DOM.AIN

$ kvno HTTP/sso.example.com
HTTP/sso.example.com@DOM.AIN: kvno = 12

$ klist -k krb5-keytab 
Keytab name: FILE:krb5-keytab
KVNO Principal
---- ---------------------------------------------
11   HTTP/sso.example.com@DOM.AIN

KVNO, о котором сообщается в AD, каким-то образом увеличилось, и оно на единицу выше, чем значение в таблице ключей, которое использует Apache, что приводит к сбою единого входа Kerberos

Если мы заново создадим таблицу ключей, с чем-то вроде:

$ kinit 'MACHINENAME$@DOM.AIN'
Password for MACHINENAME$@DOM.AIN

$ KEYTAB=krb5-keytab
$ SN="HTTP/sso.example.com@DOM.AIN"
$ KVNO=`kvno $SN | awk -F'kvno = ' '{print $2}'`
$ echo "KVNO for $SN is $KVNO"
KVNO for HTTP/sso.example.com@DOM.AIN is 12

$ rm $KEYTAB
$ ktutil
addent -password -p HTTP/sso.example.com@DOM.AIN -k 12 -e arcfour-hmac
wkt krb5-keytab
$ chown apache.apache $KEYTAB
$ chmod 440 $KEYTAB
$ chcon -u system_u -t httpd_config_t $KEYTAB
$ service httpd restart

Тогда Kerberos SSO снова начнет работать, и все будет хорошо! В течение недели или около того, когда вдруг снова произойдет сбой, поскольку KVNO молча и загадочно поднялась на одну величину выше AD.

Итак, что мне нужно сделать, либо в AD, либо в том, как я создаю файл keyberos keytab в Linux, чтобы KVNO не продолжал произвольно увеличиваться каждые 1-2 недели, тем самым нарушая возможность доступа всех пользователей к сайту?

2 ответа

Active Directory увеличивает KVNO в соответствии с RFC 4120. Microsoft зарегистрировала их реализацию в разделе MS-KILE документа 3.1.5.8.

Active Directory по существу игнорирует KVNO. (За исключением контроллеров домена только для чтения - если RODC скомпрометирован, ключи, которые он держит, нельзя повторно использовать против другого контроллера домена.) Поэтому я хочу сказать, что AD обычно не заботится о том, что представляет собой ваш KVNO - даже если он все еще поддерживает KVNO - это волнует только, если ваш билет действителен и не истек. (Независимо от того, выполняет ли ваш Linux-клиент строгую проверку KVNO, я не знаю. Очевидно, это так.)

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

KVNO увеличивается, когда клиентский компьютер меняет свой пароль или обновляет свой билет, или срок его билета истекает. По умолчанию Active Directory использует 7 дней для максимального времени, в течение которого билет может быть продлен, что соответствует вашему описанию "он работает в течение недели или около того".

Не существует механизма, позволяющего предотвратить добавление KVNO в Active Directory при получении действительного изменения пароля или смены билета с компьютера, являющегося членом домена. Поэтому я хочу сказать, что Active Directory не "загадочным образом" обновляет KVNO, а делает это по определенным причинам.

Мне кажется, что ваша Linux-машина все еще пытается использовать свой билет (срок действия которого истек) после того, как его максимальный срок службы составляет 7 дней. (Или Active Directory был настроен на что-то более короткое.)

Посмотри в свой /etc/krb5.conf и убедитесь, что максимальное время жизни билета находится в пределах максимального времени жизни билета, указанного в Active Directory (политика Kerberos в групповой политике домена по умолчанию). Вы должны обновить свой билет (и ваш KVNO должен увеличиться) в пределах интервала, указанного в AD,

Возможно, вы столкнулись с этой ошибкой https://bugzilla.samba.org/show_bug.cgi?id=6750

Есть несколько изменений конфигурации samba, которые решат это. Я поставил

kerberos method = secrets and keytab
Другие вопросы по тегам