Pluggable Authentication Modules

Pluggable Authentication Modules (англ. Pluggable Authentication Modules; модули подключаемой аутентификации, сокращённо PAM) — это интерфейс программирования приложений (API), предоставляющий программам сервисы аутентификации, авторизации и управления сессиями.

PAM обеспечивает разделение между программами, требующими аутентификацию, и стандартами либо лучшими практиками идентификации и контроля доступа.

Реализация «политик безопасности» рекомендуется АНССИ для защищённого администрирования информационной системы[1]. PAM облегчает жёсткое управление доступом в ИС, позволяя определять индивидуальные политики путём выбора и настройки необходимых модулей PAM. Если ни один из существующих модулей не подходит, спецификация PAM описывает, как реализовать собственный модуль.

История

PAM была предложена[2] компанией Sun Microsystems для решения проблемы аутентификации, поставленной в 1995 году группой security group, участвовавшей в разработке графической среды Common Desktop Environment в рамках Open Software Foundation. Решение PAM было выбрано в июне и затем описано в октябре 1995 года в RFC под эгидой Open Software Foundation и была представлена на конференции ACM в 1996 году[2].

Хотя идея принадлежит инженерам Sun Microsystems, первая реализация была выполнена в январе 1996 года Марком Юингом (Marc Ewing) из Red Hat в проекте Linux-PAM[3].

После этого PAM была портирована на разные архитектуры, в том числе Solaris, Linux, FreeBSD[4], NetBSD, DragonFly BSD[5], AIX[6] и HP-UX.

Архитектура

Архитектура Pluggable Authentication Modules (PAM) является модульной и многоуровневой, что обеспечивает гибкость в настройке политик аутентификации и отделяет приложения от конкретных методов проверки подлинности. Она состоит из четырёх ключевых уровней:[7]

  • Приложения (Application Layer) — программы, требующие аутентификации (например, login, sshd или sudo). Они вызывают функции из библиотеки PAM, не вдаваясь в детали реализации процесса проверки подлинности[7].
  • Библиотека PAM (API Layer) — ядро системы (обычно библиотека libpam), предоставляющее единый интерфейс программирования приложений. Она считывает конфигурационные файлы и последовательно вызывает необходимые модули[8].
  • Конфигурационные файлы (Configuration Layer) — уровень, определяющий политики аутентификации для каждого отдельного сервиса. Конфигурация обычно располагается в каталоге /etc/pam.d/, где описываются цепочки модулей для различных задач[9].
  • Модули PAM (SPI Layer) — набор разделяемых библиотек (например, pam_unix.so, pam_ldap.so), выполняющих конкретные задачи. Каждый модуль реализует одну или несколько групп управления: аутентификация (auth), управление учётными записями (account), управление сессиями (session) и управление паролями (password)[10].

Конфигурация

В современных Unix-подобных операционных системах конфигурация PAM преимущественно осуществляется через каталог /etc/pam.d/, где для каждой службы создаётся отдельный конфигурационный файл. Этот подход пришёл на смену устаревшему методу, использовавшему единый конфигурационный файл /etc/pam.conf для всех служб[11].[12]

Каждая строка в конфигурационном файле определяет вызов одного модуля и имеет следующий синтаксис: тип_модуля управляющий_флаг путь_к_модулю [аргументы][13][14]

Управляющие флаги определяют, как результат работы отдельного модуля влияет на общий результат аутентификации для всей цепочки (стека) модулей. Основные управляющие флаги:

  • required — для общего успеха стека модуль должен успешно завершить работу. Если модуль завершается с ошибкой, PAM запоминает этот результат, но продолжает выполнение остальных модулей в стеке. Итоговый результат будет отрицательным[15].[11]
  • requisite — модуль должен завершиться успешно. В отличие от required, в случае сбоя обработка стека немедленно прекращается, и приложению сразу же возвращается ошибка[15].[11]
  • sufficient — если модуль завершается успешно и ни один из предыдущих модулей required не завершился с ошибкой, аутентификация считается успешной, а все последующие модули в стеке игнорируются. Сбой этого модуля игнорируется[15].[11]
  • optional — успех или сбой модуля игнорируется. Его результат имеет значение только в том случае, если ни один другой модуль в стеке не определил итоговый результат[15].[11]

Модули PAM

Модули PAM представляют собой расширяемый набор динамических библиотек, например, pam_unix.so, которые предоставляют шесть операций аутентификации, определённых стандартом, сгруппированных в четыре механизма:

  • Механизм account предоставляет одну функцию: проверяет, доступна ли учётная запись (например, не истёк ли срок её действия, разрешено ли пользователю входить в данное время суток и т. д.).
  • Механизм auth предоставляет две функции: выполняет непосредственную аутентификацию (например, запрашивает и проверяет пароль), а также определяет «идентификационные сертификаты» вроде членства в группах или «тикеты» Kerberos.

В современных системах для реализации двухфакторной и многофакторной аутентификации (2FA/MFA) применяются такие модули, как pam_google_authenticator (для одноразовых паролей TOTP/HOTP) и pam_u2f (для аппаратных ключей стандарта FIDO2/U2F)[16][17].

  • Механизм password предоставляет одну функцию: позволяет обновлять аутентификационный токен (чаще всего — пароль), как по истечении срока его действия, так и по желанию пользователя.
  • Механизм session включает две функции: инициализацию и завершение пользовательской сессии. Он активируется после успешной аутентификации и позволяет пользователю использовать учётную запись, предоставляя доступ к отдельным ресурсам, например, монтируя домашний каталог, открывая почтовый ящик, запуская агент ssh и пр.

