Wie verwende ich die Basisauthentifizierung für eine einzelne Datei in einem ansonsten verbotenen Apache-Verzeichnis?

Wie verwende ich die Basisauthentifizierung für eine einzelne Datei in einem ansonsten verbotenen Apache-Verzeichnis?

Ich möchte den Zugriff auf eine einzelne Datei in einem Verzeichnis erlauben, der ansonsten verboten ist.

Das hat nicht funktioniert:

<VirtualHost 10.10.10.10:80>
  ServerName example.com

  DocumentRoot /var/www/html

  <Directory /var/www/html>
    Options FollowSymLinks
    AllowOverride None
    order allow,deny
    allow from all
  </Directory>

  # disallow the admin directory: 
  <Directory /var/www/html/admin>
    order allow,deny
    deny from all
  </Directory>

  # but allow this single file:: 
  <Files      /var/www/html/admin/allowed.php>
      AuthType basic
      AuthName "private area"
      AuthUserFile /home/webroot/.htusers
      Require user admin1
  </Files>

  ...
</VirtualHost>

Beim Besuch http://example.com/admin/allowed.phperhalte ich die Verboten-Meldung des http://example.com/admin/Verzeichnisses, aber nicht das Browser-Anmelde-Popup der Basisauthentifizierung. Die Basisauthentifizierung funktioniert also bei der Datei nicht. Wie kann ich eine Ausnahme für allowed.php machen?

Wenn das nicht möglich ist, könnte ich vielleicht alle verbotenen Dateien in einer anderen Dateidirektive auflisten?

Nehmen wir an, admin/ enthält auch user.php und admin.php, die in diesem virtuellen Host verboten sein sollten.

Bearbeiten:Ich habe außerdem versucht, die folgende Änderung vorzunehmen und dabei den Ratschlägen aus Ignacios Antwort zu folgen, mit dem gleichen Ergebnis „Verboten“:

  ...

  # disallow the admin directory: 
  <Directory /var/www/html/admin>
    order allow,deny
    deny from all
  </Directory>

  # but allow this single file:: 
  <Files      /var/www/html/admin/allowed.php>
      order allow,deny
      allow from all
      AuthType basic
      AuthName "private area"
      AuthUserFile /home/webroot/.htusers
      Require user admin1
      satisfy all
  </Files>
  ...

Antwort1

Versuche dies:

<Directory /var/www/html/admin>
  <Files allowed.php>
    AuthType basic
    AuthName "private area"
    AuthUserFile /home/webroot/.htusers
    Require user admin1
  </Files>
  order allow,deny
  deny from all
  satisfy any
</Directory>

In einem Verzeichnis verschachtelte Dateien werden nur dort angewendet, sodass Ihr Codeblock logischer organisiert ist, und ich denke, dass die Verwendung von „Satisfy any“ es ermöglicht, sie wie geplant zusammenzuführen. Ich bin nicht sicher, ob es wirklich erforderlich ist, also probieren Sie es mit und ohne die „Satisfy“-Zeile aus …

Antwort2

Ich bin mir nicht sicher, ob die Lösung <Files xxx>wirklich gut funktioniert, da dieDokumentseite erforderlichbesagt, dass es nicht gilt fürFiles

Context:    directory, .htaccess

Stattdessen wird in der Apache-Dokumentation vorgeschlagen, ein separates Verzeichnis für die Datei zu erstellen:

Entfernen von Steuerelementen in Unterverzeichnissen

Das folgende Beispiel zeigt, wie Sie mit der Direktive Satisfy die Zugriffskontrollen in einem Unterverzeichnis eines geschützten Verzeichnisses deaktivieren. Diese Technik sollte mit Vorsicht verwendet werden, da sie auch alle von mod_authz_host auferlegten Zugriffskontrollen deaktiviert.

<Directory /path/to/protected/>
    Require user david
</Directory>
<Directory /path/to/protected/unprotected>
    # All access controls and authentication are disabled
    # in this directory
    Satisfy Any
    Allow from all
</Directory>

verwandte Informationen