Как использовать PAM для управления политикой блокировки для методов аутентификации с открытым ключом SSH

Как использовать PAM для управления политикой блокировки для методов аутентификации с открытым ключом SSH

Я следовал инструкциям на redhat о том, как усилить аутентификацию на сервере linux, но мы используем только SSH с аутентификацией по открытому ключу. Согласно этим инструкциям: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/chap-hardening_your_system_with_tools_and_services

Вот мои файлы /etc/pam.d/system-auth и /etc/pam.d/password-auth, на самом деле они оба одинаковы:

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        required      pam_faildelay.so delay=2000000
auth        required      pam_faillock.so preauth silent audit deny=3 even_deny_root unlock_time=60
auth        sufficient    pam_unix.so nullok try_first_pass
auth        [default=die] pam_faillock.so authfail audit deny=3 even_deny_root unlock_time=60
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        required      pam_deny.so

account     required      pam_faillock.so
account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so

С помощью этой конфигурации я надеялся получить какое-то сообщение о блокировке, если пользователь попытается пройти аутентификацию с неправильным ключом после 3 попыток, например. Но сообщение о блокировке не появляется, и у меня нет возможности узнать, работает политика блокировки или нет. Есть также модуль pam_tally2, но я не вижу, в чем разница между ним и модулем pam_faillock.

В журналах ничего не отображается, кроме того, что отказано в праве root:

[some_user@ip-10-10-2-53 ~]$ cat /var/run/faillock/some_user
[some_user@ip-10-10-2-53 ~]$ cat /var/run/faillock/root 
cat: /var/run/faillock/root: Permission denied

И я попытался использовать неправильный ключ для ssh для some_user, и, похоже, это не заблокировало меня, потому что я не вижу ничего в журналах блокировки или каких-либо сообщений ssh ​​от того места, где я пытаюсь подключиться к ssh.

решение1

Проблема в том, что вы пытаетесь реализовать эти политики внутри стека аутентификации.

auth        required      pam_env.so
auth        required      pam_faildelay.so delay=2000000
auth        required      pam_faillock.so preauth silent audit deny=3 even_deny_root unlock_time=60
auth        sufficient    pam_unix.so nullok try_first_pass
auth        [default=die] pam_faillock.so authfail audit deny=3 even_deny_root unlock_time=60
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        required      pam_deny.so

account     required      pam_faillock.so
account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so

Аутентификация с открытым ключом, реализованная в самом демоне SSH, обходит стек аутентификации. (нет модуля аутентификации PAM, вызываемого для проверки отправленного ключа, поэтому он должен работать таким образом). Единственное исключение — когда вы запускаете настраиваемую конфигурацию, которая также требует успеха внутри keyboard-interactive. Поскольку это не значение по умолчанию, ваш стек аутентификации почти наверняка игнорируется во время этих аутентификаций.

В то время как accountстекобычногде вы устанавливаете ограничения на входы только с открытым ключом, я не думаю, что это сработает здесь, поскольку вам сначала нужно будет успешно пройти аутентификацию, чтобы вызвать модуль PAM. Если ваш модуль PAM не вызывается, он не сможет увеличивать счетчик с каждым неудачным входом.

Единственный способ, которым я могу это реализовать, — это настроить конфигурацию sshd так, чтобы она требовала интерактивной аутентификации с помощью клавиатуры.в дополнение кАутентификация с открытым ключом. (Вы можете использоватьэтот вопрос и ответ(в качестве отправной точки) Тем не менее, как отмечает JohnA, вопрос о том, действительно ли это будет иметь какую-либо ценность, остается спорным.

решение2

Я почти уверен, что вы не сможете использовать PAM в этом качестве. Если у пользователя нет закрытого ключа ssh, соответствующего открытому ключу ssh на сервере, то он не сможет пройти аутентификацию.

Целью блокировки отказа пароля является предотвращение подбора пароля к учетной записи пользователя. Если применяется аутентификация по ключу ssh, то нет пароля учетной записи пользователя, который нужно учитывать.

В случае пароля, который запрашивается для ssh key auth, это пароль для закрытого ключа. Неудача аутентификации по закрытому ключу не приводит к какой-либо ошибке аутентификации на сервере.

Связанный контент