Примером современного модуля управления сессиями является pam_systemd, который интегрирует сеансы с systemd, регистрируя их в systemd-logind, создавая пользовательский каталог времени выполнения и управляя юнитами[18].

Расширения

  • pam_mount — расширение PAM, позволяющее монтировать файловую систему при подключении пользователя. Например, может быть произведён автоматический монтирование каталога CIFS с использованием только что введённого пользователем пароля, после чего раздел демонтируется при завершении сессии. В сочетании с модулем pam_ldap это даёт возможность использования комплекса Samba/OpenLDAP для аутентификации и управления пользовательскими каталогами в Linux. Помимо этого, pam_mount может выполнять монтирование при входе разделов разных типов, в том числе зашифрованных, например, с использованием loop и AES.

pam_mount может использоваться совместно с драйверами FUSE (например, Rclone, s3fs-fuse) для монтирования облачных хранилищ[19]. В контейнерных средах, таких как Kubernetes, модули монтирования PAM не используются, а применяется нативный интерфейс Container Storage Interface (CSI)[20].

Безопасность и уязвимости

В модуле pam_pkcs11 были выявлены уязвимости (CVE-2025-24031, CVE-2025-24032, CVE-2025-24531), которые могут приводить к отказу в обслуживании и обходу аутентификации. Проблемы связаны с ошибками при прерывании ввода PIN-кода, небезопасной конфигурацией по умолчанию и некорректной обработкой аппаратных сбоев[21].

Уязвимость EUVD-2026-29474 в модуле pam_authnft связана с чтением данных за пределами выделенного буфера в функции peer_lookup_tcp.

Для обнаружения вредоносных PAM-модулей (бэкдоров) применяются такие методы, как мониторинг целостности конфигурационных файлов в каталоге /etc/pam.d/ и библиотек в /lib/security/, поведенческий анализ, а также аудит системных журналов аутентификации[22].

Критика PAM

Несмотря на проводимые работы по стандартизации[23], по состоянию на 2023 год PAM не является официальным стандартом. Поведение системы может различаться между разными реализациями.

Примечания

  1. RECOMMANDATIONS RELATIVES À L'ADMINISTRATION SÉCURISÉE DES SYSTÈMES D'INFORMATION, версия 3.0 (фр.). cyber.gouv.fr. ANSSI. Дата обращения: 28 мая 2026. Архивировано 27 сентября 2019 года.
  2. 1 2 Charlie Lai, Vipin Samar (март 1996). “Making Login Services Independent of Authentication Technologies”. 3rd ACM Conference on Computer and Communications Security [англ.]. Дата обращения 2026-05-28. Проверьте дату в |date= (справка на английском)
  3. Andrew G. Morgan. Pluggable Authentication Modules, Linux Security (англ.). Linux Journal (1 декабря 1997). Дата обращения: 28 мая 2026. Архивировано 11 февраля 2005 года.
  4. OpenPAM, руководство DragonFly BSD (англ.). docs.freebsd.org. Дата обращения: 28 мая 2026. Архивировано 14 марта 2024 года.
  5. OpenPAM, руководство DragonFly BSD (англ.). dragonflybsd.org. Дата обращения: 28 мая 2026. Архивировано 8 ноября 2020 года.
  6. Плагины аутентификации (PAM) в AIX (англ.). IBM. Дата обращения: 28 мая 2026. Архивировано 1 февраля 2023 года.
  7. 1 2 Библиотека Pluggable Authentication Modules (PAM). Хабр (11 июля 2022). Дата обращения: 28 мая 2026.
  8. PAM: подключаемые модули аутентификации. Системный администратор. Дата обращения: 28 мая 2026.
  9. PAM (Pluggable Authentication Modules). dmosk.ru. Дата обращения: 28 мая 2026.
  10. Pluggable Authentication Modules (PAM). RED OS. Дата обращения: 28 мая 2026.
  11. 1 2 3 4 5 pam.d — PAM configuration files. man7.org. Дата обращения: 28 мая 2026.
  12. Конфигурация PAM. OpenNET. Дата обращения: 28 мая 2026.
  13. PAM (Pluggable Authentication Modules). dmosk.ru. Дата обращения: 28 мая 2026.
  14. Pluggable Authentication Modules (PAM). miniorange.com. Дата обращения: 28 мая 2026.
  15. 1 2 3 4 Pluggable Authentication Modules (PAM). Rocky Linux Documentation. Дата обращения: 28 мая 2026.
  16. pam_google_authenticator. manpages.ubuntu.com. Дата обращения: 28 мая 2026.
  17. Universal 2nd Factor. wiki.archlinux.org. Дата обращения: 28 мая 2026.
  18. PAM_SYSTEMD(8). man.archlinux.org. Дата обращения: 28 мая 2026.
  19. [Feature] pam_mount integration. GitHub. Дата обращения: 28 мая 2026.
  20. Dynamic Provisioning. kubernetes.io. Kubernetes. Дата обращения: 28 мая 2026.
  21. Critical Vulnerabilities in Linux Pluggable Authentication Modules (PAM). Broadcom. Дата обращения: 28 мая 2026.
  22. Stealth in 100 Lines: Analyzing PAM Backdoors in Linux. Nextron Systems (30 мая 2025). Дата обращения: 28 мая 2026.
  23. X/Open Single Sign-on Preliminary Specification : [англ.]. — The Open Group, июнь 1997. — ISBN 1-85912-144-6.

Ссылки

Категории