Apache. Документация на русском


Разделы:   1    2    3    4    5    6    7    8    9      10      11    12    13    14    15    16  

Раздел 10. Модули Апача

Пункты:   85    86    88    89    90    91    92    93    94    95    96    97    98    99    100    101    102    103    104    105    106    107    108      109      110    111    112    113    114    115    116    117    118    119    120    121    122    123    124    125    126    127    128    129    130    131    132    133    134    135    136    137    138    139    140    141    142    143    144    145    146    147    148    149    150    151    152    153    154    155    156    157    158    159    160    161    163    164    165    166    167    168    170    171    172    173    174    175    176    177    178    179    180    181    182    183    184    185    186    187    188    189    190    191    192    193    194    195    196    197    198    199    200    201    203    204    205    206    207    208    209    210    211    212    213  

 <         > 
  RU            EN  

Пункт 109. Модуль Apache mod_authnz_fcgi

Этот модуль позволяет приложениям-авторизаторам FastCGI аутентифицировать пользователей и разрешать доступ к ресурсам. Он поддерживает общие авторизаторы FastCGI, которые участвуют в одной фазе аутентификации и авторизации, а также специфичные для Apache httpd аутентификаторы и авторизаторы, которые участвуют в одной или обеих фазах.

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

Режимы вызова

Режимы вызова авторизаторов FastCGI, поддерживаемые этим модулем, различаются двумя характеристиками: типом и механизмом аутентификации .

Тип просто authn для аутентификации, authz для авторизации или authnz для комбинированной аутентификации и авторизации.

Механизм аутентификации относится к механизмам конфигурации Apache httpd и этапам обработки и может быть AuthBasicProvider , Require , или check_user_id . Первые две из них соответствуют директивам, используемым для включения участия в соответствующей фазе обработки.

Описание каждого режима:

Тип authn , механизм AuthBasicProvider
В этом режиме FCGI_ROLE установлено значение AUTHORIZER и FCGI_APACHE_ROLE установлено значение AUTHENTICATOR . Приложение должно быть определено как аутентификация типа провайдера с использованием AuthnzFcgiDefineProvider и включено с помощью AuthBasicProvider . Ожидается, что при вызове приложение будет аутентифицировать клиента, используя предоставленный идентификатор пользователя и пароль. Пример приложения:
 #!/USR/бен/перл
использовать FCGI;
мой $request = FCGI::Request();
в то время как ($запрос->Принять() >= 0) {
 умереть, если $ENV{'FCGI_APACHE_ROLE'} ne "AUTHENTICATOR";
 умереть, если $ENV{'FCGI_ROLE'} ne "AUTHORIZER";
 умереть, если !$ENV{'REMOTE_PASSWD'};
 умереть, если !$ENV{'REMOTE_USER'};
 print STDERR "Этот текст записывается в журнал ошибок веб-сервера.\n";
 if ( ($ENV{'REMOTE_USER' } eq "foo" || $ENV{'REMOTE_USER'} eq "foo1") &&
 $ENV{'REMOTE_PASSWD'} эквивалент "бар" ) {
 print "Статус: 200\n";
 print "Переменная-AUTHN_1: authn_01\n";
 print "Переменная-AUTHN_2: authn_02\n";
 напечатать "\n";
 }
 еще {
 print "Статус: 401\n\n";
 }
} 
Пример конфигурации:
 AuthnzFcgiDefineProvider authn FooAuthn fcgi://localhost:10102/
<Расположение "/защищено/">
 Основной тип авторизации
 Имя авторизации "Ограничено"
 AuthBasicProvider FooAuthn
 Требовать ...
</местоположение> 
Тип authz , механизм Require
В этом режиме FCGI_ROLE установлено значение AUTHORIZER и FCGI_APACHE_ROLE установлено значение AUTHORIZER . Приложение должно быть определено как authz типа провайдера с использованием AuthnzFcgiDefineProvider . Ожидается, что при вызове приложение авторизует клиента, используя предоставленный идентификатор пользователя и другие данные запроса. Пример приложения:
 #!/USR/бен/перл
