2016-04-01 11 views
2

ist es möglich, den Zugriff auf eine bestimmte Datei über <Dateien> > oder < Filesmatch zu ermöglichen, so dass diese Regel nicht identisch Dateien in Unterordner namens angewandt wird?Apache Conf - Filesmatch erlaubt nur im aktuellen Ordner, Unterordner nicht

Aktuelle Einstellung:

<FilesMatch "\.php$"> 
    Deny from all 
</FilesMatch> 

<Directory /var/www/> 
    <Files index.php> 
     Allow from all 
    </Files> 
</Direcotry> 

<Directory /var/www/admin/> 
    <Files index.php> 
     Allow from all 
    </Files> 
</Direcotry> 

Nehmen wir an, die folgenden:

  1. Wir haben eine index.php in web-root, ein in Unterordner admin, und in verschiedenen anderen Unterordner, gibt es auch einige index.php Dateien.
  2. Nein * .php sollte zugänglich sein, wenn nicht ausdrücklich erlaubt - in diesem Fall nur /index.php und /admin/index.php

Was geschieht: Zugang

Wenn Lassen Die webroots index.php, alle index.php-Dateien in allen Unterordnern werden zugänglich.

Was versucht wurde:

Directory Mit Zugriff auf index.php in Unterordner zu verbieten.

<FilesMatch ".+\.php$"> 
    Deny from all 
</FilesMatch> 

<Directory /var/www/> 
    <Files index.php> 
     Allow from all 
    </Files> 
</Direcotry> 

<DirectoryMatch "/var/www/(.+)/"> 
    <Files index.php> 
     Deny from all 
    </Files> 
</DirectoryMatch> 

<Directory /var/www/admin/> 
    <Files index.php> 
     Allow from all 
    </Files> 
</Direcotry> 

nun Zugriff auf alle index.php Dateien in allen Unterordnern ist nicht erlaubt - sondern auch auf die index.php in/admin/die noch erlaubt sein sollte.

auch versucht, mit absolut pathes auf die Dateien

<FilesMatch ".+\.php$"> 
    Deny from all 
</FilesMatch> 
<Files /var/www/index.php> 
    Allow from all 
</Files> 
<Files /var/www/admin/index.php> 
    Allow from all 
</Files> 

Das hat nicht funktioniert auch. Keine index.php-Datei war zugänglich - auch die im Webroot und im Admin-Ordner waren nicht erreichbar.

Ich glaube, dass es bessere Ansätze gibt, um ein Problem wie dieses zu lösen?

Mit freundlichen Grüßen

Dominik

+0

Es ist etwas falsch mit Ihren Setups: Sie können ein geöffnetes '' Tag nicht mit einem'' Tag schließen. Werfen Sie einen Blick auf die Dokumentation: http://httpd.apache.org/docs/current/mod/core.html#filesmatch Dies sollte sicherlich in Ihrer HTTP-Server-Fehlerprotokolldatei hingewiesen werden. Sie müssen diese Datei überwachen, wenn Sie Änderungen an Ihrem Setup vornehmen. – arkascha

+0

Hallo arkascha, danke für Ihren Hinweis. Leider ist dieser Fehler in der echten Konfigurationsdatei nicht vorhanden. Dieser Fehler kam beim Schreiben der Frage hier auf. Auch mit den richtigen offenen und schließenden Tags tritt dieses Problem –

+0

IIRC auf, dann können Sie eine '' Direktive innerhalb eines' ' Tags setzen. Und Sie können ein anderes Verzeichnis-Tag mit einem Platzhalter für die Unterordner definieren (so '') und verwenden Sie eine Zugriffsverweigerung '' Anweisung wieder dort. Vielleicht lohnt es sich, es zu versuchen. – arkascha

Antwort

0

Dank arkascha,

die Directory Methode war die falsche Idee.

Die Lösung dafür ist einfach - wie von arkascha empfohlen:

<FilesMatch "\.php$"> 
    Deny from all 
</FilesMatch> 

<Directory /var/www/> 
    <Files index.php"> 
     Allow from all 
    </Files> 
</Direcotry> 

<Directory /var/www/*/*"> 
    <Files index.php> 
     Deny from all 
    </Files> 
</Directory> 

<Directory /var/www/admin/> 
    <Files index.php> 
     Allow from all 
    </Files> 
</Direcotry> 

Ihnen sehr danken.

Verwandte Themen