
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.php
erhalte 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>