Назад | Перейти на главную страницу

Вход в систему занимает много времени

После обновления до Debian 7.4 парольная аутентификация из любой службы займет много времени. Это верно для входа по SSH, sudo'ing и аутентификации с dovecot (который настроен на использование PAM).

Я могу выполнить обратный поиск записей DNS, похоже, это не проблема. Такое ощущение, что у какого-то механизма аутентификации истекло время ожидания. Я попытался включить pam_debug, но не вижу каких-либо выводов отладки.

Вот пример того, сколько времени требуется для выполнения sudo (с запросом пароля, когда sudo кэширует пароль, он работает мгновенно):

ceicke@h1633420:~$ time sudo who
[sudo] password for ceicke:
ceicke   pts/0        2014-08-01 09:19 (80.131.XXX.XXX)

real    0m27.976s
user    0m0.009s
sys 0m0.014s

Также мгновенно работает SSHing в ящик с моим закрытым ключом. Так что действительно процесс проверки пароля занимает много времени.

Я немного не понимаю, что еще я могу попробовать, тем более что модуль PAM очень молчит о том, что он делает.

Обновление # 1

Вот результат работы strace: http://pastebin.com/dRvqsrcd

Есть много звонков time(null) который, я думаю, получает текущую временную метку Unix. Похоже, что-то активно проверяет тайм-аут.

Я замечаю две вещи:

  1. в time(null) звонку часто предшествует открытый звонок /dev/urandom, неужели мой сервер ожидает накопления достаточной энтропии?
  2. есть много ссылок на krb5 в разных местах. Я не использую Kerberos для аутентификации, могу я просто вынуть pam_krb5.so из моих конфигов pam?

У меня нет большого опыта подготовки вывода strace, может быть, вы сможете увидеть больше?

Обновление # 2

Энтропия на сервере довольно низкая, от 100 до 200.

Мой первый совет тоже попробовать strace -f sudo who. Но это не сработает, поскольку strace не отслеживает программы SUID. Вы должны прикрепиться к своей оболочке, используя strace так как корень а потом позвони sudo.

В вашем типе оболочки

$ echo $$

чтобы получить PID вашей оболочки. Затем откройте другой терминал и станьте пользователем root в этом терминале. Там вы вводите

# strace -f -t -T -p $pid -o /tmp/sudo.strace

где $pid PID, который вы получили от другого терминала. Затем вернитесь к своему первому терминалу и запустите

$ sudo who

После того, как вы получили результат, вернитесь в корневой терминал, остановите процесс strace с помощью CTRL-C и проанализируйте /tmp/sudo.strace

Обновить: Извините, я забыл упомянуть два варианта strace. С участием -t он ставит перед каждой строкой время дня и -T показывает время, затраченное на системные вызовы. Это облегчает поиск точки, в которой он становится медленным.

Обновление 2: Учитывая, что вам не нужен Kerberos, можно отключить pam_krb5. Вы можете прокомментировать это в файлах в /etc/pam.d/, обычно в файлах с именами * common - **. Kerberos нужна некоторая энтропия, и это может быть виновником. Но тем не менее проверьте это предположение, запустив strace с участием -t.

И ты должен Изменить пароль, поскольку он доступен для чтения в текстовом файле, который вы загрузили в pastebin.

Итак, выяснилось, что проблема была вызвана Kerberos в сочетании с низкой энтропией. Поскольку я не использовал Kerberos, я запустил pam-auth-update и невыбранный Kerberos.