 | Уровень сложности: простой Вишал Сривистава, разработчик ПО, IBM
04.06.2009 Подключаемые модули аутентификации (Pluggable Authentication Modules, PAM) – это набор API, используемых разработчиками приложений для функций, связанных с безопасностью, таких как аутентификация пользователей, шифрование данных, взаимодействие с LDAP и т.д. В этой статье дается базовое введение в модель PAM для Linux, приводятся примеры настройки PAM и описывается создание PAM-приложения входа в систему за 10 простых шагов.
Для пользователей Linux безопасное предоставление общего доступа к файлам является достаточно трудоемкой задачей. В частности, она порождает необходимость запоминать множество паролей и требует больших затрат времени на модификацию приложений системного доступа (таких как login, su, password, ftp и т. п.). Дело усложняется тем, что это процесс аутентификации, во время которого система идентифицирует пользователя и предоставляет ему соответствующий доступ.
История использования PAM
PAM – это набор API для аутентификации пользователей. До появления PAM такие приложения, как login (а также rlogin,
telnet, rsh), искали имя пользователя в файле /etc/passwd, сравнивали оба значения и выполняли аутентификацию пользователя по введенному им имени. Все приложения использовали эти общие службы, хотя детали реализации и полномочия для их настройки различались.
Затем разработчики приложений попытались создавать собственные процессы. Для этого понадобилось разделить модули приложения и безопасности (общий модуль безопасности мог использоваться всеми приложениями и настраиваться как необходимо).
Механизм PAM объединяет множество низкоуровневых схем аутентификации в API высокого уровня, позволяющий создавать приложения, использующие аутентификацию независимо от применяемой схемы аутентификации. Принципиальным свойством PAM является динамическая настройка аутентификации при помощи файла /etc/pam.d или /etc/pam.conf.
PAM можно настроить так, чтобы запретить отдельным программам аутентифицировать пользователей и уведомлять, когда они пытаются выполнить аутентификацию. PAM-программы используют модули PAM (модули аутентификации), которые для использования подключаются к приложениям во время работы.
На рисунке 1 показаны основные этапы работы модуля PAM.
Рисунок 1. Библиотека PAM обрабатывает файл pam.d и загружает соответствующие модули
Операционные системы, поддерживающие PAM
PAM был разработан Sun Microsystems в 1995 году и поддерживается следующими версиями операционных систем (и более новыми):
- RedHat 5.0
- SUSE 6.2
- Debian 2.2
- Mandrake 5.2
- Caldera 1.3
- TurboLinux 3.6
Также PAM поддерживается новыми версиями Solaris™, AIX®, HP-UX и Mac OS® X. Позже PAM был стандартизирован в рамках процесса стандартизации X/Open UNIX® (в составе архитектуры службы X/Open single sign-on (XSSO)).
Реализации PAM
Хотя строгая классификация отсутствует, можно сказать, что существует три реализации PAM:
- Linux-PAM: охватывает все типы PAM, обсуждаемые в этой статье. Основная архитектура PAM на любой платформе Linux подобна версии Linux-PAM.
- OpenPAM - другая реализация PAM, разработанная Дагом-Эрлингом Сморгравом (Dag-Erling Smorgrav) в NAI Labs, в рамках программы исследований DARPA-CHATS. Поскольку это реализация с открытым кодом, она в основном используется во FreeBSD, NetBSD и приложениях (а также в Mac OS X).
- Java™ PAM или JPam: PAM – это фактически стандартные модули аутентификации с поддержкой Linux и UNIX. JPam выступает в качестве моста между кодом Java и обычными PAM. При помощи JPam приложения на Java могут использовать модули PAM и связанные с ними средства (такие как auth, account,
passwd, session, и т. п.).
Несмотря на существование различных реализаций PAM их основная функциональность остается одинаковой.
Из чего состоят модули PAM?
Установка PAM состоит из нескольких шагов. Инструкции по установке см. в разделе
Ресурсы.
Модули PAM классифицируются по типу модуля. Каждый модуль должен выполнять функции хотя бы одного из четырех типов:
- Модуль аутентификации используется для аутентификации пользователей или создания и удаления учетных данных.
- Модуль управления учетными записями выполняет действия, связанные с доступом, истечением учетных данных или записей, правилами и ограничениями для паролей и т. д.
- Модуль управления сеансами используется для создания и завершения сеансов.
- Модуль управления паролями выполняет действия, связанные с изменением и обновлением пароля.
PAM обеспечивает различные функциональные возможности, такие как: аутентификация с однократной регистрацией, управление доступом и другие. Их реализация обеспечивается различными модулями:
pam_access обеспечивает управление входом в систему в виде протоколируемой службы при помощи имени пользователя и домена в зависимости от правил, указанных заранее в файле /etc/security/access.conf.
pam_cracklib проверяет пароли на соответствие правилам для паролей.
pam_env sets/unsets устанавливает и сбрасывает переменные среды из файла /etc/security/pam_env_conf.
pam_debug выполняет отладку PAM.
pam_deny блокирует модули PAM.
pam_echo выводит сообщения.
pam_exec выполняет внешнюю команду.
pam_ftp модуль для анонимного доступа.
pam_localuser проверяет наличие имени пользователя в файле /etc/passwd.
pam_unix выполняет обычную аутентификацию на основе пароля из файла /etc/passwd.
Существует множество других модулей (pam_userdb,
pam_warn, pam_xauth),
), перехватывающих набор возвращаемых значений. Подробную информацию об этих модулях можно найти в Руководстве по администрированию PAM в разделе
Ресурсы.
Настройка PAM
Настройки PAM в основном сосредоточены в файле /etc/pam.d или
/etc/pam.conf (для старых версий).
Структура файла конфигурации
Для каждой службы, использующей PAM, в каталоге создается соответствующий файл, содержащий правила и инструкции о том, какая информация об аутентификации или учетной записи должна быть предоставлена для этой службы. Обычно каждая строка содержит одно правило.
Поля файла конфигурации PAM содержат следующую информацию:
Service_name указывает название службы или приложения. По умолчанию – OTHER.
Module_type указывает тип модуля (auth/account/session/passwd) для соответствующей службы, указанной в поле Service_name.
Control_flag указывает дополнительное свойство для модуля. Оно может принимать следующие значения:
requisite (необходимый),
required (требуемый),
sufficient (достаточный) и
optional (необязательный).
Module_path указывает путь к объекту библиотеки, использующемуся в модуле. По умолчанию он имеет значение
/lib/security.
Module_options/module_args
(дополнительные поля) указывает параметры или аргументы, которые могут быть переданы модулям службы.
Модули вызываются в том порядке, в котором они указаны в файле конфигурации, в зависимости от значения поля
Control_flag (Управляющий флаг) для каждого модуля. Поле Control_flag принимает следующие значения:
- required (требуемый): все требуемые модули в стеке должны вернуть положительный ответ. Если один или несколько требуемых модулей вернут отрицательный ответ, все требуемые модули будут выполнены, но запрос будет отвергнут.
- sufficient (достаточный): если модуль помечен как достаточный и перед ним ни один из необходимых или достаточных модулей не возвратил отрицательного ответа, то все оставшиеся модули в стеке игнорируются, и возвращается положительный ответ.
- optional (дополнительный): если в стеке нет требуемых модулей и ни один из достаточных модулей не возвратил положительного ответа, то хотя бы один из дополнительных модулей приложения или службы должен вернуть положительный ответ.
Примеры конфигурационных файлов PAM
В таблице 1 приведены сведения о конфигурационных файлах PAM для различных операционных систем:
Таблица 1. Конфигурационные файлы PAM
| Операционная система | Расположен в ... | Тип | Control_flag | Модуль |
|---|
| Red Hat | /etc/pam.d | auth | required | /lib/security/pam_unix.so | | Red Hat | /etc/pam.d | account | sufficient | /lib/security/pam_unix.so | | Red Hat | /etc/pam.d | session | required | /lib/security/pam_limit.so | | AIX | /etc/pam.conf | auth | required | /usr/lib/security/pam_aix | | AIX | /etc/pam.conf | account | required | /usr/lib/security/pam_aix | | AIX | /etc/pam.conf | password | required | /usr/lib/security/pam_aix | | zSUSE 64-bit | 32-bit | /etc/pam.conf | auth | required | /lib64/security/pam_unix.so | /lib/security/pam_unix.so | | zSUSE 64-bit | 32-bit | /etc/pam.conf | account | required | /lib64/security/pam_unix.so | /lib/security/pam_unix.so | | zSUSE 64-bit | 32-bit | /etc/pam.conf | session | required | /lib64/security/pam_unix.so | /lib/security/pam_unix.so | | Solaris | /etc/pam.conf | auth | required | /usr/lib/security/pam_unix.so.1 | | Solaris | /etc/pam.conf | account | required | /usr/lib/security/pam_unix.so.1 | | Solaris | /etc/pam.conf | password | required | /usr/lib/security/pam_unix.so.1 | | HP-UX | /etc/pam.conf | auth | required | libpam_unix.so.1 | | HP-UX | /etc/pam.conf | account | required | libpam_unix.so.1 | | HP-UX | /etc/pam.conf | password | required | libpam_unix.so.1 |
Файл политик PAM «other»
Файл конфигурации политик PAM /etc/pam.d
используется для указания модулей аутентификации по умолчанию, то есть для тех приложений, о которых в файле конфигурации ничего не сказано явным образом. Он, вероятно, является самым простым и надежным файлом конфигурации PAM по умолчанию. Внутри этого файла мы можем увидеть что-то подобное:
/etc/pam.d/other File
auth required pam_warn.so
auth required pam_deny.so
account required pam_warn.so
account required pam_deny.so
password required pam_warn.so
password required pam_deny.so
session required pam_warn.so
session required pam_deny.so
|
Этот файл устроен очень просто. Для всех типов модулей указано одинаковое значение Control_flag – required. Вызывается два модуля:
- Вначале вызывается
pam_warn.so для записи информации о текущей попытке аутентификации.
- Затем вызывается
pam_deny.so, который просто возвращает отказ и запрещает все типы подключения или аутентификации.
Таким образом, все службы, использующие PAM, должны быть явно настроены для разрешения аутентификации, иначе попытки будут отвергнуты.
10 шагов для создания простого PAM-приложения входа в систему
Эти 10 шагов помогут вам создать собственное PAM-приложение и помогут понять, как работает сеанс PAM:
- Включите заголовочные файлы, необходимые для использования PAM (например, pam_appl.h, pam_misc.h).
- В функции
main инициализируйте библиотеку PAM libpam.so (которая загружает модули, указанные в файле конфигурации для приложения) при помощи уникального идентификатора.
- Попытайтесь выполнить аутентификацию для всех модулей и рассмотрите сценарии отказов.
- Проверьте учетные данные пользователей и параметры учетных записей.
- Откройте новый сеанс PAM.
- Создайте среду для пользователя при помощи учетных данных.
- По завершении работы пользователя закройте пользовательскую среду.
- Закройте сеанс PAM.
- Выйдите из библиотеки libpam.so с соответствующим идентификатором.
- Выход.
Заключение
Применение PAM для превращения работы с низкоуровневой аутентификацией в более управляемый и целостный процесс – это разумный шаг по упрощению этого механизма безопасности. В этой статье вы познакомились:
- с основами архитектуры PAM;
- с настройкой модулей PAM;
- с созданием PAM-приложения для входа в систему, помогающим понять его работу.
Теперь вы можете перейти к более сложным материалам по использованию PAM. Ссылки приведены в разделе
Ресурсы.
Ресурсы Научиться
Получить продукты и технологии
Обсудить
Об авторе  | |  | Вишал Сривистава (Vishal Srivistava) имеет опыт работы с ядрами многих разновидностей UNIX и Linux. С июня 2007 года он работает в IBM India Software Labs и в настоящее время он входит в группу разработчиков основного кода IBM IIS. В этом качестве он получил большой опыт настройки разрабатываемого группой приложения для использования PAM на множестве платформ UNIX. |
Выскажите мнение об этой странице
|  |