Pam faillock: различия между версиями
Bne (обсуждение | вклад) |
Нет описания правки |
||
(не показана 1 промежуточная версия 1 участника) | |||
Строка 1: | Строка 1: | ||
{{ | {{DISPLAYTITLE:pam_faillock}} | ||
pam_faillock — PAM-модуль<ref name="pam" />, блокирующий возможность аутентификации пользователя (если очень нужно, то даже root'а), на основании заранее определённого количества неудачных попыток входа. | |||
== Настройка == | |||
Настройка модуля может производиться через редактирование файла {{path|/etc/security/faillock.conf}}: | |||
<syntaxhighlight lang="ini"> | |||
… | |||
deny=3 | |||
unlock_time=60 | |||
… | |||
</syntaxhighlight> | |||
Эти же параметры можно передать и непосредственно в pam-файле: | |||
<syntaxhighlight lang="ini"> | |||
… | |||
auth requisite pam_faillock.so preauth deny=3 unlock_time=60 | |||
…</syntaxhighlight> | |||
Основные параметры: | |||
* dir — каталог, в котором хранятся пользовательские файлы с записями об ошибках аутентификации (по умолчанию {{path|/var/run/faillock}}; | |||
* audit — записать в системный журнал имя пользователя, если данного пользователя не существует в системе; | |||
* silent — не выводить информационные сообщения (не будет уведомлять пользователя о блокировке учётной записи и времени блокировки); | |||
* no_log_info — не регистрировать информативные сообщения в системном журнале; | |||
* local_users_only — включение данной опции в файл означает, что модуль будет применяться только для локальных пользователей, существующих в файле {{path|/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<ref name="man faillock.conf" />. | |||
== Включение модуля в подсистеме PAM == | |||
Использование: | |||
<syntaxhighlight lang="bash"> | |||
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]</syntaxhighlight> | ||
Аргумент {preauth|authfail|authsucc} должен быть установлен в соответствии с положением этого экземпляра модуля в стеке PAM: | |||
* preauth — должен использоваться, если модуль вызывается перед модулями, которые запрашивают учётные данные пользователя, такие как пароль. Модуль проверяет, заблокирован ли пользователь в случае, если в последнее время было аномальное количество неудачных последовательных попыток аутентификации. Этот вызов является необязательным, если используется ''authsucc''; | |||
* authfail — должен использоваться, если модуль вызывается после сбоя модулей, определяющих результат аутентификации. Если пользователь ещё не заблокирован из-за предыдущих сбоев аутентификации, модуль запишет сбой в соответствующий файл с записями об ошибках; | |||
* authsucc — должен использоваться, если модуль вызывается после успешного завершения модулей, определяющих результат аутентификации. Если пользователь ещё не заблокирован из-за предыдущих сбоев аутентификации, модуль удалит запись об ошибках в соответствующем файле с записями об ошибках. В противном случае он вернёт ошибку аутентификации. Если этот вызов не выполнен, pam_faillock не будет различать последовательные и непоследовательные неудачные попытки аутентификации. В таком случае необходимо использовать вызов ''preauth''. Из-за сложности настройки стека PAM также можно вызвать pam_faillock в модуле account. В этом случае также должен вызываться ''preauth''. | |||
{{Note|Использование модуля в режиме ''preauth'' без параметра ''silent'' или с обязательным полем control приводит к утечке информации о существовании или отсутствии учётной записи пользователя в системе, т.к. сбои не регистрируются для неизвестных пользователей. Сообщение о блокировке учётной записи пользователя никогда не отображается для несуществующих учетных записей пользователей, позволяя злоумышленнику сделать вывод, что конкретная учетная запись не существует в системе.}} | |||
=== Примеры конфигурации === | |||
Ниже рассмотрены примеры включения модуля pam_faillock в файле {{path|/etc/pam.d/system-auth-local-only}}. | |||
pam_faillock будет блокировать учётную запись после 4 последовательных неудачных входов в систему в течение 5 минут. Аккаунты будут автоматически разблокированы через 15 минут (по умолчанию). | |||
Модуль вызывается только на этапе auth: | |||
<syntaxhighlight lang="ini"> | |||
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</syntaxhighlight> | |||
Вызов ''preauth'' сообщает пользователю, что его вход в систему заблокирован модулем, а также отменяет аутентификацию, даже не запрашивая пароль: | |||
<syntaxhighlight lang="bash"> | |||
kwork login: user | |||
The account is locked due to 3 failed logins. | |||
(4 minutes left to unlock) | |||
Login incorrect | |||
login:</syntaxhighlight> | |||
Если убрать вызов ''preauth'', модуль не будет выводить никакой информации о блокировке учётной записи: | |||
<syntaxhighlight lang="bash"> | |||
kwork login: user | |||
Password: | |||
Login incorrect | |||
login:</syntaxhighlight> | |||
Модуль вызывается как на этапе auth, так и на этапе account: | |||
<syntaxhighlight lang="ini"> | |||
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</syntaxhighlight> | |||
Если убрать вызов pam_faillock.so на этапе account, блокировка пользователя будет выполнена также при непоследовательных ошибках аутентификации. | |||
== Утилита faillock == | |||
faillock — приложение, которое можно использовать для проверки и изменения содержимого файлов записей об ошибках аутентификации. Утилита позволяет отображать последние неудачные попытки аутентификации пользователя или очищать файлы записей об ошибках аутентификации всех или отдельных пользователей. | |||
Использование: | |||
<syntaxhighlight lang="bash">faillock [--dir <путь к каталогу>] [--user <имя пользователя>] [--reset]</syntaxhighlight> | |||
Где: | |||
* --dir <путь к каталогу> — каталог, в котором хранятся пользовательские файлы с записями об ошибках (по умолчанию {{path|/var/run/faillock}}); | |||
* --user <имя пользователя> — пользователь, чьи записи об ошибках должны отображаться или очищаться; | |||
* --reset — сбросить неудачные попытки. | |||
Запуск {{cmd|faillock}} без аргументов позволяет просмотреть количество неуспешных попыток входа в систему всех пользователей: | |||
<syntaxhighlight lang="bash"># 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</syntaxhighlight> | |||
Каждая строка содержит одну неудачную попытку входа в систему. Где: | |||
* When — время попытки входа в систему; | |||
* Type — тип попытки входа в систему (TTY — вход в систему из оболочки TTY, RHOST — удалённый вход в систему, например, через SSH); | |||
* Source — источник попытки (для локальных попыток это обычно будет pts/0, для псевдотерминала — 0, а для удаленных попыток — IP-адрес); | |||
* Valid — отображается либо V (valid), либо I (invalid). Данное значение показывает, засчитывается ли попытка блокировки учетной записи. Например, попытка старше, чем fail_interval, будет помечена как недействительная. | |||
Вывести неудачные попытки входа конкретного пользователя: | |||
<syntaxhighlight lang="bash"># faillock --user user | |||
user: | |||
When Type Source Valid | |||
2023-06-20 09:52:49 TTY /dev/tty2 V</syntaxhighlight> | |||
Сбросить записи об ошибках указанного пользователя: | |||
<syntaxhighlight lang="bash"># faillock --user user --reset</syntaxhighlight> | |||
Сбросить записи об ошибках всех пользователей: | |||
<syntaxhighlight lang="bash"># faillock --reset</syntaxhighlight> | |||
= | {{Note|Разблокировать пользователя также можно, удалив файл, который faillock использует для отслеживания неуспешых попыток входа пользователя: | ||
<syntaxhighlight lang="bash"># 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</syntaxhighlight>}} | |||
== Примечания == | |||
<references> | <references> | ||
<ref name="pam">[https://fossies.org/linux/Linux-PAM/modules/pam_faillock/README Pam_faillock manual page]</ref> | <ref name="pam">[https://fossies.org/linux/Linux-PAM/modules/pam_faillock/README Pam_faillock manual page]</ref> | ||
Строка 33: | Строка 145: | ||
[[Категория:Utils]] | [[Категория:Utils]] | ||
[[Категория:PAM]] |
Текущая версия от 12:49, 20 июня 2023
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