PAM (Pluggable Authentication Modules)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 16:02, 27 июня 2016.

PAM (англ. Pluggable Authentication Modules) - это библиотека для UNIX систем, которая является обобщённым API для служб, связанных с аутентификацией, которые позволяют системному администратору добавлять новые методы аутентификации простой установкой новых модулей PAM и изменять политику аутентификации посредством редактирования конфигурационных файлов. PAM описали и разработали Випин Самар и Чарли Лэй из Sun Microsystems в 1995 году, с тех библиотека сильно не менялась. В 1997 году Open Group опубликовала предварительные спецификации на X/Open Single Sign-on (XSSO), что стандартизовало API для PAM и добавило расширения для одноразовой (или достаточно интегрированной) подписи.

Принцип работы

Если программа (в частности login) желает произвести аутентификацию пользователя, она не занимается этим, а обращается к PAM'у с соответствующей просьбой. Последний выполняет все проверки и докладывает вызвавшему его процессу о результатах: пускать или не пускать. Все заботы о выборе алгоритма и особенностях аутентификации лежат на PAM'е, программа не имеет понятия, что необходимо сделать пользователю для аутентификации.
Формально PAM выполнен в виде разделяемых библиотек-модулей расположившихся в каталоге /lib/security/. Каждый модуль по особому пропускает через себя пользователя, реализуя свой собственный механизм аутентификации. То есть, сценарий аутентификации собирается из модулей, как из различных кирпичиков.
Сценарии, которые используют программы размещенны в каталоге /etc/pam.d. Имя каждого сценария в этом каталоге совпадает с именем программы, для которого он предназначен. Например, сценарий для login находится по адресу /etc/pam.d/login.

Пример работы PAM

Содержимое файла может выглядеть, например, так:

 auth    requisite      /lib/security/pam_unix.so      nullok #set_secrpc
 auth    required       /lib/security/pam_securetty.so
 auth    required       /lib/security/pam_env.so
 auth    required       /lib/security/pam_mail.so
 account  required      /lib/security/pam_unix.so
 password required      /lib/security/pam_unix.so      strict=false
 session  required      /lib/security/pam_unix.so      none # debug or trace
 session  required      /lib/security/pam_limits.so

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

Тип_Модуля||Флаг_Контроля||Путь_К_Модулю||Параметры_Модуля

  • Тип_Модуля должен быть одним из следующих:
auth - Такой модуль проверяет наличие пользователя в системе, спрашивает его имя, разрешает или нет доступ в ту или иную группу (независимо от записей в файле /etc/groups),способен давать привилегии (конечно специально предназначенные для этого).
account - Этот модуль не занимается аутентификацией, а позволяет контролировать распределение ресурсов системы для тех или иных пользовательских бюджетов.
session - Этот модуль связан с ситуациями, которые могут происходить перед тем как пользователь получит доступ к той или иной службе. Например ведение записей в системных журналах.
password - Модуль, как следует из названия, занимающийся непосредственно проверкой паролей на подлинность, на слабость и т.д.
  • Флаг_контроля указывает, как система будет реагировать при удачном или неудачном прохождении соответствующего модуля. Поскольку модули запускаются последовательно один за другим, то специальной расстановкой флагов можно определить значимость каждого из них. В качестве флагов могут быть использованы следующие ключевые слова:
required - Удача этого модуля требуется для всей аутентификации в целом. Неудача модуля с подобным флагом не проявится для пользователя пока не выполнятся все оставшиеся модули.
requisite - Тоже самое, но только в случае провала управление тут же будет возвращено приложению.
sufficient - Удачное прохождение подобного модуля считается достаточным для признания всей аутентификации удачной если не провалилась проверка на предшествующих модулях с флагом
required - Неудача же этого модуля не считается фатальной для всей последующей аутентификации.
optional - Этот модуль не критичен для аутентификации и используется как дополнительный. То есть,например , может ограничиться выводом на экран предупреждением о слабости вашего пароля.
  • Путь_К_Модулю должен указывать полный адрес выбранного модуля на диске, а Параметры_Модуля зависят от выбора оного.

Помимо файлов-сценариев для некоторых модулей могут использоваться дополнительные файлы конфигурации. Все они расположены в каталоге /etc/security и каждый файл предназначен для конкретной группы настроек.

Ссылки

1.citforum.ru
2.Wikipedia