использовать FCGI;
мой $request = FCGI::Request();
в то время как ($запрос->Принять() >= 0) {
 умереть, если $ENV{'FCGI_APACHE_ROLE'} ne "AUTHORIZER";
 умереть, если $ENV{'FCGI_ROLE'} ne "AUTHORIZER";
 умереть, если $ENV{'REMOTE_PASSWD'};
 print STDERR "Этот текст записывается в журнал ошибок веб-сервера.\n";
 если ($ENV{'REMOTE_USER'} eq "foo1") {
 print "Статус: 200\n";
 print "Переменная-AUTHZ_1: authz_01\n";
 print "Переменная-AUTHZ_2: authz_02\n";
 напечатать "\n";
 }
 еще {
 print "Статус: 403\n\n";
 }
} 
Пример конфигурации:
 AuthnzFcgiDefineProvider authz FooAuthz fcgi://localhost:10103/
<Расположение "/защищено/">
 Тип авторизации...
 Авторизация...
 AuthBasicProvider...
 Требовать FooAuthz
</местоположение> 
Тип authnz , механизм AuthBasicProvider + Require
В этом режиме, который поддерживает независимый от веб-сервера AUTHORIZER протокол FastCGI, FCGI_ROLE устанавливается AUTHORIZER и FCGI_APACHE_ROLE не устанавливается. Приложение должно быть определено как authnz типа провайдера с использованием AuthnzFcgiDefineProvider . Ожидается, что приложение будет обрабатывать как аутентификацию, так и авторизацию в одном и том же вызове, используя идентификатор пользователя, пароль и другие данные запроса. Вызов происходит на этапе аутентификации Apache httpd API. Если приложение возвращает 200 и тот же провайдер вызывается на этапе авторизации (через Require ), mod_authnz_fcgi вернет успех на этапе авторизации без вызова приложения. Пример приложения:
 #!/USR/бен/перл
использовать FCGI;
мой $request = FCGI::Request();
в то время как ($запрос->Принять() >= 0) {
 умереть, если $ENV{'FCGI_APACHE_ROLE'};
 умереть, если $ENV{'FCGI_ROLE'} ne "AUTHORIZER";
 умереть, если !$ENV{'REMOTE_PASSWD'};
 умереть, если !$ENV{'REMOTE_USER'};
 print STDERR "Этот текст записывается в журнал ошибок веб-сервера.\n";
 if ( ($ENV{'REMOTE_USER' } eq "foo" || $ENV{'REMOTE_USER'} eq "foo1") &&
 $ENV{'REMOTE_PASSWD'} эквивалент "bar" &&
 $ENV{'REQUEST_URI'} =~ м%/бар/.*%) {
 print "Статус: 200\n";
 print "Переменная-AUTHNZ_1: authnz_01\n";
 print "Переменная-AUTHNZ_2: authnz_02\n";
 напечатать "\n";
 }
 еще {
 print "Статус: 401\n\n";
 }
} 
Пример конфигурации:
 AuthnzFcgiDefineProvider аутентификация FooAuthnz fcgi://localhost:10103/
<Расположение "/защищено/">
 Основной тип авторизации
 Имя авторизации "Ограничено"
 AuthBasicProvider FooAuthnz
 Требовать FooAuthnz
</местоположение> 
Тип authn , механизм check_user_id
В этом режиме FCGI_ROLE установлено значение AUTHORIZER и FCGI_APACHE_ROLE установлено значение AUTHENTICATOR . Приложение должно быть определено как авторизация типа провайдера с использованием AuthnzFcgiDefineProvider . AuthnzFcgiCheckAuthnProvider указывает, когда он вызывается. Пример приложения:
 #!/USR/бен/перл
использовать FCGI;
мой $request = FCGI::Request();
в то время как ($запрос->Принять() >= 0) {
 умереть, если $ENV{'FCGI_APACHE_ROLE'} ne "AUTHENTICATOR";
 умереть, если $ENV{'FCGI_ROLE'} ne "AUTHORIZER";
 # Этот авторизатор предполагает, что параметр RequireBasicAuth для
 # AuthnzFcgiCheckAuthnProvider включен:
 умереть, если !$ENV{'REMOTE_PASSWD'};
 умереть, если !$ENV{'REMOTE_USER'};
 print STDERR "Этот текст записывается в журнал ошибок веб-сервера.\n";
 if ( ($ENV{'REMOTE_USER' } eq "foo" || $ENV{'REMOTE_USER'} eq "foo1") &&
 $ENV{'REMOTE_PASSWD'} эквивалент "бар" ) {
 print "Статус: 200\n";
 print "Переменная-AUTHNZ_1: authnz_01\n";
 print "Переменная-AUTHNZ_2: authnz_02\n";
 напечатать "\n";
 }
 еще {
 print "Статус: 401\n\n";
 # Если здесь написано тело ответа, оно будет возвращено
 # клиент.
 }
} 
Пример конфигурации:
 AuthnzFcgiDefineProvider authn FooAuthn fcgi://localhost:10103/
