Глава 2. Авторизация с помощью PAM

Содержание

2.1. Что такое PAM?
2.2. Структура файла конфигурации PAM
2.3. Конфигурация sshd с использованием PAM
2.4. Настройка модулей PAM
2.5. Настройка PAM при помощи pam-config
2.6. Ручная настройка PAM
2.7. Дальнейшие инструкции

Аннотация

При авторизации Linux использует PAM (pluggable authentication modules - подключаемые модули авторизации) в качестве прослойки между пользователем и приложением. Модули PAM доступны для всей системы, поэтому они могут быть запрошены любым приложением. Эта глава описывает механизм работы и настройку модулей авторизации.

2.1. Что такое PAM?

Системным администраторам и программистам часто требуется ограничить доступ к некоторым частям системы или функциям конкретного приложения. Если бы не было PAM, приложения необходимо было бы адаптировать к каждому новому механизму авторизации: LDAP, Samba, Kerberos. Такая адаптация также требовалась бы при появлении любого другого механизма авторизации. Эта процедура требует значительных временных ресурсов и подвержена ошибкам. Единственный путь для устранения этих недостатков - выделить авторизационный механизм из приложения и делегировать авторизацию централизованно управляемым модулям. После этого, при необходимости использовать новую схему аутентификации, ее достаточно адаптировать или написать подходящий модуль PAM для этой схемы.

Концепция PAM включает в себя:

  • Модули PAM, которые представляют собой набор разделяемых библиотек для использования определенными механизмами авторизации.

  • Стек модулей с одним и более модулями PAM.

  • Службу PAM, которой требуется авторизация с использованием модулей PAM или стека модулей. Как правило, в качестве имени службы используется имя соответствующего приложения - например, login или su. Имя службы other зарезервировано для правил по умолчанию.

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

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

2.2. Структура файла конфигурации PAM

Есть два способа конфигурации PAM:

Конфигурация с использованием одного файла (/etc/pam.conf)

Настройки каждой службы хранятся в /etc/pam.conf. Однако, из соображений сопровождения и юзабилити, данная схема конфигурации не используется в openSUSE.

Конфигурация с использованием директории (/etc/pam.d/)

Каждая служба (или программа), которая использует механизм PAM, хранит свой файл настроек в директории /etc/pam.d/. Например, служба sshd находится в файле /etc/pam.d/sshd.

Файлы в /etc/pam.d/ определяют модули PAM используемые для авторизации. Каждый файл состоит из строк, определяющих службу и каждая строка содержит до четырех компонентов:

TYPECONTROLMODULE_PATHMODULE_ARGS

Эти компоненты имеют следующее значение:

TYPE

Определяет тип службы. Модули PAM обрабатываются как стеки. Различные типы модулей используются для разных целей. Например один модуль производит проверку пароля, второй - размещения, с которого запрошен доступ, и еще один считывает относящиеся к пользователю настройки. PAM известно о четырех различных типах модулей:

auth

Проверяет подлинность пользователя, обычно запрашивая пароль. Однако для этого также можно использовать карту-ключ или биометрические данные (например сканирование отпечатков пальцев или радужной оболочки глаза).

account

Модули этого типа проверяют, есть ли у пользователя общие привилегии для доступа к запрашиваемой службе. Например, подобная проверка должна выполнятся для запрета входа в систему пользователей с истекшим сроком действия аккаунта.

password

Целью данного типа модулей является разрешение на изменение авторизационного токена. В большинстве случаев им является пароль.

session

Модули этого типа отвечают за управление и конфигурацию пользовательских сессий. Они запускаются до авторизации и после нее для учета попыток входа в систему и конфигурации пользовательского окружения (почтовых аккаунтов, домашних директорий, ограничений системы и т.д.)

CONTROL

Управляет поведением PAM модуля. Для каждого из модулей возможны следующие флаги управления:

required

Модуль с этим флагом должен быть успешно обработан для продолжения авторизации. В случае отказа модуля с флагом required обрабатываются остальные модули с этим флагом и только после этого пользователь получает сообщение о неудачной попытке авторизации.

requisite

Модули с этим флагом тоже должны быть обработаны успешно, так же как у модули с флагом required. Однако в случае неудачи модуль с этим флагом немедленно сообщает пользователю об отказе, и остальные модули не выполняются. В случае успеха другие модули обрабатываются последовательно, так же как и в случае модулей с флагом required. Флаг requisite может быть использован для базовой проверки наличия определенных условий необходимых для корректной авторизации.

sufficient

