Справочники, инструменты, документация

htaccess: Идентификация и ограничение доступа в Apache

Директива Satisfy определяет способ взаимодействия директив идентификации (используемые для защиты паролем) с директивами доступа (например, Allow/Deny). С ее помощью вы, например, можете заставить Apache выполнять те запросы, которые удовлетворяют только требованиям идентификации, либо только требованиям доступа. Или вы можете сделать, чтобы запрос удовлетворял всем требованиям.

Директива Satisfy принимает два значения:

  1. Satisfy Any Пропускает запрос, если выполнено любое из требований (идентификация или проверка доступа).
  2. Satisfy All Пропускает запрос, только если оба требования выполнены (и идентификация и проверка доступа).

Для примера возьмем следующий сценарий:

<Directory /home/www/site1/private>
    AuthUserFile /home/www/site1-passwd
    AuthType Basic
    AuthName MySite
    Require valid-user
</Directory>

При такой конфигурации вашим пользователям необходимо будет пройти процедуру идентификации.

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

<Directory /home/www/site1/private>
    AuthUserFile /home/www/site1-passwd
    AuthType Basic
    AuthName MySite
    Require valid-user
    Order allow, deny
    Allow from 172.17.10
    Satisfy any
</Directory>

Такая конфигурация заставит всех "внешних" пользователей пройти процедуру идентификации, а тех, кто пришел с локальной сети, пропустит. Apache предоставит им полный доступ к каталогу private без идентификации.

Все вышеописанное также работает и с подкаталогами вашего защищенного каталога. Допустим, вам нужен незакрытый подкаталог nonprotect, который находится в каталоге private. Причем к каталогу nonprotect должен иметь доступ любой пользователь без ввода какого-либо пароля. Делается это следующим образом:

<Directory /home/www/site1/private/nonprotect>
    Order allow,deny
    Allow from all
    Satisfy any
</Directory>

И, наконец, если у вас есть очень секретный каталог, тогда вы можете ограничить к нему доступ, как с помощью пароля, так и с помощью проверки IP пользователя.

<Directory /home/www/site1/super-secret>
    AuthUserFile /home/www/site1-passwd
    AuthType Basic
    AuthName MySite
    Require valid-user
    Order allow,deny
    Allow from 172.17.10
    Satisfy all
</Directory>

В приведенном выше примере директива Order allow, deny по умолчанию блокирует доступ для всех, директива Allow разрешает доступ пользователям из локальной сети, а директива Satisfy all требует проверки как IP, так и пароля.