Я использую 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 смещается после неудачной попытки и настраивается здесь.