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.

Что дальше в разделе

Источники

  • 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.
Оценка статьи 0

Комментарии

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