Содержание
Аннотация
При авторизации Linux использует PAM (pluggable authentication modules - подключаемые модули авторизации) в качестве прослойки между пользователем и приложением. Модули PAM доступны для всей системы, поэтому они могут быть запрошены любым приложением. Эта глава описывает механизм работы и настройку модулей авторизации.
Системным администраторам и программистам часто требуется ограничить доступ к некоторым частям системы или функциям конкретного приложения. Если бы не было PAM, приложения необходимо было бы адаптировать к каждому новому механизму авторизации: LDAP, Samba, Kerberos. Такая адаптация также требовалась бы при появлении любого другого механизма авторизации. Эта процедура требует значительных временных ресурсов и подвержена ошибкам. Единственный путь для устранения этих недостатков - выделить авторизационный механизм из приложения и делегировать авторизацию централизованно управляемым модулям. После этого, при необходимости использовать новую схему аутентификации, ее достаточно адаптировать или написать подходящий модуль PAM для этой схемы.
Концепция PAM включает в себя:
Модули PAM, которые представляют собой набор разделяемых библиотек для использования определенными механизмами авторизации.
Стек модулей с одним и более модулями PAM.
Службу PAM, которой требуется авторизация с использованием
модулей PAM или стека модулей. Как правило, в качестве имени службы используется
имя соответствующего приложения - например, login или
su. Имя службы other
зарезервировано
для правил по умолчанию.
Аргументы модуля, с помощью которых можно управлять выполнением конкретного модуля PAM.
Механизм, определяющий результат выполнения конкретного модуля PAM. Положительный результат приводит к выполнению следующего модуля 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
используемые для авторизации. Каждый файл состоит из строк, определяющих службу
и каждая строка содержит до четырех компонентов:
TYPE
CONTROL
MODULE_PATH
MODULE_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 сведены к минимуму или не требуются вовсе.
Смешанные 64-битные и 32-битные инсталляции | |
---|---|
При использовании 64-битной операционной системы возможно также включать окружение для запуска 32-битных приложений. В этом случае убедитесь, что Вы установили обе версии PAM модулей. |
В качестве примера рассмотрим конфигурацию PAM для sshd:
Пример 2.1. Конфигурация PAM для sshd (/etc/pam.d/sshd
)¶
#%PAM-1.0 auth requisite pam_nologin.so auth include common-auth account requisite pam_nologin.so account include common-account password include common-password session required pam_loginuid.so session include common-session
Объявляет версию этого конфигурационного файла - PAM 1.0. Это просто соглашение, но его можно использовать в будущем для проверки версии. | |
Проверяет, существует ли | |
Ссылается на конфигурационные файлы четырех типов модулей:
| |
Устанавливает атрибут 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
)¶
| |
Этот модуль автоматически разблокирует ключи GNOME при необходимости. | |
|
Весь стек модулей 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.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
вызываются во второй раз при выходе пользователя из системы.
Некоторые из модулей PAM можно конфигурировать. Файлы настроек
находятся в директории /etc/security
. Эта секция кратко
описывает файлы конфигурации имеющие отношение к примеру с sshd
— pam_env.conf
и
limits.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
.
Задача pam_mount
— примонтировать домашние
каталоги пользователей во время входа в систему и отмонтировать их
во время выхода. Этот модуль используется для окружения, в котором
центральный файловый сервер хранит все домашние директории пользователей.
Используя этот метод нет неободимости монтировать /home
полностью, с домашними директориями всех пользователей. Вместо этого
монтируется только домашний каталог того пользователя, который находится в
процессе входа в систему.
После установки pam_mount
, шаблон файла
pam_mount.conf.xml
доступен в
/etc/security
. Описание различных его
элементов можно найти в справочной системе man 5
pam_mount.conf.
Базовую настройку этого модуля можно произвести с помощью YaST. Выберите
+ + чтобы добавить файловый сервер; подробнее смотрите Раздел “Configuring Clients” (Глава 15, Samba, ↑Содержание).
Ограничения для пользователя или группы могут быть установлены в
файле limits.conf
, который используется
модулем pam_limits
. Этот файл позволяет установить
жесткие ограничения, нарушение которых не допускается, и мягкие ограничения,
которые можно нарушить временно. Подробную информацию о синтаксисе и опциях
можно найти в комментариях к файлу
/etc/security/limits.conf
.
Утилита pam-config поможет Вам настроить глобальные
файлы конфигурации PAM (/etc/pam.d/common-*-pc
),
а также несколько других приложений. Для отображения списка поддерживаемых
модулей используйте команду pam-config --list-modules.
Команда pam-config используется для сопровождения файлов
конфигурации PAM. С ее помощью можно добавлять модули в Вашу конфигурации PAM,
удалять их, или модифицировать их опции. При изменении глобальных файлов
конфигурации PAM не требуется ручная настройка PAM для каждого
отдельного приложения.
Простой пример использования pam-config выглядит так:
Автоматическое создание новой конфигурации PAM в стиле Unix.
Давайте при помощи pam-config создадим простейшую конфигурацию, которую
Вы сможете расширить позже. Команда pam-config --create создает
простую конфигурацию для авторизации в UNIX. Существующие файлы конфигурации будут
перезаписаны, а их резервные копии сохранены как
*.pam-config-backup
.
Добавление нового метода авторизации.
Добавление нового метода авторизации (например, LDAP) в Ваш стек
модулей PAM сводится к простой команде pam-config --add
--ldap. При необходимости LDAP добавляется во все
common-*-pc
файлы конфигурации PAM.
Включение отладочной информации для тестирования.
Чтобы убедиться в работоспособности новой процедуры авторизации,
включим отладку для всех операций, связанных с PAM. С помощью команды
pam-config --add --ldap-debug отладку можно включить
для всех операций PAM связанных с LDAP. Отладочную информацию можно найти
в файле /var/log/messages
.
Проверка конфигурации.
Перед окончательным запуском новой конфигурации PAM, проверьте,
содержит ли она все настройки, которые Вы хотели в нее добавить. Команда
pam-config --query --module
отображает тип и параметры для запрашиваемого модуля PAM.
Отключение отладочной информации. Теперь, когда мы окончательно удовлетворены конфигурацией, отключим отладку. Команда pam-config --delete --ldap-debug отключает отладку для LDAP авторизации. Если Вы включали отладку для других модулей, используйте аналогичные команды, чтобы выключить и их.
Подробную информацию о команде pam-config и ее опциях можно получить в справочном руководстве о команде pam-config(8).
Если Вы предпочитаете создавать и поддерживать файлы конфигурации PAM вручную, убедитесь, что pam-config запрещена для этих файлов.
Когда Вы создаете файлы конфигурации PAM с нуля используя
команду pam-config --create, она создает символические
ссылки с файлов common-
на
файлы *
common-
.
Удаление этих символических ссылок эффективно для отключения pam-config, так
как pam-config оперирует только файлами
*
-pccommon-
и эти файлы
не изменятся при отсутствии символических ссылок.
*
-pc
После установки системы в директории
/usr/share/doc/packages/pam
можно найти дополнительную документацию:
В этой директории есть общий файл README.
Поддиректория modules
содержит файлы README
для доступных модулей PAM.
Этот документ содержит все, что системный администратор должен знать о PAM. В нем обсуждается широкий спектр тем, от синтаксиса конфигурационных файлов до аспектов безопасности PAM.
Этот документ обобщает данную тему с точки зрения разработчика, описывая, как создавать модули PAM соответствующие стандартам.
Этот документ содержит все, что нужно разработчику, который хочет использовать библиотеки PAM в своем приложении.
PAM, как и каждый из его модулей, поставляется со справочным руководством, предоставляющим неплохой обзор функциональности соответствующего компонента.