Модули 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; если встретите в старой документации первый — это не ошибка, а другая версия.
Комментарии
Пока комментариев нет.