Подробный гайд: Настроить fail_delay в Astra Linux 1.7+: PAM-модуль pam_faildelay, login.defs

Как настроить fail_delay в Astra Linux 1.7+: PAM-модуль pam_faildelay, login.defs, проверка задержки и защита от перебора паролей.

2026.10.08                  


Подробный гайд: Настроить fail_delay в Astra Linux 1.7+: PAM-модуль pam_faildelay, login.defsПодробный гайд: Настроить fail_delay в Astra Linux 1.7+: PAM-модуль pam_faildelay, login.defs

В Astra Linux под термином fail_delay обычно имеют в виду одно из двух:

  1. FAIL_DELAY в /etc/login.defs — задержка в секундах, используется частью программ входа, например классическим login.
  2. pam_faildelay.so в PAM — задержка после неудачной аутентификации через PAM. Это более универсальный способ, так как через PAM обычно работают login, su, sudo, sshd, графические менеджеры входа и другие сервисы.



Для защиты от перебора паролей лучше использовать PAM-модуль pam_faildelay.so, а FAIL_DELAY в /etc/login.defs можно оставить как дополнительный параметр, но затем проверить, что задержки не суммируются.


Важно перед началом

Неверная правка PAM может привести к тому, что вход в систему станет невозможным. Поэтому:

  1. Работайте в сессии с правами администратора.
  2. Не закрывайте текущую рабочую сессию, пока не проверите вход в другом терминале.
  3. Сделайте резервные копии изменяемых файлов.
  4. Сначала тестируйте на тестовом пользователе, а не на root.

0. Резервное копирование и диагностика

Сделайте резервные копии:

sudo mkdir -p /root/pam-backup
sudo cp -a /etc/pam.d/common-auth /root/pam-backup/common-auth.$(date +%Y-%m-%d_%H-%M-%S)
sudo cp -a /etc/login.defs /root/pam-backup/login.defs.$(date +%Y-%m-%d_%H-%M-%S)

Проверьте текущие настройки:

grep -RIn 'pam_faildelay' /etc/pam.d /usr/share/pam-configs 2>/dev/null
grep -E '^[[:space:]]*FAIL_DELAY' /etc/login.defs

Проверьте наличие модуля:

