Шаг 18 - Авторизация посетителей

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

Настройки этой возможности осуществляются файлом .htaccess в директории, к которой надо изменить тип доступа.

Пример такого файла

 AuthType Basic
 AuthName ".htaccess Example"
 AuthUserFile d:\apache\htdocs\lock\user
 AuthGroupFile d:\apache\htdocs\lock\group
 require valid-user
Директива AuthType задает тип авторизации для данной директории. Возможны значения Basic и Digest.

Директива AuthName задает название ресурса, доступ к которому требует авторизации.

Для задания файла со списком пользователей в Basic авторизации используется директива AuthUserFile:

  AuthUserFile путь_и_имя_файла
Для авторизации типа Digest используется директива AuthDigestFile:
 AuthDigestFile путь_и_имя_файла
Два этих типа авторизации отличаются своей защищенностью. При использовании Basic авторизация проходит без шифрования передаваемых данных, а при использовании Digest вся информация шифруется по алгоритму MD5. Для зоны интернета все же рекомендуется пользоваться методом Basic, т.к. наверняка существуют браузеры не поддерживающие MD5. Для локальных сетей несомненно рекомендуется пользоваться Digest.

Директива AuthGroupFile задает файл с пользователями:

  AuthGroupFile путь_и_имя_файла
Файл пользователей записывается в формате:
 группа1: имя_пользователя1 имя_пользователя2 ...
 группа2: ...
Пример содержания такого файла:
 mygroup: bob joe anne
 wizards: den kate alex
Последней идет директива require. Она выбирает из пользователей прошедших авторизацию тех, которым доступ к директории открыт.

При использовании:

  require user пользователь1 пользователь2 ...
доступ к директории получают только указанные пользователи.

При:

  require group группа1 группа2 ...
доступ получают пользователи входящие только в перечисленные группы пользователей.

Если же указать:

  require valid-user
доступ получают все пользователи прошедшие авторизацию.

Если файл групп Вы можете создать сами, то создать файл с пользователями Вы не сможете. Для этого существует специальная утилита htpasswd.exe (htpasswd для Unix систем) входящая в поставку Apache.

Для того, чтобы добавить пользователя используется следующая команда:

  htpasswd имя_файла_пользователей имя_нового_пользователя
Далее набрать пароль для этого пользователя.

Если файл пользователей еще не создан, то надо воспользоваться ключом -c.

Вот пример создаваемого файла:

 dron:$apr1$bO4.....$oIBBIZfj27NS3Fld2DTz5/
 test:$apr1$h42.....$Z8JAOQzR2gWnP0badKnR8/
 h1:$apr1$.z3.....$s1/rRsIGQXFi5R2jERkHZ0
 h2:$apr1$rY4.....$kO3khLJj69l5hbZYAZymd0

В данном случае все пароли зашифрованы алгоритмом MD5, но в другой системе (если у нее есть поддержка шифрования) может использоваться совершенно иной метод, и поэтому, например, файлы созданные для Windows или FreeBSD не смогут работать на серверах с Linux SlackWare, т.к. первые две системы шифруют методом MD5, а третья методом DES. Так что надо точно знать, какая система установлена на сервере, и какой метод она использует.

Если Вы все правильно сделали, то при заходе на вашу защищенную страничку пользователь увидит следующий диалог:

step18.gif (2947 b)

Существует еще один метод ограничения доступа. Этот метод заключается в перечислении IP адресов, которым запрещен или разрешен доступ. Делается это с помощью директив allow или deny.

Для открытия доступа пользователю с IP адресом 192.168.1.2 надо создать .htaccess и записать в него:

 deny from all
 allow from 192.168.1.2
В этом случае все пользователи будут получать сообщение о запрете доступа "403 Forbidden", кроме пользователя с адресом 192.168.1.2, который сможет зайти в данный ресурс.

И другая схема, доступ для всех, кроме перечисленных:

order allow,deny
allow from all
deny from 192.168.1.2

В этом случае надо сменить порядок запрещающих директив. Для этого используется директива order. Запись Order allow,deny следует трактовать, как "Сначала разрешить, потом запретить". В этом случае пользователю 192.168.1.2 строкой allow from all сначала разрешится доступ, а потом запретится следующей строкой. Если же будет использоваться Order deny,allow, как в предыдущем случае (по умолчанию), то пользователю сначала разрешится доступ, а потом не сможет запретиться и он спокойно пройдет внутрь, хотя он не должен этого делать :-).

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


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Кузин Андрей - 1.12.99