После успешного завершения работы модуля с этим флагом, запросившее авторизацию приложение получает немедленное сообщение об успехе и дальнейшая обработка модулей прекращается, при условии, что все предыдущие модули с флагом required выполнены успешно. Отказ модуля с флагом sufficient не имеет прямых последствий - все последующие модули выполняются в обычном порядке.

optional

Успешное выполнение или отказ модуля с этим флагом не имеет прямых последствий. Это может быть полезно для модулей, которые просто отображают уведомление (например, уведомляют пользователя о новом сообщении), не предпринимая никаких дальнейших действий.

include

При установке этого флага файл, указанный в качестве аргумента, вставляется в данное место.

MODULE_PATH

Содержит полное имя файла модуля PAM. Его не требуется указывать явно, если модуль находится в директории по умолчанию /lib/security (для 64-битных платформ, поддерживаемых openSUSE®, в директории /lib64/security).

MODULE_ARGS

Содержит разделенный пробелами список опций для управления модулем PAM, такие как debug (включает отладку) или nullok (позволяет использовать пустые пароли).

Кроме этого, существуют глобальные файлы настроек для модулей PAM в директории /etc/security, которые определяют точное поведение этих модулей (примерами являются файлы pam_env.conf и time.conf). Каждое приложение, которое использует модуль PAM, в действительности вызывает некоторый набор функций PAM, которые обрабатывают информацию в различных файлах конфигурации и возвращают результат запросившему его приложению.

Для облегчения создания и поддержки модулей PAM, были созданы общие дефолтные файлы конфигурации для типов модулей auth, account, password и session. Они извлечены из конфигурации PAM для каждого приложения. Обновления глобальных модулей конфигурации PAM в common-* распространяются таким образом на файлы конфигурации PAM, и администратору не требуется обновлять каждый файл конфигурации PAM по отдельности.

Глобальные файлы конфигурации PAM обслуживаются с помощью утилиты pam-config. Эта утилита автоматически добавляет новые модули в конфигурацию, изменяя конфигурацию существующих модулей или удаляет модули (или опции) из конфигурации. Ручные изменения при обслуживании конфигурации PAM сведены к минимуму или не требуются вовсе.

[Note]Смешанные 64-битные и 32-битные инсталляции

При использовании 64-битной операционной системы возможно также включать окружение для запуска 32-битных приложений. В этом случае убедитесь, что Вы установили обе версии PAM модулей.

2.3. Конфигурация sshd с использованием PAM

В качестве примера рассмотрим конфигурацию PAM для sshd:

Пример 2.1. Конфигурация PAM для sshd (/etc/pam.d/sshd)

#%PAM-1.0                               1
auth     requisite      pam_nologin.so 2
auth     include        common-auth 3
account  requisite      pam_nologin.so 2
account  include        common-account 3
password include        common-password 3
session  required       pam_loginuid.so 4
session  include        common-session 3

1

Объявляет версию этого конфигурационного файла - PAM 1.0. Это просто соглашение, но его можно использовать в будущем для проверки версии.

2

Проверяет, существует ли /etc/nologin. Если да - логин разрешен только пользователю root.

3

Ссылается на конфигурационные файлы четырех типов модулей: common-auth, common-account, common-password и common-session. Эти четыре файла содержат дефолтные настройки для каждого типа модуля.

4

Устанавливает атрибут uid для процесса, который прошел авторизацию.


Включая эти файлы вместо добавления каждого модуля по отдельности в соответствующую конфигурацию PAM, Вы автоматически получаете обновляемую конфигурацию PAM в случае, если администратор сменит дефолтные настройки. Ранее после изменений в PAM или после установки нового приложения Вам приходилось бы изменять конфигурационные файлы для всех приложений вручную. Сейчас настройка PAM производится централизованно и все изменения автоматически наследуются конфигурацией каждой службы PAM.