ls -l /lib/*/security/pam_faildelay.so* 2>/dev/null

Если модуль не найден, обычно он входит в пакет libpam-modules:

sudo apt update
sudo apt install libpam-modules

В сертифицированных или изолированных средах лучше использовать пакеты из официальных репозиториев или установочного носителя.


Способ 1. Настройка задержки через PAM-модуль pam_faildelay.so

Это рекомендуемый способ для Astra Linux 1.7 и новее.


1.1. Открыть файл /etc/pam.d/common-auth

В большинстве конфигураций Astra Linux используется файл:

/etc/pam.d/common-auth

Откройте его:

sudoedit /etc/pam.d/common-auth

Если в вашей системе вместо common-auth используется system-auth, проверьте это:

grep -RIn 'common-auth\|system-auth' /etc/pam.d

1.2. Добавить строку с pam_faildelay.so

В начало блока auth добавьте строку:

auth    optional    pam_faildelay.so    delay=3000000

Значение delay указывается в микросекундах.


Примеры:

Значение Реальная задержка
1000000 1 секунда
2000000 2 секунды
3000000 3 секунды
5000000 5 секунд
10000000 10 секунд

Для большинства систем разумно начинать с 3–5 секунд.


Пример начала файла /etc/pam.d/common-auth:

# /etc/pam.d/common-auth

auth    optional        pam_faildelay.so    delay=3000000
auth    [success=1 default=ignore] pam_unix.so nullok
auth    requisite       pam_deny.so
auth    required        pam_permit.so

Важно:

Строка pam_faildelay.so должна быть до основных аутентификационных модулей, например до pam_unix.so, pam_sss.so, pam_ldap.so, pam_krb5.so и подобных.


Если строка будет добавлена после pam_deny.so, она может не сработать, потому что после requisite/deny обработка может прерываться.


1.3. Сохранить файл

В sudoedit сохранение обычно:

  • для nano: Ctrl+O, затем Enter, затем Ctrl+X;
  • для vi/vim: :wq.

Права на файл должны быть корректными:

sudo chown root:root /etc/pam.d/common-auth
sudo chmod 0644 /etc/pam.d/common-auth

1.4. Проверить, что сервисы используют этот файл

Например:

grep -RIn 'include.*common-auth' /etc/pam.d

Обычно common-auth подключается в:

/etc/pam.d/login
/etc/pam.d/sshd
/etc/pam.d/sudo
/etc/pam.d/su

Если конкретный сервис не использует common-auth, то для этого сервиса задержку нужно настраивать отдельно в его файле /etc/pam.d/<service>.


Способ 2. Настройка FAIL_DELAY в /etc/login.defs

Этот параметр задается в секундах.

Откройте файл:

sudoedit /etc/login.defs

Найдите строку:

FAIL_DELAY

Установите, например:

FAIL_DELAY 3


Если строка закомментирована, раскомментируйте ее:

FAIL_DELAY 3

Если строки нет, можно добавить в конец файла:

FAIL_DELAY 3

Сохраните файл.


Проверьте:

grep -E '^[[:space:]]*FAIL_DELAY' /etc/login.defs

Важно:

FAIL_DELAY в /etc/login.defs работает не для всех сценариев. Например, для SSH важнее корректная настройка PAM. Поэтому в современных системах основной механизм лучше делать через pam_faildelay.so.


Что выбрать: FAIL_DELAY или pam_faildelay.so?

Рекомендация:

  1. Основной вариант — pam_faildelay.so в PAM.
  2. FAIL_DELAY в /etc/login.defs можно оставить как дополнительный параметр.
  3. После настройки обязательно проверить реальную задержку, чтобы не получилось двойного ожидания.

Если после включения обоих механизмов задержка стала, например, не 3 секунды, а около 6 секунд, оставьте только один механизм.


Настройка только для SSH

Если вам нужна задержка только для sshd, можно добавить строку в:

sudoedit /etc/pam.d/sshd

Пример:

auth    optional    pam_faildelay.so    delay=3000000
@include common-auth

Но если pam_faildelay.so уже добавлен в /etc/pam.d/common-auth, дублировать его в /etc/pam.d/sshd обычно не нужно. Иначе поведение может быть непредсказуемым или задержка может применяться повторно.


Проверьте, что sshd использует PAM:

sudo sshd -T | grep -i usepam

Ожидается:

usepam yes

Или проверьте конфигурацию вручную:

grep -RIn 'UsePAM' /etc/ssh/sshd_config /etc/ssh/sshd_config.d 2>/dev/null

Должно быть:

UsePAM yes

Если UsePAM no, PAM-задержка для SSH работать не будет.

После изменения конфигурации SSH можно выполнить:

sudo systemctl reload ssh

Если служба называется иначе:

sudo systemctl reload sshd

Проверка настроек

1. Создать тестового пользователя

sudo useradd -m -s /bin/bash failtest
sudo passwd failtest

Задайте пароль.


2. Проверить через su

Из непривилегированной сессии выполните:

su - failtest

Введите неправильный пароль. Оцените время задержки.


Для наглядности можно использовать:

time su - failtest

Но команда time будет полезна только если вы вводите пароль вручную.


3. Проверить через SSH

ssh failtest@127.0.0.1

Введите неправильный пароль. Должна быть задержка перед возвратом к повторному вводу.

Если пароль по SSH не запрашивается, проверьте:

grep -RIn 'PasswordAuthentication' /etc/ssh/sshd_config /etc/ssh/sshd_config.d

Для проверки парольного входа должно быть разрешено:

PasswordAuthentication yes

Или для тестирования можно использовать:

ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no failtest@127.0.0.1

4. Проверить через pamtester

Если пакет доступен:

sudo apt install pamtester

Затем:

sudo pamtester login failtest authenticate

Введите неправильный пароль и посмотрите, появилась ли задержка.

Для SSH-сервиса:

sudo pamtester sshd failtest authenticate

Будьте осторожны: если настроена блокировка после нескольких неудачных попыток, не превышайте лимит попыток.


5. Посмотреть журналы

Во время проверки откройте второй терминал и смотрите логи:

sudo tail -f /var/log/auth.log

Или:

sudo journalctl -f | grep -i pam

Там могут быть видны сообщения об ошибках аутентификации и загрузке PAM-модулей.


Если задержка не работает

1. Модуль добавлен не в тот файл

Проверьте, какой файл реально используется сервисом.

Например:

grep -RIn 'include' /etc/pam.d/login /etc/pam.d/sshd /etc/pam.d/sudo /etc/pam.d/su

Если сервис использует не common-auth, а другой файл, править нужно его.


2. Строка находится после pam_deny.so



Проверьте порядок строк в /etc/pam.d/common-auth.

Рабочий вариант:

auth    optional        pam_faildelay.so    delay=3000000
auth    [success=1 default=ignore] pam_unix.so nullok
auth    requisite       pam_deny.so
auth    required        pam_permit.so

Неправильный вариант:

auth    [success=1 default=ignore] pam_unix.so nullok
auth    requisite       pam_deny.so
auth    optional        pam_faildelay.so    delay=3000000
auth    required        pam_permit.so

Так может не сработать, потому что после requisite pam_deny.so обработка может прерываться.


3. Неверные единицы измерения

В pam_faildelay.so значение delay указывается в микросекундах.

Пример:

delay=3000000

означает 3 секунды.

Если написать:

delay=3

это будет не 3 секунды, а 3 микросекунды.


4. Модуль отсутствует

Проверьте:

ls -l /lib/*/security/pam_faildelay.so*

