расставляй правильно приоритеты и не отвлекайся на мелочи

Внешний источник аутентификации для веб сервера Apache

Поговорим о том, как можно гибко настраивать Authentication, Authorization and Access Control, т.е. доступ к определенным директориям на базе веб сервера Apache. Где такое может пригодиться? К примеру там, где Вы хотите организовать на своем www сервере авторизованный доступ пользователей к скачиванию файлов из различных директорий сервера. Замечу, что для меня сервер — это платформа Linux, как сделать это на Windows не знаю.

Для организации таких возможностей существует несколько сторонних внешних модулей, подключаемых к Apache либо через возможности DSO, либо встраиваемых в него, я использую два из них mod_auth_pipe и mod_auth_external, о последнем и пойдет речь, т.к. mod_auth_pipe уже «устарел» и не поддерживается для Apache версий 2.x.

О том, как скачать, развернуть и встроить модуль в Apache, думаю Вы догадаетесь или найдете в инете сами, тем более последний пункт обильно описан в файле INSTALL, который идет в составе архива модуля, мы же поговорим о связке Apache + mod_auth_external + PHP скрипт.

Итак, модуль скомпилирован и «прицеплен» к Apache, у меня как DSO, т.е. в httpd.conf прописана строка:

LoadModule authnz_external_module modules/mod_authnz_external.so

Строка httpd -l | grep authz выдает:

mod_authz_host.c
mod_authz_groupfile.c
mod_authz_user.c
mod_authz_default.c

Значит все в порядке.

Запрещаем доступ к нашей папке и выставляем на нее авторизацию, мой кусок из httpd.conf выглядит так:

<VirtualHost

<Location /files>
AuthType Basic
AuthName «Restricted Area»
AuthBasicProvider external
AuthExternal archive_auth
require valid-user
</Location>

AddExternalAuth archive_auth /usr/local/apache2/htdocs/download.domain.net/check.php
SetExternalAuthMethod archive_auth pipe

</VirtualHost>

Теперь пишем скрипт авторизации, как Вы догадались он написан на PHP (check.php):

#!/usr/local/bin/php -q
<?

$user = trim(fgets(STDIN));
$pass = fgets(STDIN);
$URI = $_SERVER[«URI»];

Все! Имея на руках имя, пароль и запрашиваемый URI можем творить с этим что угодно


В итоге всех проверок возвращаем 0 — все Окей или 1 — Ошибка авторизации

return ($res === true) ? 0 : 1;
?>

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

Ответить
Обязательные поля помечены *