Подробный гайд: Настроить fail_delay в Astra Linux 1.7+: PAM-модуль pam_faildelay, login.defs
В Astra Linux под термином fail_delay обычно имеют в виду одно из двух:
FAIL_DELAYв/etc/login.defs— задержка в секундах, используется частью программ входа, например классическимlogin.pam_faildelay.soв PAM — задержка после неудачной аутентификации через PAM. Это более универсальный способ, так как через PAM обычно работаютlogin,su,sudo,sshd, графические менеджеры входа и другие сервисы.
Для защиты от перебора паролей лучше использовать PAM-модуль pam_faildelay.so, а FAIL_DELAY в /etc/login.defs можно оставить как дополнительный параметр, но затем проверить, что задержки не суммируются.
Важно перед началом
Неверная правка PAM может привести к тому, что вход в систему станет невозможным. Поэтому:
- Работайте в сессии с правами администратора.
- Не закрывайте текущую рабочую сессию, пока не проверите вход в другом терминале.
- Сделайте резервные копии изменяемых файлов.
- Сначала тестируйте на тестовом пользователе, а не на
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?
Рекомендация:
- Основной вариант —
pam_faildelay.soв PAM. FAIL_DELAYв/etc/login.defsможно оставить как дополнительный параметр.- После настройки обязательно проверить реальную задержку, чтобы не получилось двойного ожидания.
Если после включения обоих механизмов задержка стала, например, не 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
- Проверьте вход с неправильным паролем через консоль,
suи SSH. - Если задержка получилась двойной, оставьте только один механизм: либо
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 осталась в нужном месте и не была удалена.
Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.