PAM/ru

PAM, or Pluggable Authentication Modules, is a modular approach to authentication. It allows (third party) services to provide an authentication module for their service which can then be used on PAM enabled systems. Services that use PAM for authentication can immediately use these modules without the need for a rebuild.

Введение
На сервере Linux PAM (Pluggable Authentication Modules) могут использоваться для управления аутентификацией (как часть управления предоставления доступа). При использовании PAM службам нет необходимости поддерживать собственную систему аутентификации. Вместо этого они полагаются на модули PAM, доступные в системе. Каждая служба при необходимости может использовать собственную конфигурацию PAM, хотя в большинстве случаев аутентификация выполняется одинаково для множества служб. Вызывая модули PAM, сервисы могут поддерживать двухфакторную аутентификацию «из коробки», сразу же использовать централизованные хранилища аутентификационных средств и многое другое.

PAM предоставляют гибкую модульную архитектуру для следующих служб:


 * Authentication management - verify if a user trying to authenticate a user account is actually the user.
 * Account management - check if that users' password has expired or if the user is allowed to access this particular service.
 * Session management - execute certain tasks on logon or logoff of a user (auditing, mounting of file systems, ...).
 * Password management - offer an interface for password resets and the like.

Принципы работы PAM
При работе с PAM администраторы очень быстро понимают принципы, по которым функционирует PAM.

Во-первых, это «независимость от бэк-энда». Приложениям, поддерживающим PAM, нет необходимости учитывать низкоуровневую логику, чтобы работать с бэк-эндами, например, базами данных, службой LDAP, файлами паролей, веб-службами с поддержкой WS-Security или другими ещё неизобретёнными бэк-эндами. Используя PAM, приложения отделяют логику работы бэк-энда от своей. Всё, что им нужно сделать — это вызвать функцию PAM.

Другим принципом является «независимость от конфигурации». Администраторам не нужно знать, как настраивать десятки различных приложений, чтобы заставить их поддерживать аутентификацию через LDAP-сервер. Вместо этого им достаточно воспользоваться одной конфигурационной структурой, предоставляемой PAM.

Последним принципом, являющимся также частью названия PAM, является «подключаемая архитектура». Когда необходимо интегрировать новый бэк-энд, всё, что нужно сделать администратору — это установить библиотеку для этого бэк-энда (большинство модулей используют один файл настроек). Начиная с этого момента модуль становится доступен для использования приложениями. Администраторы могут настроить аутентификацию для использования этого бэк-энда и просто перезапустить приложение.

Как работает PAM
Приложения, для которых необходимо использование PAM, линкуются с библиотекой PAM (libpam) и могут вызывать нужные функции работы с указанными выше службами. Кроме этого, в приложении не нужно ничего реализовывать специфичного для работы с этими службами, так как эту задачу на себя берёт PAM. И когда пользователь захочет аутентифицироваться, скажем, в веб-приложении, то это приложение вызывает PAM (передавая ему идентификатор и, возможно, пароль или запрос) и проверяет возвращаемые данные, чтобы принять решение, аутентифицировался ли пользователь и имеет ли он доступ к приложению. Внутренней задачей PAM является определение, где необходимо аутентифицировать пользователя (например, в центральной базе данных или на LDAP-сервере).

Сильной стороной PAM является то, что создавать модули PAM для интеграции со службами или приложениями может любой желающий. Если какая-нибудь компания выпускает новую службу для аутентификации, всё, что нужно будет сделать, — это предоставить для взаимодействия с этой службой модуль PAM, после чего любое использующее PAM приложение сможет незамедлительно работать с этой службой: нет необходимости что-то пересобирать или улучшать.

Настройка
Другой важной особенностью PAM является то, что они поддерживают объединение в цепочки нескольких модулей. Вот конфигурационный файл PAM для некоей службы:

Видно, что конфигурационный файл разделён на четыре области служб, которые поддерживают PAM: аутентификация, управление учётными записями, управление паролями и управление сеансами.

Каждый из этих разделов в файле вызывает один или несколько модулей PAM. Например, устанавливает переменные среды, которые могут быть использованы последующими модулями. Код, возвращаемый модулем PAM, вместе с управляющими директивами (в данном примере — required или optional) позволяет PAM решать, что делать дальше.

Управляющие директивы
PAM поддерживают следующие управляющие директивы:

Цепочки модулей позволяют выполнить множественную аутентификацию, выполнить несколько задач в процессе создания сеанса и тому подобное.

Управление файлами конфигурации PAM
Так как конфигурационные файлы PAM управляют процессом аутентификации в приложении, очень важно правильно с ними взаимодействовать. Файлы обычно располагаются в каталоге.

В больших организациях или в требовательных к безопасности системах любая модификация конфигурационных файлов PAM должна подвергаться соответствующему аудиту.

Это же относится к тому месту, где располагаются модули PAM ( или ).

PAM и Gentoo
Для приложений, поддерживающий PAM, принудительно включён USE-флаг. Хотя и возможно создать систему Gentoo без поддержки PAM, но по умолчанию поддержка PAM включена.

Смотрите также

 * PAM (Настольная книга безопасности)
 * Статья Модуль pam_ssh_agent, описыающая установку и конфигурацию стороннего модуля PAM, который организовывает аутентификацию через инфраструктуру открытых ключей SSH
 * Статья Google Authenticator, описывающая установку и использование приложения аутентификатора Google для аутентификации через PAM

Ссылки

 * Working with PAM, раздел руководства разработчика Gentoo