<Расположение "/защищено/">
 Тип авторизации...
 Авторизация...
 AuthnzFcgiCheckAuthnProvider FooAuthn \
 Полномочный Вкл \
 RequireBasicAuth выключен \
 UserExpr "%{reqenv:REMOTE_USER}"
 Требовать ...
</местоположение> 

Дополнительные примеры

  1. Если ваше приложение поддерживает отдельные роли аутентификации и авторизации ( AUTHENTICATOR и AUTHORIZER ), определите отдельных поставщиков следующим образом, даже если они сопоставляются с одним и тем же приложением:
     AuthnzFcgiDefineProvider authn FooAuthn fcgi://localhost:10102/
    AuthnzFcgiDefineProvider authz FooAuthz fcgi://localhost:10102/ 
    Укажите провайдера аутентификации AuthBasicProvider и провайдера аутентификации Require :
     Основной тип авторизации
    Имя авторизации "Ограничено"
    AuthBasicProvider FooAuthn
    Требовать FooAuthz 
  2. Если ваше приложение поддерживает общую AUTHORIZER роль (аутентификация и авторизация в одном вызове), определите одного поставщика следующим образом:
     AuthnzFcgiDefineProvider аутентификация FooAuthnz fcgi://localhost:10103/ 
    Укажите провайдера аутентификации на обоих AuthBasicProvider и Require :
     Основной тип авторизации
    Имя авторизации "Ограничено"
    AuthBasicProvider FooAuthnz
    Требовать FooAuthnz 

Ограничения

Ниже приведены потенциальные функции, которые в настоящее время не реализованы:

Средство проверки доступа Apache httpd
Этап проверки доступа к Apache httpd API — это отдельный этап от аутентификации и авторизации. Некоторые другие реализации FastCGI реализуют эту фазу, которая обозначается настройкой FCGI_APACHE_ROLE to ACCESS_CHECKER .
Локальные (Unix) сокеты или каналы
В настоящее время поддерживаются только сокеты TCP.
Поддержка mod_authn_socache
Взаимодействие mod_authn_socache должно быть реализовано для приложений, которые участвуют в аутентификации в стиле Apache httpd.
Поддержка дайджест-аутентификации с использованием AuthDigestProvider.
Ожидается, что это будет постоянное ограничение, поскольку нет потока авторизации для получения хэша.
Управление процессом подачи заявки
Ожидается, что это навсегда выйдет за рамки этого модуля. Процессы приложений должны контролироваться другими средствами. Например, fcgistarter может использоваться для их запуска.
AP_AUTH_INTERNAL_PER_URI
Все поставщики в настоящее время зарегистрированы как AP_AUTH_INTERNAL_PER_CONF, что означает, что проверки не выполняются повторно для внутренних подзапросов с той же конфигурацией управления доступом, что и первоначальный запрос.
Преобразование кодировки данных протокола
Если mod_authnz_fcgi работает в среде компиляции EBCDIC, все данные протокола FastCGI записываются в EBCDIC и ожидается, что они будут получены в EBCDIC.
Несколько запросов на одно соединение
В настоящее время соединение с авторизатором FastCGI закрывается после каждого этапа обработки. Например, если авторизатор обрабатывает отдельные фазы аутентификации и авторизации , тогда будут использоваться два соединения.
Сопоставление URI
URI от клиентов не могут быть сопоставлены, например, при ProxyPass использовании с ответчиками FastCGI.

Ведение журнала

  1. Ошибки обработки регистрируются на уровне журнала error и выше.
  2. Сообщения, написанные приложением, регистрируются на уровне журнала warn .
  3. Общие сообщения для отладки записываются на уровне журнала debug .
  4. Переменные среды, передаваемые приложению, регистрируются на уровне журнала trace2 . Значение переменной REMOTE_PASSWD будет скрыто, но любые другие конфиденциальные данные будут видны в журнале .
  5. Все операции ввода-вывода между модулем и приложением FastCGI, включая все переменные среды, будут регистрироваться в печатном и шестнадцатеричном формате на уровне журнала trace5 . Все конфиденциальные данные будут видны в журнале.

LogLevel может использоваться для настройки уровня журнала, характерного для mod_authnz_fcgi. Например:

 Информация об уровне журнала authnz_fcgi:trace8 


