Основы и настройка PAM

Основы подключаемых модулей аутентификации (Pluggable Authentication Modules), их настройка и создание приложения входа в систему

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

Вишал Сривистава, разработчик ПО, IBM

Вишал Сривистава (Vishal Srivistava) имеет опыт работы с ядрами многих разновидностей UNIX и Linux. С июня 2007 года он работает в IBM India Software Labs и в настоящее время он входит в группу разработчиков основного кода IBM IIS. В этом качестве он получил большой опыт настройки разрабатываемого группой приложения для использования PAM на множестве платформ UNIX.



04.06.2009

Для пользователей 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 и загружает соответствующие модули
Рисунок 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:

  1. Linux-PAM: охватывает все типы PAM, обсуждаемые в этой статье. Основная архитектура PAM на любой платформе Linux подобна версии Linux-PAM.
  2. OpenPAM - другая реализация PAM, разработанная Дагом-Эрлингом Сморгравом (Dag-Erling Smorgrav) в NAI Labs, в рамках программы исследований DARPA-CHATS. Поскольку это реализация с открытым кодом, она в основном используется во FreeBSD, NetBSD и приложениях (а также в Mac OS X).
  3. Java™ PAM или JPam: PAM – это фактически стандартные модули аутентификации с поддержкой Linux и UNIX. JPam выступает в качестве моста между кодом Java и обычными PAM. При помощи JPam приложения на Java могут использовать модули PAM и связанные с ними средства (такие как auth, account, passwd, session, и т. п.).

Несмотря на существование различных реализаций PAM их основная функциональность остается одинаковой.

Из чего состоят модули PAM?

Установка PAM состоит из нескольких шагов. Инструкции по установке см. в разделе Ресурсы.

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

  1. Модуль аутентификации используется для аутентификации пользователей или создания и удаления учетных данных.
  2. Модуль управления учетными записями выполняет действия, связанные с доступом, истечением учетных данных или записей, правилами и ограничениями для паролей и т. д.
  3. Модуль управления сеансами используется для создания и завершения сеансов.
  4. Модуль управления паролями выполняет действия, связанные с изменением и обновлением пароля.

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.dauthrequired/lib/security/pam_unix.so
Red Hat/etc/pam.daccountsufficient/lib/security/pam_unix.so
Red Hat/etc/pam.dsessionrequired/lib/security/pam_limit.so
AIX/etc/pam.confauthrequired/usr/lib/security/pam_aix
AIX/etc/pam.confaccountrequired/usr/lib/security/pam_aix
AIX/etc/pam.confpasswordrequired/usr/lib/security/pam_aix
zSUSE 64-bit | 32-bit/etc/pam.confauthrequired/lib64/security/pam_unix.so | /lib/security/pam_unix.so
zSUSE 64-bit | 32-bit/etc/pam.confaccountrequired/lib64/security/pam_unix.so | /lib/security/pam_unix.so
zSUSE 64-bit | 32-bit/etc/pam.confsessionrequired/lib64/security/pam_unix.so | /lib/security/pam_unix.so
Solaris/etc/pam.confauthrequired/usr/lib/security/pam_unix.so.1
Solaris/etc/pam.confaccountrequired/usr/lib/security/pam_unix.so.1
Solaris/etc/pam.confpasswordrequired/usr/lib/security/pam_unix.so.1
HP-UX/etc/pam.confauthrequiredlibpam_unix.so.1
HP-UX/etc/pam.confaccountrequiredlibpam_unix.so.1
HP-UX/etc/pam.confpasswordrequiredlibpam_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. Вызывается два модуля:

  1. Вначале вызывается pam_warn.so для записи информации о текущей попытке аутентификации.
  2. Затем вызывается pam_deny.so, который просто возвращает отказ и запрещает все типы подключения или аутентификации.

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

10 шагов для создания простого PAM-приложения входа в систему

Эти 10 шагов помогут вам создать собственное PAM-приложение и помогут понять, как работает сеанс PAM:

  1. Включите заголовочные файлы, необходимые для использования PAM (например, pam_appl.h, pam_misc.h).
  2. В функции main инициализируйте библиотеку PAM libpam.so (которая загружает модули, указанные в файле конфигурации для приложения) при помощи уникального идентификатора.
  3. Попытайтесь выполнить аутентификацию для всех модулей и рассмотрите сценарии отказов.
  4. Проверьте учетные данные пользователей и параметры учетных записей.
  5. Откройте новый сеанс PAM.
  6. Создайте среду для пользователя при помощи учетных данных.
  7. По завершении работы пользователя закройте пользовательскую среду.
  8. Закройте сеанс PAM.
  9. Выйдите из библиотеки libpam.so с соответствующим идентификатором.
  10. Выход.

Заключение

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

  • с основами архитектуры PAM;
  • с настройкой модулей PAM;
  • с созданием PAM-приложения для входа в систему, помогающим понять его работу.

Теперь вы можете перейти к более сложным материалам по использованию PAM. Ссылки приведены в разделе Ресурсы.

Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux
ArticleID=394316
ArticleTitle=Основы и настройка PAM
publish-date=06042009