Модули PAM: кто за что отвечает

PAM - Pluggable Authentication Modules

Модуль — это и есть работа: стек говорит «когда и в каком порядке», модуль — «что именно проверить». На Ubuntu модулей около пятидесяти; ниже — те, что встречаются в живых цепочках и нужны на практике.

Полный список на своей машине:

$ ls /usr/lib/x86_64-linux-gnu/security/ | sed 's/^pam_//;s/\.so$//'
$ man 8 pam_unix      # документация любого модуля: man 8 pam_<имя>

Проверка пароля (тип auth / password)

Модуль Что делает
pam_unix Обычная проверка: пароль сверяется с хешем в /etc/shadow. Основа локального входа
pam_sss Проверка в домене через SSSD: AD, LDAP, FreeIPA
pam_pwquality Требования к новому паролю: длина, сложность, запрет простых
pam_pwhistory Чтобы новый пароль не совпал с одним из прежних
pam_faillock Блокировка после нескольких неудачных попыток (пришёл на смену pam_tally/pam_tally2)
pam_faildelay Пауза после неверного пароля — замедляет перебор
pam_fprintd Проверка по отпечатку пальца
pam_gnome_keyring Открывает связку ключей GNOME логин-паролем

Важные аргументы pam_unix (все — из man 8 pam_unix): nullok разрешает пустой пароль, obscure запрещает слишком простые, use_authtok требует пароль, введённый раньше, try_first_pass пробует тот же пароль, yescrypt/sha512 — алгоритм хеша. Именно последний аргумент объясняет, почему на двух машинах один пароль работает, а хеши в /etc/shadow выглядят по-разному.

Учётная запись (тип account)

Модуль Что делает
pam_localuser Пускать только тех, у кого есть запись в /etc/passwd
pam_sss Проверка учётной записи в домене (срок действия, блокировка)
pam_access Правила доступа из /etc/security/access.conf
pam_time Разрешение входа по времени и дню недели
pam_nologin Запрещает вход обычным пользователям, пока существует /etc/nologin
pam_succeed_if Условные проверки: «только не root», «только из такой группы»
pam_wheel Только для членов указанной группы (традиционно wheel)
pam_securetty Ограничивает, с каких терминалов разрешён вход root
pam_rootok «Если ты уже root — спрашивать пароль не надо» (в su, sudo)

Сессия (тип session)

Модуль Что делает
pam_systemd Регистрирует сессию: именно её показывают loginctl и systemd-logind
pam_loginuid Пишет в сессию настоящий идентификатор входа — важно для аудита
pam_limits Лимиты процессов из /etc/security/limits.conf
pam_env Переменные окружения (локаль, PATH)
pam_umask Маска прав на новые файлы
pam_mkhomedir Создаёт домашний каталог при первом входе
pam_motd, pam_issue Печатает сообщение дня и текст /etc/issue
pam_mail Сообщает о новой почте
pam_group Дополнительные группы на время сессии
pam_keyinit, pam_namespace, pam_tty_audit, pam_setquota Связки ключей, изоляция каталогов, аудит терминала, квоты

Служебные и отладочные

Модуль Зачем
pam_permit Всегда «да» — кирпичик для сборки цепочек
pam_deny Всегда «нет» — явный отказ
pam_debug Печатает в журнал всю цепочку: удобно, чтобы увидеть, что собралось
pam_echo, pam_warn Сообщение пользователю и предупреждение
pam_exec Запускает внешнюю программу — им пользуются и в защитных схемах, и во вредоносных
pam_selinux, pam_cap, pam_extrausers, pam_userdb Метки SELinux, capabilities, отдельная база пользователей, хранение в db

pam_permit и pam_deny выглядят безобидно, но именно с ними связан главный риск: лишний pam_permit в auth — это вход без пароля, а забытый pam_deny — наоборот, вход в никуда.

Как это выглядит вместе

Цепочка смены пароля на Ubuntu (файл /etc/pam.d/common-password, сокращённо):

password  requisite                   pam_pwquality.so retry=3
password  [success=2 default=ignore]  pam_unix.so obscure use_authtok try_first_pass yescrypt
password  sufficient                  pam_sss.so use_authtok
password  requisite                   pam_deny.so
password  required                    pam_permit.so

Читается как правило: сначала pam_pwquality проверяет, что новый пароль приличный (до трёх попыток), затем местный pam_unix записывает его в /etc/shadow с хешем yescrypt; если пользователь доменный, запись делает pam_sss; pam_deny и pam_permit фиксируют результат явно.

Источники

  • man 8 pam_<модуль> — по каждому модулю из таблиц (пакет libpam-modules): pam_unix, pam_pwquality, pam_faillock, pam_systemd, pam_mkhomedir, pam_limits, pam_succeed_if, pam_permit, pam_deny и другие.
  • Список модулей и содержимое /etc/pam.d/common-password — приведено с рабочей системы (Ubuntu 26.04).
  • man 8 pam_debug, man 8 pam_exec — служебные модули.

Что ещё не проверено

  • Набор модулей зависит от установленных пакетов: у нас в системе 54 модуля, на другом сервере их будет меньше или больше.
  • pam_tally2 (pam_tally) в новых выпусках заменён на pam_faillock; если встретите в старой документации первый — это не ошибка, а другая версия.
Оценка статьи 0

Комментарии

Пока комментариев нет.