Конфигурация распространённых модулей 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 с различными сервисами приведены в разделе Настройка двухфакторной аутентификации.