Конфигурация распространённых модулей PAM
pam_unix.so
Модуль pam_unix.so является базовым модулем для аутентификации и управления паролями с использованием локальной базы данных пользователей /etc/passwd и /etc/shadow.
Модуль pam_unix.so обеспечивает стандартную проверку пароля путём сравнения введённого значения с хешем, хранящимся в /etc/shadow. При смене пароля также используется модуль pam_unix.so, если в стеке PAM он подключён в секции password. Модуль поддерживает использование различных параметров, позволяющих более гибко управлять политиками безопасности, например: ограничением на использование пустых паролей, принудительным использованием одного и того же пароля в цепочке модулей и др.
Основные параметры модуля:
nullok— разрешение входа при пустом пароле;try_first_pass— попытка использовать уже введённый пароль из предыдущего модуля;use_authtok— обязательное использование пароля, полученного от предыдущего модуля (обычно используется в стеке password);shadow— чтение паролей из/etc/shadow(по умолчанию включено).
Пример использования:
auth sufficient pam_unix.so try_first_pass nullok
account required pam_unix.so
password sufficient pam_unix.so use_authtok
pam_env.so
Модуль pam_env.so используется для задания и инициализации переменных окружения в сеансах пользователей при аутентификации через PAM. Он позволяет определить, какие переменные среды должны быть установлены, а также откуда они должны быть загружены.
Конфигурационные файлы модуля pam_env.so:
/etc/security/pam_env.conf— основной файл, содержащий переменные окружения в формате "ключ=значение". Может содержать как статические переменные, так и значения, полученные из текущего окружения./etc/environment— альтернативный источник переменных окружения; используется как вспомогательный механизм. Поддерживает только простые объявления переменных без логики и условий.
Модуль pam_env.so выполняется до выполнения остальных PAM-модулей и позволяет задать окружение, которое будет использоваться в рамках сеанса пользователя. Это может быть полезно, например, для установки языковых локалей (LANG, LC_ALL), прокси-переменных, путей к пользовательским скриптам и т. д.
Конфигурационный файл /etc/security/pam_env.conf поддерживает:
- комментарии (начинаются с "#");
- подстановки переменных (например, ${home});
- управление значениями на основе текущего окружения.
pam_faillock.so
Модуль pam_faillock.so отвечает за реализацию механизма блокировки учётной записи после нескольких неудачных попыток входа. Рекомендуется для защиты от атак перебора паролей.
Блокировка применяется как для локального входа (через TTY, GDM), так и для удалённого (через SSH), если PAM настроен соответствующим образом. Модуль сохраняет информацию о неудачных попытках входа и отслеживает их накопление для каждой учётной записи.
Блокировка через pam_faillock.so действует только на вход через PAM; вызовы, обходящие PAM, не учитываются.
По умолчанию модуль использует файл /var/log/faillock для хранения состояния.
Модуль работает в двух режимах:
- preauth — анализирует количество предыдущих неудачных попыток до выполнения основной аутентификации;
- authfail — регистрирует неудачную попытку после того, как пользователь ввёл неверный пароль.
При достижении заданного количества попыток доступ блокируется на определённый промежуток времени (unlock_time) или до административной разблокировки.
Основные параметры:
preauth— активация проверки до ввода пароля;authfail— регистрация неудачной попытки после неверного пароля;deny=N— максимальное количество попыток перед блокировкой (по умолчанию: 3);unlock_time=T— продолжительность блокировки в секундах;fail_interval=T— время, за которое считаются попытки (по умолчанию: 900);even_deny_root— распространение блокировки на пользователя root;audit— запись в системный журнал о блокировках и разблокировках;silent— скрытие вывода о количестве оставшихся попыток;local_users_only— применение только к локальным пользователям;no_log_info— отключение дополнительной информации в выводе.
Администратор может вручную удалить информацию о блокировках, тем самым разблокировав пользователя. Пример команды:
faillock --user <имя_пользователя> --reset
Просмотр статистики неудачных попыток:
faillock --user <имя_пользователя>
Пример конфигурации /etc/pam.d/system-auth для блокировки учетной записи пользователя после N неудачных попыток входа:
auth required pam_faillock.so preauth silent deny=5 unlock_time=900
auth required pam_unix.so
auth [default=die] pam_faillock.so authfail deny=5 unlock_time=900
account required pam_faillock.so
В данном примере при пяти неудачных попытках вход блокируется на 15 минут.
pam_limits.so
Модуль pam_limits.so отвечает за применение ограничений на ресурсы пользователей (число процессов, размер памяти, количество открытых файлов и др.).
Ограничения применяются в соответствии с конфигурационными файлами limits.conf и дополнительными файлами из каталога /etc/security/limits.d/.
Ограничения вступают в силу при открытии новой сессии, поэтому необходимо убедиться, что pam_limits.so подключён в секции session соответствующего PAM-файла (например, login, sshd, su, gdm-password и др.).
Ограничения могут устанавливаться по следующим ресурсам:
core– максимальный размер файла core dump (в блоках);data– максимальный размер сегмента данных процесса;fsize– максимальный размер создаваемого файла (в блоках);memlock– максимальный объём заблокированной памяти;nofile– максимальное количество открытых файлов;nproc– максимальное количество процессов пользователя;rss– максимальный объём оперативной памяти;stack– максимальный размер стека;cpu– лимит времени процессора (в минутах);maxlogins– максимальное количество одновременных логинов;priority– приоритет (nice) запускаемых процессов;locks– максимальное количество блокировок файлов;sigpending– максимальное количество ожидающих сигналов;msgqueue– максимальный объём POSIX-очередей сообщений;nice– максимально допустимое значение nice;rtprio– максимальный приоритет реального времени.
Каждая строка в файлах имеет следующий формат:
<домен> <тип> <ресурс> <значение>
- <домен> — имя пользователя, группа (@groupname) или спец. символ * (все пользователи);
- <тип> — soft (мягкое ограничение), hard (жёсткое ограничение) или "-" (оба сразу);
- <ресурс> — название ограничиваемого ресурса;
- <значение> — числовое значение ограничения или unlimited.
Настройки ограничений применяются со следующим приоритетом и порядком:
- настройки из
/etc/security/limits.d/*.confдополняют или переопределяют правила из limits.conf при совпадении домена и ресурса; - приоритет имеют правила, указанные позже (например, в алфавитно последнем файле из limits.d);
- если для одного пользователя задано несколько значений одного ресурса, используется более строгое (жёсткое) ограничение.
Некоторые ограничения (например, nofile) могут быть переопределены средствами оболочки или системным демоном (например, systemd user services). В таких случаях требуется дополнительная настройка через systemd (директивы LimitNOFILE= и т.п.).
При отладке рекомендуется использовать команду ulimit -a для просмотра текущих применённых ограничений к сессии.
Примеры конфигурации модуля:
- Ограничение количества процессов:
@developers soft nproc 2048
@developers hard nproc 4096
- Ограничение количества одновременно открытых файлов:
user1 - nofile 1024
- Принудительное окончание сессии и ограничение пользователя одной активной сессией (например, для терминального сервера). Изменения вносятся в файл
/etc/security/limits.d/10-maxlogins.conf:
* hard maxlogins 1
pam_succeed_if.so
Модуль pam_succeed_if.so используется для условного выполнения последующих или текущих PAM-модулей в зависимости от заданных условий. Применяется для реализации гибкой логики доступа, например, разрешения или запрета входа определённым группам пользователей, пользователям с конкретными идентификаторами (UID), оболочками (shell), типами сервисов и т.д. Это особенно полезно при создании дифференцированных правил аутентификации в различных сценариях: GDM, TTY, SSH и других.
Модуль pam_succeed_if.so не выполняет саму аутентификацию, а лишь влияет на ход выполнения PAM-стека, пропуская или блокируя модули по заданным условиям.
Основные параметры модуля:
- user ingroup <имя_группы> — проверка, состоит ли пользователь в указанной группе;
- uid < N / uid >= N — проверка числового идентификатора пользователя (например, для различия между системными и обычными пользователями);
- shell = /bin/bash — проверка используемой оболочки пользователя;
- service = gdm — проверка PAM-сервиса (имя PAM-конфигурационного файла), в рамках которого вызывается модуль.
Модуль поддерживает как положительные, так и отрицательные условия, а также логические операторы. Для управления логикой перехода в стеке используются параметры управления, например:
- default=1 success=ignore — при выполнении условия переход к следующему модулю, в противном случае — пропуск следующего модуля;
- success=ok default=bad — возврат успешного статуса при выполнении условия, иначе — неудача.
Пример использования для ограничения входа только пользователям, состоящим в группе tokenlogin, используется следующая строка в PAM-конфигурации:
auth [default=1 success=ignore] pam_succeed_if.so user ingroup\ tokenlogin
auth requisite pam_deny.so
В данном примере, если пользователь не входит в группу tokenlogin, переход к следующей строке будет невозможен, выполнение pam_deny.so завершится отказом в доступе.
Данное правило может быть добавлено, например, в начало файла /etc/pam.d/system-auth или /etc/pam.d/login.
pam_p11.so
Модуль pam_p11.so предназначен для аутентификации пользователей с использованием аппаратных токенов (по стандарту PKCS#11). Используется в рамках реализации двухфакторной аутентификации в ОС РОСА "ХРОМ". pam_p11.so позволяет выполнять проверку подлинности за счёт криптографической подписи, формируемой закрытым ключом, хранящимся на токене.
Особенности работы модуля:
- Модуль взаимодействует с аппаратным токеном напрямую через PAM и не зависит от наличия службы sshd или ключей openssh.
- Применяется как для локального входа, так и в составе универсальных PAM-стеков, например, для GDM, SSH, TTY и других служб.
- В сценарии двухфакторной аутентификации модуль инициирует запрос PIN-кода от токена и проверяет криптографическую подпись случайной последовательности, тем самым реализуя второй фактор.
Подробные инструкции по подготовке токена, настройке целевой и рабочей станции, а также интеграции pam_p11.so с различными сервисами приведены в разделе Настройка двухфакторной аутентификации.