diff options
Diffstat (limited to 'documentation/content/ru/articles/pam/_index.adoc')
-rw-r--r-- | documentation/content/ru/articles/pam/_index.adoc | 167 |
1 files changed, 98 insertions, 69 deletions
diff --git a/documentation/content/ru/articles/pam/_index.adoc b/documentation/content/ru/articles/pam/_index.adoc index 6735323179..cc392f3f4e 100644 --- a/documentation/content/ru/articles/pam/_index.adoc +++ b/documentation/content/ru/articles/pam/_index.adoc @@ -1,10 +1,48 @@ --- -title: Подключаемые Модули Аутентификации (PAM) authors: - - author: Dag-Erling Smørgrav + - + author: 'Dag-Erling Smørgrav' +copyright: '2001-2003 Networks Associates Technology, Inc.' +description: 'Руководство по системе PAM и модулям в FreeBSD' +tags: ["pam", "introduction", "authentication", "modules", "FreeBSD"] +title: 'Подключаемые Модули Аутентификации (PAM)' trademarks: ["pam", "freebsd", "linux", "opengroup", "sun", "general"] --- +//// +Copyright (c) 2001-2003 Networks Associates Technology, Inc. +All rights reserved. + +This software was developed for the FreeBSD Project by ThinkSec AS and +Network Associates Laboratories, the Security Research Division of +Network Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035 +("CBOSS"), as part of the DARPA CHATS research program. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. +//// + = Подключаемые Модули Аутентификации (PAM) :doctype: article :toc: macro @@ -40,7 +78,7 @@ include::../../../../../shared/asciidoctor.adoc[] endif::[] [.abstract-title] -Abstract +Аннотация В этой статье описываются принципы и механизмы, лежащие в основе библиотеки Подключаемых Модулей Аутентификации (PAM - Pluggable Authentication Modules), и рассказывается, как настроить PAM, как интегрировать PAM в приложения и как создавать модули PAM. @@ -61,60 +99,59 @@ PAM описали и разработали Vipin Samar и Charlie Lai из Sun == Термины и соглашения [[pam-definitions]] -== Определения +=== Определения Терминология, используемая в PAM, достаточно запутана. Ни оригинальная работа Samar и Lai, ни спецификация XSSO не делают никаких попыток формально определить термины для различных объектов и участвующих в PAM сторон, а термины, которые они используют (но не определяют) иногда неверны и неоднозначны. Первой попыткой создать недвусмысленную и согласованную терминологию была работа, которую написал Andrew G. Morgan (автор Linux-PAM) в 1999 году. Хотя выбор терминологии, которую сделал Морган, был гигантским скачком вперед, это, по мнению автора данной статьи, не означает ее правильность. Далее делается попытка, в значительной степени на основе работы Моргана, дать точные и недвусмысленные определения терминов для всех участников и объектов PAM. -[.glosslist] учётная запись (account):: - Набор полномочий, которые аппликант запрашивает от арбитратора. +Набор полномочий, которые аппликант запрашивает от арбитратора. аппликант (applicant):: - Пользователь или объект, запрашивающие аутентификацию. +Пользователь или объект, запрашивающие аутентификацию. арбитратор (arbitrator):: - Пользователь или объект, имеющий привилегии, достаточные для проверки полномочий аппликанта и права подтвердить или отклонить запрос. +Пользователь или объект, имеющий привилегии, достаточные для проверки полномочий аппликанта и права подтвердить или отклонить запрос. цепочка (chain):: - Последовательность модулей, которые будут вызваны в ответ на запрос PAM. В цепочку включена информация о последовательности вызовов модулей, аргументах, которые нужно им передать, и о том, как интерпретировать результаты. +Последовательность модулей, которые будут вызваны в ответ на запрос PAM. В цепочку включена информация о последовательности вызовов модулей, аргументах, которые нужно им передать, и о том, как интерпретировать результаты. клиент (client):: - Приложение, отвечающее за инициирование запроса на аутентификацию от имени аппликанта и получающее от него необходимую для аутентификации информацию. +Приложение, отвечающее за инициирование запроса на аутентификацию от имени аппликанта и получающее от него необходимую для аутентификации информацию. подсистема (facility):: - Одна из четырех основных групп функциональности, которые дает PAM: аутентификация, управление учетными записями, управление сеансом и обновление ключом аутентификации. +Одна из четырех основных групп функциональности, которые дает PAM: аутентификация, управление учетными записями, управление сеансом и обновление ключом аутентификации. модуль (module):: - Набор из одной или большего количества связанных функций, реализующих определенную подсистему аутентификации, собранный в один (обычно динамически загружаемый) двоичный файл, идентифицируемый по имени. +Набор из одной или большего количества связанных функций, реализующих определенную подсистему аутентификации, собранный в один (обычно динамически загружаемый) двоичный файл, идентифицируемый по имени. политика (policy):: - Полный набор конфигурационных деклараций, описывающих, как обрабатывать запросы PAM к определенной услуге. Политика обычно состоит из четырех цепочек, по одной для каждой подсистемы, хотя некоторые службы используют не все четыре подсистемы. +Полный набор конфигурационных деклараций, описывающих, как обрабатывать запросы PAM к определенной услуге. Политика обычно состоит из четырех цепочек, по одной для каждой подсистемы, хотя некоторые службы используют не все четыре подсистемы. сервер (server):: - Приложение, выступающее от имени арбитратора для общения с клиентом, запрашивания аутентификационной информации, проверки полномочий аппликанта и подтверждающее или отклоняющее запрос. +Приложение, выступающее от имени арбитратора для общения с клиентом, запрашивания аутентификационной информации, проверки полномочий аппликанта и подтверждающее или отклоняющее запрос. сервис (service):: - Класс серверов, предоставляющих похожую или связанную функциональность, и требующую подобную аутентификацию. Политики PAM задаются на основе сервисов, так что ко всем серверам, объявляющим одно и тоже имя сервиса, будет применяться одна и та же политика. +Класс серверов, предоставляющих похожую или связанную функциональность, и требующую подобную аутентификацию. Политики PAM задаются на основе сервисов, так что ко всем серверам, объявляющим одно и тоже имя сервиса, будет применяться одна и та же политика. сеанс (session):: - Контекст, в котором сервис оказывается аппликанту сервером. Одна из четырех подсистем PAM, управление сеансом, касается исключительно настройке и очистке этого контекста. +Контекст, в котором сервис оказывается аппликанту сервером. Одна из четырех подсистем PAM, управление сеансом, касается исключительно настройке и очистке этого контекста. ключ (token):: - Блок информации, связанный с учётной записью, например, пароль или ключевая фраза, которую аппликант должен предоставить для своей идентификации. +Блок информации, связанный с учётной записью, например, пароль или ключевая фраза, которую аппликант должен предоставить для своей идентификации. транзакция (transaction):: - Последовательность запросов от одного и того же аппликанта к одному и тому же экземпляру того же самого сервера, начиная с аутентификации и установления сеанса и заканчивая закрытием сеанса. +Последовательность запросов от одного и того же аппликанта к одному и тому же экземпляру того же самого сервера, начиная с аутентификации и установления сеанса и заканчивая закрытием сеанса. [[pam-usage-examples]] -== Примеры использования +=== Примеры использования Этот раздел предназначен для иллюстрации значений некоторых терминов, определенных выше, при помощи простых примеров. -== Объединенные клиент и сервер +==== Объединенные клиент и сервер В этом простом примере показывается пользователь `alice`, выполняющий команду man:su[1] для того, чтобы стать пользователем `root`. -[source,shell] +[source, shell] .... % whoami alice @@ -134,11 +171,11 @@ root * Аутентификационным ключом является `xi3kiune`. * Арбитратором выступает `root`, и именно поэтому у команды man:su[1] выставлен бит выполнения с правами `root`. -== Клиент и сервер разделены +==== Клиент и сервер разделены В примере ниже рассматривается пользователь `eve`, пытающийся установить man:ssh[1]-соединение с `login.example.com`, и успешно входя как пользователь `bob`. Боб должен был выбрать пароль получше! -[source,shell] +[source, shell] .... % whoami eve @@ -148,12 +185,11 @@ bob@login.example.com's password: % god Last login: Thu Oct 11 09:52:57 2001 from 192.168.0.1 Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994 - The Regents of the University of California. All rights reserved. + The Regents of the University of California. All rights reserved. FreeBSD 4.4-STABLE (LOGIN) 4: Tue Nov 27 18:10:34 PST 2001 Welcome to FreeBSD! % -% .... @@ -164,18 +200,18 @@ Welcome to FreeBSD! * Ключом аутентификации является `god`. * Хотя этого не видно в примере, но арбитратором является `root`. -== Пример политики +==== Пример политики Следующее является политикой, используемой во FreeBSD по умолчанию для `sshd`: [.programlisting] .... -sshd auth required pam_nologin.so no_warn -sshd auth required pam_unix.so no_warn try_first_pass -sshd account required pam_login_access.so -sshd account required pam_unix.so -sshd session required pam_lastlog.so no_fail -sshd password required pam_permit.so +sshd auth required pam_nologin.so no_warn +sshd auth required pam_unix.so no_warn try_first_pass +sshd account required pam_login_access.so +sshd account required pam_unix.so +sshd session required pam_lastlog.so no_fail +sshd password required pam_permit.so .... * Эта политика применяется к службе `sshd` (что не обязательно ограничено сервером man:sshd[8]). @@ -186,7 +222,7 @@ sshd password required pam_permit.so == Основы PAM [[pam-facilities-primitives]] -== Подсистемы и примитивы +=== Подсистемы и примитивы API для PAM предоставляет шесть различных примитивов для аутентификации, сгруппированных в четыре подсистемы, каждая из которых описывается ниже. @@ -213,17 +249,17 @@ _Управление паролем._ Эта подсистема исполь ** Функция man:pam_chauthtok[3] изменяет ключ аутентификации, опционально проверяя, что он труден для подбора, не использовался ранее и так далее. [[pam-modules]] -== Модули +=== Модули Модули являются центральной концепцией в PAM; в конце концов, им соответствует буква "M" в сокращении "PAM". Модуль PAM представляет собой самодостаточный кусок программного кода, который реализует примитивы одной или большего количества подсистем одного конкретного механизма; к возможным механизмам для подсистемы аутентификации, к примеру, относятся базы данных паролей UNIX(R), системы NIS, LDAP или Radius. [[pam-module-naming]] -== Именование модулей +==== Именование модулей Во FreeBSD каждый механизм реализуется в отдельном модуле с именем `pam_mechanism.so` (например, `pam_unix.so` для механизма UNIX(R).) В других реализациях иногда отдельные модули используются для разных подсистем, и в их имя включается, кроме названия механизма, и имя подсистемы. К примеру, в Solaris(TM) имеется модуль `pam_dial_auth.so.1`, который часто используется для аутентификации пользователей, работающих по коммутируемым каналам связи. [[pam-module-versioning]] -== Версии модулей +==== Версии модулей Изначальная реализация PAM во FreeBSD, которая была основана на Linux-PAM, не использовала номера версий для модулей PAM. Это будет приводить к проблемам при работе унаследованных приложений, которые могут быть скомпонованы со старыми версиями системных библиотек, так как способа подгрузить соответствующую версию требуемых модулей нет. @@ -232,7 +268,7 @@ OpenPAM, с другой стороны, ищет модули, которые Хотя модули PAM в Solaris(TM) имеют номер версии, по-настоящему номер версии в них не отслеживается, потому что номер является частью имени и должен включаться в конфигурацию. [[pam-chains-policies]] -== Цепочки и политики +=== Цепочки и политики Когда сервер инициирует PAM-транзакцию, библиотека PAM пытается загрузить политику для службы, указанной при вызове функции man:pam_start[3]. Политика определяет, как должны обрабатываться запросы на аутентификацию, и задаётся в конфигурационном файле. Это составляет другую основополагающую концепцию PAM: возможность администратору настраивать политику безопасности системы (в самом широком её понимании) простым редактированием текстового файла. @@ -246,6 +282,7 @@ OpenPAM, с другой стороны, ищет модули, которые Этот управляющий флаг был добавлен компанией Sun в Solaris(TM) 9 (SunOS(TM) 5.9), и поддерживается в OpenPAM. `required`:: Если модуль возвратил положительный ответ, выполняется оставшаяся часть цепочки, запрос удовлетворяется, если никакой другой модуль не отработает отрицательно. Если же модуль возвратит отрицательный ответ, остаток цепочки тоже отрабатывается, но запрос отвергается. + `requisite`:: Если модуль возвращает положительный ответ, выполняется оставшаяся часть цепочки, запрос удовлетворяется, если никакой другой модуль не отработает отрицательно. Если же модуль отрабатывает отрицательно, то отработка цепочки немедленно прекращается, а запрос отвергается. @@ -255,12 +292,13 @@ OpenPAM, с другой стороны, ищет модули, которые Так как семантика этого флага может оказаться запутанной, особенно при его использовании с последним модулем в цепочке, рекомендуется вместо него использовать управляющий флаг `binding`, если реализация его поддерживает. `optional`:: Модуль отрабатывается, но результат выполнения игнорируется. Если все модули в цепочке помечены как `optional`, то удовлетворяться будут все запросы. + Когда сервер вызывает один из шести PAM-примитивов, PAM запрашивает цепочку подсистемы, к которой принадлежит примитив, и запускает каждый модуль, перечисленный в цепочке в порядке их перечисления, пока список не будет исчерпан либо не будет определено, что дальнейшей обработки не нужно (по причине достижение модуля, вернувшего положительный ответ при условии `binding` или `sufficient`, либо отрицательный с условием `requisite`). Запрос подтверждается, если только был вызван по крайней мере один модуль, и все неопциональные модули вернули положительный ответ. Заметьте, что возможно, хотя это не распространено, перечислять один и тот же модуль несколько раз в одной цепочке. К примеру, модуль, просматривающий имена и пароли пользователя в сервере каталога может быть вызван несколько раз с различными параметрами, задающими различные серверы каталогов для связи. PAM считает различные появления одного модуля в той же самой цепочке разными и не связанными модулями. [[pam-transactions]] -== Транзакции +=== Транзакции Жизненный цикл типичной PAM-транзакции описан ниже. Заметьте, что в случае, если любой из перечисленных шагов оканчивается неудачно, сервер должен выдать клиенту соответствующее сообщение об ошибке и прервать транзакцию. @@ -280,10 +318,10 @@ OpenPAM, с другой стороны, ищет модули, которые == Настройка PAM [[pam-config-file]] -== Файлы политик PAM +=== Файлы политик PAM [[pam-config-pam.conf]] -== Файл [.filename]#/etc/pam.conf# +==== Файл [.filename]#/etc/pam.conf# Традиционно файлом политик PAM является [.filename]#/etc/pam.conf#. Он содержит все политики PAM для вашей системы. Каждая строка файла описывает один шаг в цепочке, как показано ниже: @@ -297,7 +335,7 @@ login auth required pam_nologin.so no_warn Для каждой пары сервис/подсистема составляется отдельная цепочка, и тогда получается, что, хотя порядок следования строк для одной и той же услуги и подсистемы является значимым, порядок перечисления отдельных сервисов не значим. В примерах из оригинальной работы по PAM строки конфигурации сгруппированы по подсистемам, в поставляемом с Solaris(TM) файле [.filename]#pam.conf# именно так и сделано, но в стандартном конфигурационном файле из поставки FreeBSD строки настроек сгруппированы по сервисам. Подходит любой из этих способов; они имеют один и тот же смысл. [[pam-config-pam.d]] -== Каталог [.filename]#/etc/pam.d# +==== Каталог [.filename]#/etc/pam.d# OpenPAM и Linux-PAM поддерживают альтернативный механизм настройки, который для FreeBSD является предпочтительным. В этой схеме каждая политика содержится в отдельном файле с именем, соответствующем сервису, к которому она применяется. Эти файлы размещаются в каталоге [.filename]#/etc/pam.d/#. @@ -310,7 +348,7 @@ auth required pam_nologin.so no_warn Как следствие такого упрощённого синтаксиса, возможно использование одних и тех же политик для нескольких сервисов, связывая каждое имя сервиса с тем же самым файлом политик. К примеру, для использования той же самой политики для сервисов `su` и `sudo`, можно сделать следующее: -[source,shell] +[source, shell] .... # cd /etc/pam.d # ln -s su sudo @@ -321,14 +359,14 @@ auth required pam_nologin.so no_warn Так как политика каждого сервиса хранится в отдельном файле, то механизм [.filename]#pam.d# делает установку дополнительных политик для программных пакетов сторонних разработчиков очень лёгкой задачей. [[pam-config-file-order]] -== Порядок поиска политик +==== Порядок поиска политик Как вы видели выше, политики PAM могут находиться в нескольких местах. Что будет, если политики для одного и того же сервиса имеются в разных местах? Необходимо осознать, что система конфигурации PAM ориентирована на цепочки. [[pam-config-breakdown]] -== Структура строки настройки +=== Структура строки настройки Как это объяснено в <<pam-config-file>>, каждая строка файла [.filename]#/etc/pam.conf# состоит из четырёх или большего количества полей: имени сервиса, имени подсистемы, управляющего флага, имени модуля и дополнительных параметров модуля, которые могут отсутствовать. @@ -338,10 +376,13 @@ auth required pam_nologin.so no_warn Имя подсистемы представляет собой одно из четырёх ключевых слов, описанных в <<pam-facilities-primitives>>. -Точно также управляющий флаг является одним из четырёх ключевых слов, описанных в <<pam-chains-policies>>, в котором рассказано, как интерпретировать возвращаемый из модуля код. В Linux-PAM поддерживается альтернативный синтаксис, который позволяет указать действие, связанной с каждый возможным кодом возврата, но этого следует избегать, так как он не является стандартным и тесно связан со способом диспетчеризации вызовов сервисов в Linux-PAM (а он значительно отличается от способа взаимодействия в Solaris(TM) и OpenPAM). Не вызывает удивления тот факт, что в OpenPAM этот синтаксис не поддерживается. +Точно также управляющий флаг является одним из четырёх ключевых слов, описанных в разделе + crossref:pam[pam-chains-policies, Цепочки и политики], в котором рассказано, как интерпретировать возвращаемый из модуля код. + В Linux-PAM поддерживается альтернативный синтаксис, который позволяет указать действие, связанной с каждый возможным кодом возврата, но этого следует избегать, так как он не является стандартным и тесно связан со способом диспетчеризации вызовов сервисов в Linux-PAM (а он значительно отличается от способа взаимодействия в Solaris(TM) и OpenPAM). + Не вызывает удивления тот факт, что в OpenPAM этот синтаксис не поддерживается. [[pam-policies]] -== Политики +=== Политики Для корректной настройки PAM необходимо понимать, как происходит интерпретация политик. @@ -449,18 +490,6 @@ auth required pam_nologin.so no_warn Модуль man:pam_nologin[8] отвергает любые входы не пользователем root, если существует файл [.filename]#/var/run/nologin#. Обычно этот файл создаётся утилитой man:shutdown[8], когда до запланированного завершения работы системы остаётся менее пяти минут. -[[pam-modules-opie]] -=== man:pam_opie[8] - -Модуль man:pam_opie[8] реализует метод аутентификации man:opie[4]. Система man:opie[4] является механизмом работы по схеме запрос-ответ, при котором ответ на каждый запрос является прямой функцией от запроса и ключевой фразы, так что ответ может быть легко и "вовремя" вычислен любым, знающим ключевую фразу, что избавляет от необходимости передавать пароль. Кроме того, так как в man:opie[4] никогда повторно не используется запрос, ответ на который был корректно получен, эта схема является устойчивой к атакам, основанным на повторе действий. - -[[pam-modules-opieaccess]] -=== man:pam_opieaccess[8] - -Модуль man:pam_opieaccess[8] дополняет модуль man:pam_opie[8]. Его работа заключается в выполнении ограничений, задаваемых файлом man:opieaccess[5], который определяет условия, при которых пользователь, нормально прошедший аутентификацию посредством man:opie[4], может использовать альтернативные методы. Чаще всего он используется для запрета использования аутентификации на основе паролей с непроверенных хостов. - -Для эффективности модуль man:pam_opieaccess[8] должен быть определён в цепочке `auth` как `requisite` сразу же после записи `sufficient` для man:pam_opie[8], но перед любыми другими модулями. - [[pam-modules-passwdqc]] === man:pam_passwdqc[8] @@ -563,24 +592,24 @@ include::{include-path}converse.c[] :sectnums!: [[pam-further]] -== Lectures complémentaires +== Для дальнейшего ознакомления -=== Publications +=== Статьи -_link:http://www.sun.com/software/solaris/pam/pam.external.pdf[Rendre les services de connexion indépendants des technologies d'authentification]_. Vipin Samar et Charlie Lai. Sun Microsystems. +Making Login Services Independent of Authentication Technologies Vipin Samar. Charlie Lai. Sun Microsystems. -_link:http://www.opengroup.org/pubs/catalog/p702.htm[X/Open Single Sign-on Preliminary Specification]_. The Open Group. 1-85912-144-6. June 1997. +_link:https://pubs.opengroup.org/onlinepubs/8329799/toc.htm[X/Open Single Sign-on Preliminary Specification]_. The Open Group. 1-85912-144-6. June 1997. -_link:http://www.kernel.org/pub/linux/libs/pam/pre/doc/current-draft.txt[Pluggable Authentication Modules]_. Andrew G. Morgan. 1999-10-06. +_link:https://mirrors.kernel.org/pub/linux/libs/pam/pre/doc/draft-morgan-pam-07.txt[Pluggable Authentication Modules]_. Andrew G. Morgan. 1999-10-06. -=== Guides utilisateur +=== Руководства пользователя -_link:http://www.sun.com/software/solaris/pam/pam.admin.pdf[Administration de PAM]_. Sun Microsystems. +_link:https://docs.oracle.com/cd/E26505_01/html/E27224/pam-1.html[Администрирование PAM]_. Sun Microsystems. -=== Page internet liées +=== Веб страницы -_link:http://openpam.sourceforge.net/[La page d'OpenPAM]_. Dag-Erling Smørgrav. ThinkSec AS. +_link:https://www.openpam.org/[Домащняя страница OpenPAM]_ Dag-Erling Smørgrav. ThinkSec AS. -_link:http://www.kernel.org/pub/linux/libs/pam/[La page de Linux-PAM]_. Andrew G. Morgan. +_link:http://www.kernel.org/pub/linux/libs/pam/[Домашняя страница Linux-PAM]_ Andrew Morgan. -_link:http://wwws.sun.com/software/solaris/pam/[La page de Solaris PAM]_. Sun Microsystems. +_Домашняя страница Solaris PAM (Solaris PAM homepage)_. Sun Microsystems. |