2015-11-16 8 views
5

Я пытаюсь удовлетворять следующие требования (в Apache HTTPD 2.2):Объединения Базовой аутентификации и LimitExcept в Apache 2.2 Virtual Host

  • Если метод HTTP ничего, кроме HEAD, POST или GET не разрешить доступ, независимо от любого из следующего.
  • Если пользователь является внутренним, разрешите доступ без основной проверки подлинности.
  • Если пользователь является внешним, попробуйте выполнить базовую аутентификацию и разрешите, если у них есть хорошие учетные данные.

Это одна из многих вещей, которые я пробовал, но ни одна из вещей, которые я пытался достичь все три требования:

<Directory /path/to/wwwroot> 
    Options FollowSymLinks 
    AllowOverride FileInfo 

    # Basic Authentication 
    AuthType Basic 
    AuthName "Enter your site username and password." 
    AuthUserFile /path/to/stage.passwords 
    AuthGroupFile /path/to/stage.groups 
    Require group stageusers 

    # there's more logic for this variable in the real virtual_host. 
    # for this simplified example, manually set (using the following) 
    # or unset (using !internal_user). 
    SetEnv internal_user 

    Order deny,allow 
    Deny from all 
    Allow from env=internal_user 

    <LimitExcept HEAD POST GET> 
     Deny from all 
    </LimitExcept> 

    Satisfy all 

</Directory> 

Я читал документацию на Удовлетворить, Limit, LimitExcept, Order и базовая аутентификация, но мне сложно скомпоновать их.

Что такое жизнеспособный способ?

ответ

3

AFAICT в Apache 2.2 вам нужно вернуться к подходу «Удовлетворите любого», а затем обработать проверку методов с помощью mod_rewrite. Это лучший маршрут, потому что ваши проверки метода полностью независимы.

В 2.4, Limit/LimitExcept заменяются/упрощаются mod_allowmethods, но требуют также проверки методов напрямую. Там намного проще.

переписывания часть довольно проста:

RewriteEngine ON 
RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|POST)$ 
RewriteRule .* - [F] 

Но вам нужно будет убедиться, что он появляется в каждом главном + виртуальный хост-сервер, который может получить доступ к каталогу, в отличие от других директив.

Собирает все вместе

# Only allow expected HTTP methods. 
RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|POST)$ 
RewriteRule .* - [F] 

<Directory /path/to/wwwroot> 
    Options FollowSymLinks 
    AllowOverride FileInfo 

    Satisfy any 

    # Basic Authentication 
    AuthType Basic 
    AuthName "Enter your site username and password." 
    AuthUserFile /path/to/stage.passwords 
    AuthGroupFile /path/to/stage.groups 
    Require group stageusers 

    # there's more logic for this variable in the real virtual_host. 
    # for this simplified example, manually set (using the following) 
    # or unset (using !internal_user). 
    SetEnv internal_user 

    Order deny,allow 
    Deny from all 
    Allow from env=internal_user 

</Directory> 
+0

Я не был в состоянии вернуться к этой задаче до сегодняшнего дня. Раньше я никогда не пользовался щедростью, но теперь я не могу его наградить * и * он вычитается из моего репрезентата. Я предполагаю, что за этой системой существует логика (чего я не понимаю). –

+0

не беспокоится re: bounty – covener