pam_faillock
pam_faillock — PAM-модуль[1], блокирующий возможность аутентификации пользователя (если очень нужно, то даже root'а), на основании заранее определённого количества неудачных попыток входа.
Настройка
Настройка модуля может производиться через редактирование файла /etc/security/faillock.conf:
…
deny=3
unlock_time=60
…
Эти же параметры можно передать и непосредственно в pam-файле:
…
auth requisite pam_faillock.so preauth deny=3 unlock_time=60
…
Основные параметры:
- dir — каталог, в котором хранятся пользовательские файлы с записями об ошибках аутентификации (по умолчанию /var/run/faillock;
- audit — записать в системный журнал имя пользователя, если данного пользователя не существует в системе;
- silent — не выводить информационные сообщения (не будет уведомлять пользователя о блокировке учётной записи и времени блокировки);
- no_log_info — не регистрировать информативные сообщения в системном журнале;
- local_users_only — включение данной опции в файл означает, что модуль будет применяться только для локальных пользователей, существующих в файле /etc/passwd (во избежание возможных проблем с централизованными средствами аутентификации: AD,IdM, LDAP, и т.д, у которых могут быть свои методы ограничения доступа к аутентификации);
- deny — количество неудачных попыток входа, после которых возможность аутентификации будет заблокирована (по умолчанию 3);
- fail_interval — интервал времени (в секундах), в течение которого должны произойти последовательные сбои аутентификации для блокировки учетной записи пользователя (по умолчанию 900 — 15 минут);
- unlock_time — интервал времени (в секундах), в течении которого возможность аутентификации для пользователя, превысившего количество попыток входа, будет заблокирована (по умолчанию 600 — 10 минут);
- even_deny_root — блокировать учётную запись root так же, как и обычные учетные записи;
- root_unlock_time — работает аналогично unlock_time. Применяется по отношению к пользователю root, используется совместно с even_deny_root;
- admin_group — члены группы, указанной в данном параметре, будут обрабатываться этим модулем так же, как и учетная запись root (к ним будут применяться опции even_deny_root и root_unlock_time).
Подробнее об этих и других существующих параметрах детально можно почитать в man faillock.conf[2].
Включение модуля в подсистеме PAM
Использование:
auth ... pam_faillock.so {preauth|authfail|authsucc} [dir=/path/to/tally-directory] [even_deny_root] [deny=n] [fail_interval=n] [unlock_time=n] [root_unlock_time=n] [audit] [silent] [no_log_info]
account ... pam_faillock.so [dir=/path/to/tally-directory] [no_log_info]
Аргумент {preauth|authfail|authsucc} должен быть установлен в соответствии с положением этого экземпляра модуля в стеке PAM:
- preauth — должен использоваться, если модуль вызывается перед модулями, которые запрашивают учётные данные пользователя, такие как пароль. Модуль проверяет, заблокирован ли пользователь в случае, если в последнее время было аномальное количество неудачных последовательных попыток аутентификации. Этот вызов является необязательным, если используется authsucc;
- authfail — должен использоваться, если модуль вызывается после сбоя модулей, определяющих результат аутентификации. Если пользователь ещё не заблокирован из-за предыдущих сбоев аутентификации, модуль запишет сбой в соответствующий файл с записями об ошибках;
- authsucc — должен использоваться, если модуль вызывается после успешного завершения модулей, определяющих результат аутентификации. Если пользователь ещё не заблокирован из-за предыдущих сбоев аутентификации, модуль удалит запись об ошибках в соответствующем файле с записями об ошибках. В противном случае он вернёт ошибку аутентификации. Если этот вызов не выполнен, pam_faillock не будет различать последовательные и непоследовательные неудачные попытки аутентификации. В таком случае необходимо использовать вызов preauth. Из-за сложности настройки стека PAM также можно вызвать pam_faillock в модуле account. В этом случае также должен вызываться preauth.
Примеры конфигурации
Ниже рассмотрены примеры включения модуля pam_faillock в файле /etc/pam.d/system-auth-local-only. pam_faillock будет блокировать учётную запись после 4 последовательных неудачных входов в систему в течение 5 минут. Аккаунты будут автоматически разблокированы через 15 минут (по умолчанию).
Модуль вызывается только на этапе auth:
auth requisite pam_faillock.so preauth deny=4 unlock_time=300
auth [success=1 default=bad] pam_tcb.so shadow fork nullok
auth [default=die] pam_faillock.so authfail deny=4 unlock_time=300
auth sufficient pam_faillock.so authsucc deny=4 unlock_time=300
account required pam_tcb.so shadow fork
password required pam_passwdqc.so config=/etc/passwdqc.conf
password required pam_tcb.so use_authtok shadow fork nullok write_to=tcb
session required pam_tcb.so
Вызов preauth сообщает пользователю, что его вход в систему заблокирован модулем, а также отменяет аутентификацию, даже не запрашивая пароль:
kwork login: user
The account is locked due to 3 failed logins.
(4 minutes left to unlock)
Login incorrect
login:
Если убрать вызов preauth, модуль не будет выводить никакой информации о блокировке учётной записи:
kwork login: user
Password:
Login incorrect
login:
Модуль вызывается как на этапе auth, так и на этапе account:
auth requisite pam_faillock.so preauth deny=4 unlock_time=300
auth sufficient pam_tcb.so shadow fork nullok
auth [default=die] pam_faillock.so authfail deny=4 unlock_time=300
account required pam_faillock.so
account required pam_tcb.so shadow fork
password required pam_passwdqc.so config=/etc/passwdqc.conf
password required pam_tcb.so use_authtok shadow fork nullok write_to=tcb
session required pam_tcb.so
Если убрать вызов pam_faillock.so на этапе account, блокировка пользователя будет выполнена также при непоследовательных ошибках аутентификации.
Утилита faillock
faillock — приложение, которое можно использовать для проверки и изменения содержимого файлов записей об ошибках аутентификации. Утилита позволяет отображать последние неудачные попытки аутентификации пользователя или очищать файлы записей об ошибках аутентификации всех или отдельных пользователей.
Использование:
faillock [--dir <путь к каталогу>] [--user <имя пользователя>] [--reset]
Где:
- --dir <путь к каталогу> — каталог, в котором хранятся пользовательские файлы с записями об ошибках (по умолчанию /var/run/faillock);
- --user <имя пользователя> — пользователь, чьи записи об ошибках должны отображаться или очищаться;
- --reset — сбросить неудачные попытки.
Запуск faillock без аргументов позволяет просмотреть количество неуспешных попыток входа в систему всех пользователей:
# faillock
test:
When Type Source Valid
2023-06-20 09:32:20 TTY /dev/tty2 V
2023-06-20 09:21:39 TTY /dev/tty2 I
2023-06-20 09:21:50 TTY /dev/tty2 I
user:
When Type Source Valid
2023-06-20 09:08:16 SVC sddm V
2023-06-20 09:08:23 RHOST 192.168.0.107 V
Каждая строка содержит одну неудачную попытку входа в систему. Где:
- When — время попытки входа в систему;
- Type — тип попытки входа в систему (TTY — вход в систему из оболочки TTY, RHOST — удалённый вход в систему, например, через SSH);
- Source — источник попытки (для локальных попыток это обычно будет pts/0, для псевдотерминала — 0, а для удаленных попыток — IP-адрес);
- Valid — отображается либо V (valid), либо I (invalid). Данное значение показывает, засчитывается ли попытка блокировки учетной записи. Например, попытка старше, чем fail_interval, будет помечена как недействительная.
Вывести неудачные попытки входа конкретного пользователя:
# faillock --user user
user:
When Type Source Valid
2023-06-20 09:52:49 TTY /dev/tty2 V
Сбросить записи об ошибках указанного пользователя:
# faillock --user user --reset
Сбросить записи об ошибках всех пользователей:
# faillock --reset
# ls -l /var/run/faillock/
итого 8
-rw-rw---- 1 test root 192 июн 20 10:16 test
-rw-rw---- 1 user root 64 июн 20 10:16 user