PAM - Pluggable Authentication Modules
PAM (Pluggable Authentication Modules, подключаемые модули аутентификации) — подсистема, которая решает один вопрос: пускать или не пускать пользователя — и делает это не сама, а набором модулей.
Смысл в разделении труда. Программа входа (login, su, sudo, экран входа GNOME) не знает, как проверяется пароль: в файле паролей, в LDAP, в домене Active Directory, по отпечатку пальца или по одноразовому коду. Она просто спрашивает PAM, а PAM уже решает, какими модулями это делать. Отсюда и «подключаемые»: набор правил для программы можно менять, не трогая программу.
Четыре задачи, которые решает PAM
Проверка входа — не одно действие, а четыре разных, и у каждого свой тип модуля:
| Тип | Название | Что делает |
|---|---|---|
auth |
управление аутентификацией | Проверяет, тот ли это человек: пароль, ключ, отпечаток |
account |
управление учётной записью | Пускать ли его сейчас: не истёк ли пароль, не заблокирована ли учётная запись |
session |
управление сессией | Что сделать при входе и выходе: журнал, лимиты, домашний каталог |
password |
управление паролем | Как менять пароль и обновлять его в источнике |
Порядок важен: сначала auth (кто ты), потом account (можно ли тебе), потом session (что сделать при входе), и отдельно password при смене пароля.
Где лежат правила
| Путь | Что это |
|---|---|
/etc/pam.conf |
Старый единый файл. Если есть каталог /etc/pam.d/, он игнорируется |
/etc/pam.d/ |
Каталог: файл на каждую программу — login, su, sudo, sshd, gdm-password |
/etc/pam.d/common-* |
Общие части в Debian/Ubuntu: common-auth, common-account, common-session, common-password |
/etc/security/ |
Настройки отдельных модулей: limits.conf, access.conf, faillock.conf |
/usr/lib/x86_64-linux-gnu/security/ |
Сами модули (pam_unix.so и другие) |
Формат строки в файле — один для всех:
тип флаг-контроля модуль аргументы
auth required pam_unix.so nullok
Как устроена строка и что означают флаги — в разборе «Стек и контрольные флаги».
Как это выглядит на живой системе
Вот цепочка входа в терминал (файл /etc/pam.d/login, Ubuntu 26.04) в сокращении:
auth optional pam_faildelay.so delay=3000000
auth requisite pam_nologin.so
session required pam_loginuid.so
session optional pam_motd.so motd=/run/motd.dynamic
@include common-auth
@include common-session
Читается это сверху вниз, но не «по одной строке»: модули собираются в стек, и результат зависит от флагов. Например, pam_nologin.so с флагом requisite означает «если есть файл /etc/nologin — отказать немедленно и дальше не проверять», а optional у pam_motd.so — «если модуль не сработает, вход всё равно состоится».
Строка @include common-auth — не модуль, а вставка другого файла. Именно в common-auth находится общая проверка пароля, поэтому все программы входа на Ubuntu ведут себя одинаково.
Зачем это знать на практике
Один и тот же файл объясняет несколько разных вещей, которые иначе выглядят как загадки:
- почему вход запрещён, хотя пароль верный — сработал
account, а неauth(истёк срок пароля, учётная запись заблокирована, есть/etc/nologin); - почему в GNOME нельзя войти под root, а в терминале можно — в
/etc/pam.d/gdm-passwordестьpam_succeed_if.so user != root, а в/etc/pam.d/loginего нет; - почему доменный пользователь входит на машине — в
common-authподключёнpam_sss.so, то есть проверку делает SSSD, а не файл паролей; - почему после входа появляется домашний каталог — модуль
pam_mkhomedir.soвsession.
Что дальше в разделе
- Стек и контрольные флаги — порядок обработки,
required,requisite,sufficient,optional,[success=…]. - Модули: кто за что отвечает —
pam_unix,pam_sss,pam_systemd,pam_limits,pam_faillockи другие. - Отладка PAM — как увидеть, какой модуль отказал.
- Файл pam.conf — старый единый конфиг и формат правил.
- Модуль pam_unix.so — стандартная проверка пароля по
/etc/shadow.
Источники
man 3 pam,man 5 pam.conf,man 8 pam— устройство подсистемы и формат правил (пакетlibpam-modules/libpam-runtime).man 5 pam.d, файлы/etc/pam.d/common-*— раскладка на Debian и Ubuntu.- Содержимое
/etc/pam.d/login,/etc/pam.d/gdm-password— приведено с рабочей системы (Ubuntu 26.04).
Что ещё не проверено
- Раскладка каталогов и имена файлов
common-*— особенность Debian и Ubuntu. В других дистрибутивах (RHEL, Fedora, Arch) файлы называются иначе, хотя типы модулей и флаги те же. - Путь к модулям указан для 64-битной системы; на некоторых дистрибутивах это
/lib/securityили/usr/lib/security.
Комментарии
Пока комментариев нет.