Директива AuthnzFcgiCheckAuthnProvider

Описание:Позволяет приложению FastCGI обрабатывать хук аутентификации check_authn.
Синтаксис: AuthnzFcgiCheckAuthnProvider provider-name| None option ...
По умолчанию: none
Контекст:каталог
Положение дел:Расширение
Модуль:mod_authnz_fcgi

Эта директива используется, чтобы разрешить авторизатору FastCGI обрабатывать конкретную фазу обработки аутентификации или авторизации.

Некоторые возможности авторизаторов FastCGI требуют включения с помощью этой директивы вместо AuthBasicProvider :

  • небазовая аутентификация; как правило, определение идентификатора пользователя клиента и возврат его от авторизатора; см. UserExpr вариант ниже
  • Выбор пользовательского кода ответа; для ответа не 200 от авторизатора код от авторизатора будет статусом ответа
  • Установка тела ответа, отличного от 200; если авторизатор предоставляет тело ответа с ответом, отличным от 200, это тело будет возвращено клиенту; поддерживается до 8192 байт текста
имя провайдера
Это имя поставщика, определенного с помощью AuthnzFcgiDefineProvider .
None
Укажите None , чтобы отключить поставщика, включенного с помощью этой директивы, во внешней области, например в родительском каталоге.
вариант
Поддерживаются следующие параметры:
Полномочный Вкл.|Выкл. (по умолчанию Вкл.)
Это определяет, разрешено ли запускать другие модули, когда для этого модуля настроен авторизатор FastCGI, и он не выполняет запрос.
ID пользователя по умолчанию
Когда авторизатор возвращает успех, UserExpr настроен и оценивается как пустая строка (например, авторизатор не вернул переменную), это значение будет использоваться в качестве идентификатора пользователя. Обычно это используется, когда у авторизатора есть концепция гостевых или неаутентифицированных пользователей, а гостевые пользователи сопоставляются с определенным идентификатором пользователя для ведения журнала и других целей.
RequireBasicAuth On|Off (по умолчанию Off)
Это определяет, требуется ли базовая аутентификация перед передачей запроса авторизатору. При необходимости авторизатор не будет вызываться без идентификатора пользователя и пароля; 401 будет возвращен для запроса без этого.
UserExpr expr (нет по умолчанию)
Когда обычная проверка подлинности не предоставляется клиентом, а авторизатор определяет пользователя, это выражение, оцениваемое после вызова авторизатора, определяет пользователя. Выражение соответствует синтаксису ap_expr и должно разрешаться в строку. Типичное использование — ссылка на параметр, возвращенный авторизатором, с использованием параметра, такого как . Если эта опция указана и идентификатор пользователя не может быть получен с помощью выражения после успешной аутентификации, запрос будет отклонен с ошибкой 500. Variable-XXX UserExpr "%{reqenv:XXX}"


Директива AuthnzFcgiDefineProvider

Описание:Определяет приложение FastCGI в качестве поставщика для аутентификации и/или авторизации.
Синтаксис: AuthnzFcgiDefineProvider type provider-name backend-address
По умолчанию: none
Контекст:конфигурация сервера
Положение дел:Расширение
Модуль:mod_authnz_fcgi

Эта директива используется для определения приложения FastCGI в качестве поставщика для определенного этапа аутентификации или авторизации.

тип
Это должно быть установлено на authn для аутентификации, authz для авторизации или authnz для универсального авторизатора FastCGI, который выполняет обе проверки.
имя провайдера
Это используется для присвоения имени провайдеру, которое используется в других директивах, таких как AuthBasicProvider и Require .
внутренний адрес
Это указывает адрес приложения в форме fcgi://hostname:port/ . Процесс(ы) приложения должен управляться независимо, например, с помощью fcgistarter .


 <         > 

Пункты:   85    86    88    89    90    91    92    93    94    95    96    97    98    99    100    101    102    103    104    105    106    107    108      109      110    111    112    113    114    115    116    117    118    119    120    121    122    123    124    125    126    127    128    129    130    131    132    133    134    135    136    137    138    139    140    141    142    143    144    145    146    147    148    149    150    151    152    153    154    155    156    157    158    159    160    161    163    164    165    166    167    168    170    171    172    173    174    175    176    177    178    179    180    181    182    183    184    185    186    187    188    189    190    191    192    193    194    195    196    197    198    199    200    201    203    204    205    206    207    208    209    210    211    212    213  

Рейтинг@Mail.ru