Если файла нет, установите пакет:

sudo apt install libpam-modules

5. Конфигурация перезаписывается pam-auth-update

В некоторых системах файлы вида /etc/pam.d/common-auth могут управляться через pam-auth-update. Если вы запускаете pam-auth-update или устанавливаете пакеты, которые пересобирают PAM-конфигурацию, ваша ручная правка может быть изменена.

Проверить:

sudo pam-auth-update --list

Если используется pam-auth-update, после любых изменений обязательно проверяйте:

cat /etc/pam.d/common-auth

6. SSH настроен без PAM

Проверьте:

sudo sshd -T | grep -i usepam

Должно быть:

usepam yes

Если там no, измените в конфигурации sshd:

sudoedit /etc/ssh/sshd_config

Добавьте или исправьте:

UsePAM yes

Затем:

sudo sshd -t
sudo systemctl reload ssh

7. Пользователь уже заблокирован faillock или pam_tally2

Если в системе настроена блокировка после нескольких неудачных попыток, тестовый пользователь может быть временно заблокирован.

Проверить и сбросить для faillock:

sudo faillock --user failtest
sudo faillock --user failtest --reset

Для старых систем с pam_tally2:

sudo pam_tally2 --user failtest
sudo pam_tally2 --user failtest --reset

Как отключить или откатить изменения

Отключить PAM-задержку

Откройте:

sudoedit /etc/pam.d/common-auth

Закомментируйте или удалите строку:

auth    optional    pam_faildelay.so    delay=3000000

Например:

# auth    optional    pam_faildelay.so    delay=3000000

Отключить FAIL_DELAY

Откройте:

sudoedit /etc/login.defs

Закомментируйте строку:

# FAIL_DELAY 3

Или установите:

FAIL_DELAY 0

Но для безопасности лучше не отключать задержку полностью, а оставить минимально допустимую по вашей политике.


Восстановить резервную копию

Например:

sudo cp /root/pam-backup/common-auth.YYYY-MM-DD_HH-MM-SS /etc/pam.d/common-auth
sudo cp /root/pam-backup/login.defs.YYYY-MM-DD_HH-MM-SS /etc/login.defs

Замените имена файлов на реальные:

ls -l /root/pam-backup/

Дополнительные меры защиты

Сам по себе fail_delay замедляет перебор, но не блокирует атакующего полностью. Для более надежной защиты используйте комплексно:


1. Блокировка после нескольких неудачных попыток

Можно использовать pam_faillock или, в старых конфигурациях, pam_tally2.

Пример идеи для pam_faillock:

  • блокировать после 5 неудачных попыток;
  • разблокировать через 15 минут.

Но настройку pam_faillock нужно выполнять очень аккуратно, потому что можно случайно заблокировать администраторов.


2. Ограничения для SSH

В /etc/ssh/sshd_config обычно рекомендуется:

PermitRootLogin prohibit-password
PasswordAuthentication yes
MaxAuthTries 3
LoginGraceTime 30

Если парольная аутентификация по SSH не нужна:



PasswordAuthentication no

Но тогда вход будет только по ключам.


3. Ограничение по сети

Для SSH полезно ограничивать доступ:

  • AllowUsers;
  • AllowGroups;
  • Match Address;
  • firewall;
  • fail2ban или аналогичные средства;
  • ограничение по подсетям.

4. Аудит

Проверяйте:

sudo tail -f /var/log/auth.log

Или:

sudo journalctl -f

Чек-лист

Если нужен быстрый безопасный вариант:

1. Добавьте в начало блока auth файла /etc/pam.d/common-auth:

auth    optional    pam_faildelay.so    delay=3000000

2. Проверьте /etc/login.defs:

FAIL_DELAY 3
  1. Проверьте вход с неправильным паролем через консоль, su и SSH.
  2. Если задержка получилась двойной, оставьте только один механизм: либо pam_faildelay.so, либо FAIL_DELAY.

Краткая памятка

# Резервная копия
sudo cp -a /etc/pam.d/common-auth /root/pam-backup/common-auth.$(date +%Y-%m-%d_%H-%M-%S)

# Правка
sudoedit /etc/pam.d/common-auth

Добавить в начало блока auth:

auth    optional    pam_faildelay.so    delay=3000000

Проверить:

grep -RIn 'pam_faildelay' /etc/pam.d
grep -E '^[[:space:]]*FAIL_DELAY' /etc/login.defs

Протестировать:

ssh failtest@127.0.0.1

или:

su - failtest

Если система использует pam-auth-update, после обновлений или изменения профилей обязательно проверяйте, что строка pam_faildelay.so осталась в нужном месте и не была удалена.


Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

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