Intereting Posts

Вход в дистрибутив GNU / Linux занимает слишком много времени

Так,

Когда я пытаюсь войти с моим именем пользователя и паролем (в tty) и вставить неправильный пароль, мне нужно подождать около 5 секунд, чтобы система сообщила мне, что пароль неправильный.

Почему процесс проверки длится так долго?

Отличие GNU / Linux: Archlinux.

Добавив немного исторической перспективы, идея спать после плохого пароля не просто найдена в системах на базе PAM. Это очень старый. Для eaxmple в источнике входа 4.4BSD вы найдете этот вкусный фрагмент:

/* we allow 10 tries, but after 3 we start backing off */ if (++cnt > 3) { if (cnt >= 10) { badlogin(username); sleepexit(1); } sleep((u_int)((cnt - 3) * 5)); } 

поэтому первые 3 отказа бесплатны, следующие 7 имеют увеличенные задержки (5 секунд, 10 секунд, 15 секунд …), а после 10 он делает sleepexit(1) который представляет собой 5- sleepexit(1) задержку, за которой следует exit(1) ,

Сны просто раздражают, когда вы вводите пароль на консоли, но они важны, когда вход поступает от удаленного пользователя, который мог бы автоматизировать процесс.

sleepexit после 10 неудач заслуживает особого объяснения. После login , getty просто печатает другое приглашение для входа в систему и снова запускает цикл. Так зачем спать и уходить, а не просто спать? Потому что, когда эта функция была введена, вход через dialup был обычным явлением. (Примечание для людей, которые никогда не использовали модем до 1995 года: я сказал, что логин по dialup, а не PPP или другой пакетный протокол по dialup. Вы набрали номер в эмуляторе терминала и получили приглашение для входа.)

В мире коммутируемого доступа любой может просто набрать ваш номер и начать бросать в него пароли, поэтому процесс login в login вышел из-за нескольких плохих паролей, в результате чего соединение модема прекратилось, заставив их повторить набор, прежде чем они смогут попробовать больше паролей. Тот же принцип применяется к ssh сегодня (опция конфигурации MaxAuthTries ), но он был более эффективным в старые времена, поскольку набор модема был довольно медленным, чем рукопожатие TCP.

См. Этот ответ в StackOverflow, который цитирует Руководство для авторов модулей Linux-PAM :

В соответствии с этим файлом один из нескольких модулей может не выполнить вызов pam _… (), чтобы вернуть ошибку. Желательно, чтобы там также была пауза до того, как приложение продолжится. Основной причиной такой задержки является безопасность: задержка действует, чтобы в первую очередь отговаривать словаря грубой силы, но также помогает помешать атакам тайного (скрытого канала).

Функция pam_fail_delay () обеспечивает механизм, с помощью которого приложение или модуль могут предложить минимальную задержку (микросекунды micro_sec). Linux-PAM сохраняет рекордное время, запрошенное с помощью этой функции. Если pam_authenticate () не работает, неудачный возврат к приложению задерживается на количество времени, случайно распределенного (до 25%) об этом самом длинном значении.

Независимо от успеха, время задержки сбрасывается до нулевого значения по умолчанию, когда Linux-PAM возвращает управление приложению.

Как и другие, PAM, скорее всего, является причиной этого. Фактическая проверка пароля занимает очень короткое время, остальное – это задержка, предназначенная для предотвращения нападений с использованием грубой силы. В Debian у меня есть следующие строки в /etc/pam.d/login :

 # Enforce a minimal delay in case of failure (in microseconds). # (Replaces the `FAIL_DELAY' setting from login.defs) # Note that other modules may require another minimal delay. (for example, # to disable any delay, you should add the nodelay option to pam_unix) auth optional pam_faildelay.so delay=3000000 

Если 5-секундная задержка слишком длинная (наверняка придется ждать этого времени, если вы спешите, может показаться, что она слишком длинная), вы всегда можете сократить время, ища эквивалентный файл в вашей системе. Если у вас нет PAM, как говорится в комментарии в вышеприведенном фрагменте, вы можете посмотреть в FAIL_DELAY значение FAIL_DELAY .

Я сам не использую Archlinux, поэтому я не знаю точно, но это звучит как механизм против угадывания пароля грубой силы.