Формат конфигурационного файла Linux-PAM
Давайте рассмотрим подробнее конфигурационный файл службы подключаемых модулей аутентификации.
Что есть конфигурационный файл? Это файл /etc/pam.conf или набор файлов в каталоге /etc/pam.d с именами, которые совпадают с именами отдельных служб.
Оформляется как последовательность строк, каждая из которых информирует о подключении отдельного аутентификационного модуля и имеет следующий формат:
Поле service определяет прикладную службу и может принимать, например, такие значение: login, rlogin, rsh, telnet, ftp, passwd, OTHER (последнее отвечает всем тем службам, которые не указаны явным образом). Присутствует, только если в качестве конфигурационного файла используется файл /etc/pam.conf.
Поле module_type определяет тип аутентификационного модуля. Возможные значения: auth, account, session, password.
Поле control_flag определяет поведение системы в случаях, когда с одной службой связывается несколько аутентификационных модулей одного типа (когда стекуется несколько аутентификационных модулей). Возможные значения: requisite, required, sufficient, optional.
Поле module_path указывает на расположение аутентификационных модулей в файловой системе (содержит имена файлов с аутентификационными модулями).
Поле options содержит специфические для всех аутентификационных модулей опции (например, use_smart_card).

login auth required pam_unix_auth.so
login session required pam_unix_session.so
login account required pam_unix_account.so
ftp auth required pam_skey_auth.so
ftp session required pam_unix_session.so
passwd password required pam_unix_passwd.so
OTHER auth required pam_unix_auth.so
OTHER session required pam_unix_session.so
OTHER account required pam_unix_account.so
При связывании нескольких аутентификационных механизмов с одной службой возникают следующие две проблемы:
- реализация самой возможности подключать к одной службе несколько произвольных альтернативных аутентификационных механизмов одновременно (без переработки программного обеспечения этой службы);
- упрощение процедуры, через которую приходится проходить пользователю, когда применяется несколько аутентификационных механизмов одновременно.
Первая проблема в системе PAM решается путем реализации возможности динамического связывания программного обеспечения прикладных служб с несколькими произвольными аутентификационными модулями одного типа одновременно (в терминологии PAM это называется стековкой аутентификационных модулей). Для этого в конфигурационном файле нужно поместить несколько строк с одинаковым значением полей service и module_type. Стекуемые аутентификационные модули вызываются в той последовательности, в которой они перечислены в конфигурационном файле.

login auth required pam_unix_auth.so
login auth required pam_kerb_auth.so use_mapped_pass
login auth optional pam_rsa_auth.so use_first_pass
rlogin auth sufficient pam_rhosts_auth.so
rlogin auth required pam_unix_auth.so

Поле control_flag определяет поведение системы в зависимости от результата выполнение соответствующего аутентификационного модуля.
На практике применяется, главным образом, стековка модулей аутентификации. Дальше рассмотрим семантику значений поля control_flag по отношению к модулям аутентификации:
- requisite: как только соответствующий модуль возвратит ошибку, принимается решение о неуспехе аутентификации, при этом остальные стекуемые модули уже не выполняются;
- required: если соответствующий модуль возвратит ошибку, принимается решение о неуспехе аутентификации, но при этом остальные стекуемые модули тоже выполняются;
- sufficient: если соответствующий модуль будет выполнен успешно, принимается решение об успехе аутентификации, при этом остальные стекуемые модули уже не выполняются (но только если все предыдущие модули, помеченные как required, тоже выполнены успешно);
- optional: успех и ошибка соответствующего модуля имеют значение, только если это единый модуль, подключенный к данной службе (в других случаях неуспех выполнения такого модуля не считается основанием для отказа в аутентификации).
Применение нескольких аутентификационных механизмов одновременно может требовать от пользователей запоминания нескольких паролей. Это неудобно, однако, использование одного пароля для разных механизмов приводит к уязвимости стойкости системы аутентификации в общем, поскольку компрометация одного пароля приводила бы в таком случае к компрометации системы в целом. Кроме того, разные аутентификационные механизмы предъявляют разные требования относительно паролей (относительно длины, алфавита, интервала обновления и т.п.), что усложняет применение одного пароля для нескольких аутентификационных механизмов.
Для решения этой проблемы в системе PAM предусмотренный механизм маппинга паролей (password mapping). Благодаря этому механизму пользователю, который реально имеет разные пароли для разных аутентификационных механизмов, достаточно помнить лишь один из своих паролей — основной (primary). Предполагается, что это наиболее стойкий из паролей пользователя. Другие – дополнительные (secondary) – пароли пользователя сохраняются в домашнем каталоге пользователя или другом защищенном месте (например, на флеш-карте пользователя) в зашифрованном виде; при этом в качестве ключа шифрования используется основной пароль пользователя.
Для поддержки возможности использовать одного пароля для нескольких аутентификационных механизмов разработчики аутентификационных модулей должны поддерживать следующие опции:
- use_first_pass: использовать тот же пароль, что и первый для стекуемых аутентификационных модулей, при этом в случае неудачной аутентификации по этому паролю не спрашивать новый;
- try_first_pass: использовать тот же пароль, что и первый для стекуемых аутентификационных модулей, при этом в случае неудачной аутентификации по этому паролю спросить новый;
- use_mapped_pass: получить пароль с использованием механизма маппинга паролей, при этом в случае неудачной аутентификации по этому паролю не спрашивать новый;
- try_mapped_pass: получить пароль с использованием механизма маппинга паролей, при этом в случае неудачной аутентификации по этому паролю спросить новый.
Механизм маппинга паролей не может быть применен для аутентификационных модулей, которые предусматривают использование одноразовых паролей.
Твитнуть
Спасибо за ликбез)