authGSSServerInit чрезвычайно медленно


Я реализую механизм единого входа для сервера Flask, работающего на Ubuntu 16.04, который проверяет подлинность пользователей на сервере Active Directory в домене Windows.

Когда я запускаю пример приложения из https://github.com/mkomitee/flask-kerberos/tree/master/example на сервере Flask я могу получить доступ к серверу Flask с клиентского компьютера, который вошел в систему, сервер правильно согласовывает доступ и возвращает имя вошедшего пользователя. Однако это очень важно. медленно, около двух минут.

Следуя шагам того, что происходит в flask-kerberos, я обнаружил, что процесс останавливается на authGSSServerInit Шаг . Я могу воспроизвести поведение, используя следующую минимальную программу:

import kerberos
rc, state = kerberos.authGSSServerInit("HTTP@flaskserver.mydomain.local")

Инициализация завершается успешно, но снова занимает около двух минут.

Я успешно зарегистрировал Service principal (HTTP/flaskserver.mydomain.local) на сервере AD и экспортировал keytab на сервер Flask. Я могу получить билет, дающий билет на фляжку. сервер, использующий kinit -k HTTP/flaskserver.mydomain.local. Я также могу проверить пароли в Python, используя библиотеку kerberos:

import kerberos
kerberos.checkPassword('username', 'password', 'HTTP/flaskserver.mydomain.local', 'MYDOMAIN.LOCAL'

Это работает правильно и почти мгновенно.

Что может быть причиной задержки запуска kerberos.authGSSServerInit? Как мне это отладить?

1 3

1 ответ:

Задержка была вызвана неудачным обратным поиском DNS для имени хоста. host flaskserver Правильно вернул IP, но host <ip-of-flaskserver> вернул a Host <ip-of-flaskserver>.in-addr.arpa not found: 2(SERVFAIL).

Как описано в https://web.mit.edu/kerberos/krb5-1.13/doc/admin/princ_dns.html , отключение обратного поиска DNS в krb5.conf решило проблему:

[libdefaults]
    rdns = false