Для пользователей Linux безопасное предоставление общего доступа к файлам является достаточно трудоемкой задачей. В частности, она порождает необходимость запоминать множество паролей и требует больших затрат времени на модификацию приложений системного доступа (таких как login, su, password, ftp и т. п.). Дело усложняется тем, что это процесс аутентификации, во время которого система идентифицирует пользователя и предоставляет ему соответствующий доступ.
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:
- 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_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 в основном сосредоточены в файле /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 /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. Ссылки приведены в разделе Ресурсы.
Научиться
-
Оригинал статьи (EN).
- Сборник руководств Linux-PAM
(EN) содержит документацию по проблемам системного администрирования, написанию модулей и разработке приложений.
- Взгляд на PAM со стороны
Неофициального FAQ по SUSE Linux (EN).
- Если вам необходимо обновление, на сайте Gentoo есть
руководство по обновлению Linux-PAM (EN).
- Взгляните на
модель архитектуры X/Open Single Sign-on Service (XSSO) (EN).
- Готовы к более подробным материалам по работе с PAM?
- Сравнение подсистем безопасности в AIX, Linux и Solaris (developerWorks, октябрь 2005 г.; ): как работают PAM в этих системах.
- Применение пространства имен монтирования (developerWorks, сентябрь 2007 г.; ): познакомьтесь с соответствующей частью модулей PAM.
- Централизованное управление учетными записями пользователей при помощи OpenLDAP (developerWorks, май 2006 г.; EN): узнайте, как PAM в Linux взаимодействуют с LDAP.
- Усиление безопасности при помощи многоэкземплярности (developerWorks, февраль 2008 г.; EN): использование подключаемых модулей аутентификации для защиты личной информации.
- Учебник для экзамена LPI 202, Тема 210: Управление сетевыми клиентами (developerWorks, май 2006 г.): настройка PAM для обеспечения аутентификации.
- Настройка PAM в SUSE Enterprise Linux 9 (Technote (IBM Tivoli Netcool/OMNIbus), октябрь 2008 г.; EN): настройка модуля PAM для аутентификации локальных пользователей при помощи ObjectServer.
- В
разделе Linux сайта developerWorks можно найти дополнительные ресурсы для разработчиков Linux и
самые популярные среди наших читателей статьи и руководства (EN).
-
Посмотрите все
советы по Linux и
руководства по Linux на сайте developerWorks.
-
Следите на последними новостями на портале
Web-трансляций и технических мероприятий developerWorks (EN).
Получить продукты и технологии
-
Используйте в своем следующем проекте разработки для Linux
ознакомительные версии программного обеспечения IBM, которые можно скачать непосредственно с developerWorks.(EN)
Обсудить
- Примите участие в обсуждении материала на форуме.
-
Присоединяйтесь к
сообществу developerWorks и знакомьтесь с блогами, форумами, подкастами и материалами для совместного обсуждения на обновленном пространстве нашего портала developerWorks.(EN)
Вишал Сривистава (Vishal Srivistava) имеет опыт работы с ядрами многих разновидностей UNIX и Linux. С июня 2007 года он работает в IBM India Software Labs и в настоящее время он входит в группу разработчиков основного кода IBM IIS. В этом качестве он получил большой опыт настройки разрабатываемого группой приложения для использования PAM на множестве платформ UNIX.