Пользователя не пускает на сервер под доменной учётной записью на сервер Linux по SSH с ошибкой:
Access deny
Active Directory аутентификация в Linux может быть настроена разными способами. Сразу скажу, что здесь рассматривается частный случай одного Linux сервера, который каким-то образом настроен на AD аутентификацию. Причём проблема оказалась не в AD.
Первая мысль: что-то не так с учётной записью в AD. Linux — он же стабильный, что в нём может сломаться? А винда дырявая...
Проверил контроллеры домена, нигде в логах нет неуспешной аутентификации. Все аутентификации на месте, но они успешны. Учётная запись pupkin не заблокирована. Полезем в Linux на машину, к которой у пользователя нет доступа по SSH.
В логах auth.log имеется:
sshd[9867]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.11.12.13 user=pupkin
sshd[9867]: pam_krb5(sshd:auth): user pupkin authenticated as pupkin@DOMAIN.LOCAL
sshd[9867]: pam_tally2(sshd:auth): user pupkin (10060) tally 23, deny 5
sshd[9714]: error: PAM: Authentication failure for pupkin from 10.11.12.13Первая строка, собственное, меня и смутила. Из-за надписи "authentication failure" я почему-то полез проверять саму учётную запись, однако, нужно было смотреть дальше.
Смотрим на строку:
sshd[9867]: pam_krb5(sshd:auth): user pupkin authenticated as pupkin@DOMAIN.LOCALПользователь pupkin успешно аутентифицировался в домене DOMAIN.LOCAL. Можно было на контроллер и не смотреть. Kerberos аутентификация УСПЕШНА.
Смотрим дальше:
pam_tally2(sshd:auth): user pupkin (10060) tally 23, deny 5И здесь всё становится понятно. Учетная запись ЗАБЛОКИРОВАНА из-за превышения лимита неудачных попыток входа.
- Счетчик неудачных попыток: 23
- Лимит блокировки: 5 попыток
sshd[9714]: error: PAM: Authentication failure for pupkin from 10.11.12.13Итоговый отказ в доступе. Учетная запись pupkin заблокирована модулем pam_tally2 несмотря на успешную Kerberos-аутентификацию.
Что сделать?
Разблокировать учетную запись:
# Сбросить счетчик неудачных попыток
pam_tally2 --user pupkin --reset
# Или в некоторых системах:
faillock --user pupkin --resetПроверить текущий статус:
# Посмотреть счетчик блокировок
pam_tally2 --user pupkin
# Или
faillock --user pupkinПроверить настройки PAM. Посмотрите конфигурацию /etc/pam.d/sshd:
grep -A5 -B5 pam_tally2 /etc/pam.d/sshdДля предотвращения в будущем:
- Рассмотреть увеличение лимита deny в настройках pam_tally2
- Проверить, почему происходят множественные неудачные попытки
- Убедиться, что клиенты правильно настроены для Kerberos-аутентификации
pam_tally2.so
pam_tally2 — это модуль PAM (Pluggable Authentication Modules), который отслеживает количество неудачных попыток аутентификации и может блокировать учетные записи при превышении лимита, что предотвращает brute-force атаки.
В более новых системах рекомендуется использовать модуль
pam_faillock.
Конфигурация pam_tally2
В /etc/pam.d/sshd или /etc/pam.d/system-auth:
# Добавить для учета неудачных попыток
auth required pam_tally2.so onerr=fail deny=5 unlock_time=300
# Обнулить счетчик при успешном входе
account required pam_tally2.soОсновные параметры:
- deny=N - количество неудачных попыток до блокировки (по умолчанию 3)
- unlock_time=N - время блокировки в секундах (0 = навсегда)
- onerr=fail|succeed - поведение при ошибках модуля
- no_lock_time - не показывать время разблокировки
- magic_root - не учитывать попытки от root
- even_deny_root - блокировать и root тоже
- root_unlock_time=N - время блокировки для root
Неудачные попытки входа можно смотреть в файле /var/log/faillock (или /var/log/tallylog).
Команды управления
Просмотр статистики:
# Показать счетчики для всех пользователей
pam_tally2
# Для конкретного пользователя
pam_tally2 --user username
# Подробный вывод
pam_tally2 --user username --verbose
# Для конкретного пользователя faillock
faillock --user usernameСброс счетчика:
# Разблокировать пользователя
pam_tally2 --user username --reset
# Сбросить все счетчики
pam_tally2 --reset
# Сброс faillock
faillock --user username --resetПроверка файла базы данных:
# Просмотр бинарного файла (если используется)
faillock --user username
# или в некоторых системах
pam_tally2 --user username --file /var/log/faillock