Pam faillock: различия между версиями

Материал из ALT Linux Wiki
(Создание страницы, посвященной настройке модуля pam_faillock)
 
Нет описания правки
 
(не показаны 3 промежуточные версии 2 участников)
Строка 1: Строка 1:
{{Stub}}
{{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'').


{{DISPLAYTITLE:pam_faillock}}
Подробнее об этих и других существующих параметрах детально можно почитать в 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>


__TOC__
Каждая строка содержит одну неудачную попытку входа в систему. Где:
* When — время попытки входа в систему;
* Type — тип попытки входа в систему (TTY — вход в систему из оболочки TTY, RHOST — удалённый вход в систему, например, через SSH);
* Source — источник попытки (для локальных попыток это обычно будет pts/0, для псевдотерминала — 0, а для удаленных попыток — IP-адрес);
* Valid — отображается либо V (valid), либо I (invalid). Данное значение показывает, засчитывается ли попытка блокировки учетной записи. Например, попытка старше, чем fail_interval, будет помечена как недействительная.


PAM-модуль<ref name="pam" />, блокирующий возможность аутентификации пользователя (если очень нужно, то даже root'а), на основании заранее определённого количества неудачных попыток входа.
Вывести неудачные попытки входа конкретного пользователя:
<syntaxhighlight lang="bash"># faillock --user user
user:
When                Type  Source                                          Valid
2023-06-20 09:52:49 TTY  /dev/tty2                                            V</syntaxhighlight>


=== Настройка ===
Сбросить записи об ошибках указанного пользователя:
Настройка модуля производится через редактирование файла /etc/security/failock<ref name="man faillock.conf" />.
<syntaxhighlight lang="bash"># faillock --user user --reset</syntaxhighlight>


Основные опции, используемые в файле:
Сбросить записи об ошибках всех пользователей:
* deny - количество неудачных попыток входа, после которых возможность аутентификации будет заблокирована (значение по умолчанию 3);
<syntaxhighlight lang="bash"># faillock --reset</syntaxhighlight>
* unlock_time - интервал времени, по истечении которого возможность аутентификации, заблокированная в результате неудачных попыток входа, будет разблокирована


Не основные опции:
{{Note|Разблокировать пользователя также можно, удалив файл, который faillock использует для отслеживания неуспешых попыток входа пользователя:
* local_users_only - модуль применяется только для локальных пользователей, существующих в файле /etc/passwd (во избежание возможных проблем с централизованными средствами аутентификации: AD,IdM, LDAP, и т.д)
<syntaxhighlight lang="bash"># ls -l /var/run/faillock/
* audit
итого 8
* silent
-rw-rw---- 1 test root 192 июн 20 10:16 test
* even_deny_root
-rw-rw---- 1 user root  64 июн 20 10:16 user</syntaxhighlight>}}
* root_unlock_time


=== Примечания ===
== Примечания ==
<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>
Строка 28: Строка 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.
Примечание: Использование модуля в режиме preauth без параметра silent или с обязательным полем control приводит к утечке информации о существовании или отсутствии учётной записи пользователя в системе, т.к. сбои не регистрируются для неизвестных пользователей. Сообщение о блокировке учётной записи пользователя никогда не отображается для несуществующих учетных записей пользователей, позволяя злоумышленнику сделать вывод, что конкретная учетная запись не существует в системе.


Примеры конфигурации

Ниже рассмотрены примеры включения модуля 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
Примечание: Разблокировать пользователя также можно, удалив файл, который faillock использует для отслеживания неуспешых попыток входа пользователя:
# 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


Примечания