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

Блокировка учетной записи pam_tally2 или pam_faillock с помощью ssh

Я использую RHEL 6.2. Большинство пользователей будут использовать SSH для входа с паролями. У некоторых могут быть ключи. Все аккаунты локальные.

Мне нужно заблокировать пользователей после N неудачных попыток ввода пароля.

Примеры в man pam_tally2 и pam_faillock не блокируйте пользователя с помощью ssh out. В pam_tally2 Пример может заблокировать вход через Telnet (я включил для тестирования) и впоследствии заблокирует пользователя ssh. ssh не может его вызвать.

/etc/ssh/sshd_config имеет:

PasswordAuthentication yes # setting to no doesn't allow login with a password!
UsePAM yes
UseLogin no # setting to yes doesn't allow putty logins

Примеры страниц руководства должны работать в неизмененной системе.

Если вы включите PasswordAuthentication тогда демон SSH обрабатывает пароли самостоятельно и не использует PAM. На самом деле вы хотите отключить это, чтобы заставить его использовать PAM:

PasswordAuthentication no
UsePAM yes
ChallengeResponseAuthentication yes

Однако это не поймает пользователей, использующих ключи (хотя лично я думаю, что это нормально). Если вы это сделаете, вам, вероятно, придется использовать что-то вроде fail2ban который ищет ошибки аутентификации в журналах и добавляет правила iptables для блокировки будущих попыток.

Вам нужно будет добавить следующие строки в /etc/pam.d/sshd:

auth       required     pam_tally2.so deny=6 onerr=fail unlock_time=1800
account    required     pam_tally2.so

Добавьте их в строки 3 и 6, как показано ниже:

#%PAM-1.0
auth       required     pam_sepermit.so
auth       required     pam_tally2.so deny=6 onerr=fail unlock_time=1800
auth       include      password-auth
account    required     pam_nologin.so
account    required     pam_tally2.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      password-auth

Также убедитесь UsePAM yes установлен в /etc/ssh/sshd_config

Это заблокирует пользователя ssh на 30 минут после шести неудачных попыток аутентификации.


Если мы будем следовать официальное руководство по безопасности RHEL 6, мы можем сделать это, не меняя /etc/pam.d/sshd.

Мы редактируем оба /etc/pam.d/system-auth и /etc/pam.d/password-auth, заменяя

auth        sufficient     pam_unix.so nullok try_first_pass

с участием

auth        required       pam_faillock.so preauth silent audit deny=3 unlock_time=600
auth        sufficient     pam_unix.so nullok try_first_pass
auth        [default=die]  pam_faillock.so authfail audit deny=3 unlock_time=600

И в обоих файлах мы добавляем эту строку в верхнюю часть раздела «аккаунт»:

account     required      pam_faillock.so

Это обеспечит функциональность блокировки учетной записи для пользователей консоли, пользователей заставок и т. Д.

Если вы изучите /etc/pam.d/sshd вы можете видеть, что он использует password-auth и поэтому пользователи ssh будут испытывать ту же функцию блокировки.

Мне пришлось отредактировать '/etc/pam.d/sshd'

с участием

Требуется авторизация pam_tally2.so Deny = 5 Unlock_time = 1200 Even_deny_root Root_unlock_time = 10

и теперь это работает.

Несоответствие в поведении unlock_time в pam_faillock по сравнению с pam_tally. (unlock_time не смещается в соответствии с последней неудачной попыткой) Настройте pam_faillock в system-auth и password-auth с deny = 3 и unlock_time = 300. Теперь попробуйте войти в систему с любым пользователем без полномочий root и введите неверный пароль 3 раза, после чего учетная запись блокируется, как и ожидалось, допустим, текущее время - 13:00 Учетная запись будет заблокирована, и вы не сможете войти в систему с правильным паролем до 13:05. Если пользователь снова попытается войти в систему в 13:02, система откажется, поскольку учетная запись заблокирована. Для того же сценария, в случае pam_tally, когда пользователь пытается войти в систему в 13:02, пользователь будет разблокирован только после 13:07 вместо 13:05. unlock_time смещается после неудачной попытки и настраивается здесь.