2015-11-16 14 views
5

Ich versuche, die folgende Voraussetzungen zu erfüllen (in Apache 2.2) Kombination:Standardauthentifizierung und LimitExcept in Apache 2.2 Virtual Host

  • Wenn die HTTP-Methode alles andere als HEAD, POST ist, oder nicht bekommen, Zugriff gewähren, unabhängig von den folgenden Bedingungen.
  • Wenn der Benutzer intern ist, erlauben Sie den Zugriff ohne die grundlegende Authentifizierung Herausforderung.
  • Wenn der Benutzer extern ist, fordern Sie die Standardauthentifizierung an und lassen Sie sie zu, wenn sie über gute Anmeldeinformationen verfügen.

Dies ist eines der vielen Dinge, die ich versucht habe, aber keines der Dinge, die ich versucht habe, erreicht alle drei Anforderungen:

<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> 

ich die Dokumentationen zu Satisfy gelesen haben, Limit, LimitExcept, Order und Basic Authentication, aber ich habe Probleme, die Teile zusammenzusetzen.

Was ist ein praktikabler Weg, dies zu tun?

Antwort

3

AFAICT in Apache 2.2 müssen Sie zurück zu einem "Satisfy Any" -Ansatz gehen dann behandeln die Methodenüberprüfungen mit mod_rewrite. Dies ist der beste Weg, da Ihre Methodenüberprüfungen völlig unabhängig sind.

In 2.4 werden Limit/LimitExcept durch mod_allowmethods ersetzt/vereinfacht, erfordern aber auch Methoden direkt zu überprüfen. Es ist viel einfacher dort.

Der Rewrite Teil ist ziemlich einfach:

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

Aber Sie werden es in jedem vHost + Hauptserver sicherstellen müssen, das auch das Verzeichnis, im Gegensatz zu den anderen Richtlinien zugreifen kann.

es Putting alles zusammen

# 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

Ich war zu dieser Aufgabe zurück, bis heute nicht in der Lage. Ich habe noch nie ein Bounty benutzt, aber jetzt kann ich es nicht vergeben * und * es wird von meinem Rep abgezogen. Ich denke, hinter diesem System steckt eine Logik (die ich nicht verstehe). –

+0

keine Sorgen re: Kopfgeld – covener