Первый подключаемый файл (common-auth) вызывает три модуля типа auth: pam_env.so, pam_gnome_keyring.so и pam_unix2.so.См. Пример 2.2, «Дефолтная конфигурация секции auth (common-auth.

Пример 2.2. Дефолтная конфигурация секции auth (common-auth)

auth    required        pam_env.so           1
auth    optional        pam_gnome_keyring.so 2
auth    required        pam_unix2.so         3

1

pam_env.so загружает /etc/security/pam_env.conf для установки переменных окружения в соответствии со значениями в этом файле. Он может быть использован для установки корректного значения переменной DISPLAY, поскольку модулю pam_env известно, откуда производится логин.

2

Этот модуль автоматически разблокирует ключи GNOME при необходимости.

3

pam_unix2, проверяет логин и пароль пользователя, используя /etc/passwd и /etc/shadow.

Весь стек модулей auth обрабатывается до получения sshd любой информации о результате авторизации. Поскольку все модули стека имеют управляющий флаг required, они должны быть успешно обработаны до получения sshd сообщения об успехе. Если один из модулей вернет отрицательный результат, весь стек модулей будет обработан до конца и только затем sshd будет уведомлен об отрицательном результате.

После успешного завершения всех модулей типа auth будет обработано следующее выражение. В нашем случае Пример 2.3, «Дефолтная конфигурация секции account (common-account. common-account содержит всего один модуль, pam_unix2. Если pam_unix2 сообщит, что пользователь существует, sshd будет уведомлен об этом и будет обработан следующий стек модулей (password), показанный в Пример 2.4, «Дефолтная конфигурация секции password (common-password.

Пример 2.3. Дефолтная конфигурация секции account (common-account)

account required        pam_unix2.so

Пример 2.4. Дефолтная конфигурация секции password (common-password)

password requisite      pam_pwcheck.so  nullok cracklib
password        optional        pam_gnome_keyring.so    use_authtok
password        required        pam_unix2.so    use_authtok nullok

Итак, конфигурация PAM для sshd включает в себя только выражение include, ссылающееся на дефолтную конфигурацию модулей password, которая находится в common-password. Эти модули должны завершиться успешно (управляющие флаги requisite и required) при запросе приложением смены токена авторизации.

Изменение пароля или другого токена авторизации требует проверки безопасности. Она производится при помощи модуля pam_pwcheck. Модуль pam_unix2 используемый далее, подхватывает любые новые и старые пароли у pam_pwcheck, так что пользователю не требуется повторная авторизация после смены пароля. Эта процедура делает невозможным обход проверок, производимых модулем pam_pwcheck. В случае, если нужно настроить типы account или auth на блокировку аккаунтов после истечения срока действия пароля, модули password тоже должны быть использованы.

Пример 2.5. Дефолтная конфигурация секции session (common-session)

session required        pam_limits.so
session required        pam_unix2.so
session optional        pam_apparmor.so
session optional        pam_umask.so
session optional        pam_gnome_keyring.so    auto_start only_if=gdm,lxdm

Последними вызываются модули типа session (встроенные в файл common-session) для настройки сессии пользователя в соответствии с конкретным пользователем. Модуль pam_limits загружает файл /etc/security/limits.conf, который может определять ограничения на использование определенных ресурсов системы. Модуль pam_unix2 обрабатывается снова. Модуль pam_umask может быть использован для определения маски битов доступа создаваемых файлов. Поскольку этот модуль задан с флагом optional, отказ этого модуля не повлияет на успешное выполнение всего стека модулей сессии. Модули session вызываются во второй раз при выходе пользователя из системы.

2.4. Настройка модулей PAM

Некоторые из модулей PAM можно конфигурировать. Файлы настроек находятся в директории /etc/security. Эта секция кратко описывает файлы конфигурации имеющие отношение к примеру с sshd — pam_env.conf и limits.conf.

2.4.1. pam_env.conf

pam_env.conf может быть использован для определения стандартного пользовательского окружения, которое устанавливается при вызове модуля pam_env. Он позволяет установить переменные окружения используя следующий синтаксис:

VARIABLE  [DEFAULT=value]  [OVERRIDE=value]
VARIABLE

Имя переменной окружения.

[DEFAULT=<value>]

Значение по умолчанию value, которое хочет установить администратор.

[OVERRIDE=<value>]

Значения, которые могут быть запрошены и установлены pam_env, перекрывая дефолтное значение.

Типичный пример использования pam_env — изменение переменной DISPLAY, которая изменяется в случае удаленного входа в систему. Это описано в Пример 2.6, «pam_env.conf».

Пример 2.6. pam_env.conf

REMOTEHOST     DEFAULT=localhost OVERRIDE=@{PAM_RHOST}
DISPLAY        DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY}

Первая строка устанавливает значение переменной REMOTEHOST в localhost, которое используется, если pam_env не может определить другое значение. В свою очередь, переменная DISPLAY содержит значение REMOTEHOST. Дополнительную информацию можно найти в комментариях к файлу /etc/security/pam_env.conf.

2.4.2. pam_mount.conf

Задача pam_mount — примонтировать домашние каталоги пользователей во время входа в систему и отмонтировать их во время выхода. Этот модуль используется для окружения, в котором центральный файловый сервер хранит все домашние директории пользователей. Используя этот метод нет неободимости монтировать /home полностью, с домашними директориями всех пользователей. Вместо этого монтируется только домашний каталог того пользователя, который находится в процессе входа в систему.

После установки pam_mount, шаблон файла pam_mount.conf.xml доступен в /etc/security. Описание различных его элементов можно найти в справочной системе man 5 pam_mount.conf.

Базовую настройку этого модуля можно произвести с помощью YaST. Выберите Сетевые службы+Членство в домене Windows+Настройки эксперта чтобы добавить файловый сервер; подробнее смотрите Раздел “Configuring Clients” (Глава 15, Samba, ↑Содержание).

2.4.3. limits.conf

Ограничения для пользователя или группы могут быть установлены в файле limits.conf, который используется модулем pam_limits. Этот файл позволяет установить жесткие ограничения, нарушение которых не допускается, и мягкие ограничения, которые можно нарушить временно. Подробную информацию о синтаксисе и опциях можно найти в комментариях к файлу /etc/security/limits.conf.

2.5. Настройка PAM при помощи pam-config

Утилита pam-config поможет Вам настроить глобальные файлы конфигурации PAM (/etc/pam.d/common-*-pc), а также несколько других приложений. Для отображения списка поддерживаемых модулей используйте команду pam-config --list-modules. Команда pam-config используется для сопровождения файлов конфигурации PAM. С ее помощью можно добавлять модули в Вашу конфигурации PAM, удалять их, или модифицировать их опции. При изменении глобальных файлов конфигурации PAM не требуется ручная настройка PAM для каждого отдельного приложения.

Простой пример использования pam-config выглядит так:

  1. Автоматическое создание новой конфигурации PAM в стиле Unix.  Давайте при помощи pam-config создадим простейшую конфигурацию, которую Вы сможете расширить позже. Команда pam-config --create создает простую конфигурацию для авторизации в UNIX. Существующие файлы конфигурации будут перезаписаны, а их резервные копии сохранены как *.pam-config-backup.

  2. Добавление нового метода авторизации.  Добавление нового метода авторизации (например, LDAP) в Ваш стек модулей PAM сводится к простой команде pam-config --add --ldap. При необходимости LDAP добавляется во все common-*-pc файлы конфигурации PAM.

  3. Включение отладочной информации для тестирования.  Чтобы убедиться в работоспособности новой процедуры авторизации, включим отладку для всех операций, связанных с PAM. С помощью команды pam-config --add --ldap-debug отладку можно включить для всех операций PAM связанных с LDAP. Отладочную информацию можно найти в файле /var/log/messages.

  4. Проверка конфигурации.  Перед окончательным запуском новой конфигурации PAM, проверьте, содержит ли она все настройки, которые Вы хотели в нее добавить. Команда pam-config --query --module отображает тип и параметры для запрашиваемого модуля PAM.

  5. Отключение отладочной информации.  Теперь, когда мы окончательно удовлетворены конфигурацией, отключим отладку. Команда pam-config --delete --ldap-debug отключает отладку для LDAP авторизации. Если Вы включали отладку для других модулей, используйте аналогичные команды, чтобы выключить и их.

Подробную информацию о команде pam-config и ее опциях можно получить в справочном руководстве о команде pam-config(8).

2.6. Ручная настройка PAM

Если Вы предпочитаете создавать и поддерживать файлы конфигурации PAM вручную, убедитесь, что pam-config запрещена для этих файлов.

Когда Вы создаете файлы конфигурации PAM с нуля используя команду pam-config --create, она создает символические ссылки с файлов common-* на файлы common-*-pc. Удаление этих символических ссылок эффективно для отключения pam-config, так как pam-config оперирует только файлами common-*-pc и эти файлы не изменятся при отсутствии символических ссылок.

2.7. Дальнейшие инструкции

После установки системы в директории /usr/share/doc/packages/pam можно найти дополнительную документацию:

README

В этой директории есть общий файл README. Поддиректория modules содержит файлы README для доступных модулей PAM.

Linux-PAM. Руководство системного администратора

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

Руководство для создателей модулей Linux-PAM

Этот документ обобщает данную тему с точки зрения разработчика, описывая, как создавать модули PAM соответствующие стандартам.

Linux-PAM. Руководство разработчика приложений

Этот документ содержит все, что нужно разработчику, который хочет использовать библиотеки PAM в своем приложении.

Справочное руководство PAM

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