Zugriff für einige (Unter-)Ordner aus dem Apache Root-Ordner verhindern

  • Hallo zusammen,


    ich versuche zu verhindern, dass einige (Unter-)Ordner aus meinem Apache Root-Ordner von extern erreichbar sind.

    Ich habe dies bereits mit dem Apache-Modul "mod_rewrite" versucht, jedoch bekomme ich es nicht ganz hin.


    Meine Ordner-Struktur "/var/www" unter sieht wie folgt aus:

    • folder1/subfolder1/...
    • folder2/...
    • folder3/...
    • ...

    Folgende Bedingungen müssen jetzt über die RewriteEngine erfüllt werden

    1. Zugriff auf folder2 und folder3 und alles was darunter liegt, soll verhindert werden
    2. Zugriff auf folder1 direkt, soll verhindert werden, jedoch auf alle Ordner und deren Dateien darunter, soll erlaubt sein
    3. Wenn der Zugriff verhindert wird, soll als Response ein 404 (File not found) zurügegeben werden.

    Im Besten Fall, werden auch neue Ordner zum Zugriff geschützt, bis diese explizit freigeben werden.


    Wäre super, wenn mir jemand einen Tipp geben kann, wie ich diies umgesetzt werden kann.


    Gruß

    Esche

  • Hay,


    also ich persönlich würde es etwas einfacher über die Dateirechte regeln - dann käme aber ein 403 raus, kein 404.


    CU, Peter

    Peter Kleemann // https://www.pkleemann.de // +49 621 1806222-0 // Kann Programme, Internet, Netzwerke und Telefon.

  • Bei einem 403 wüsste aber der Aufrufer, dass der Pfad exisitiert, was ich eher vermeiden möchte....
    Außerdem würde dies glaube ich nicht mit dem Zugriff auf einen Unterordner (siehe Bedingung 2) funktionieren oder?

  • Hay,


    Bei einem 403 wüsste aber der Aufrufer, dass der Pfad exisitiert, was ich eher vermeiden möchte....

    Das ist richtig.


    Außerdem würde dies glaube ich nicht mit dem Zugriff auf einen Unterordner (siehe Bedingung 2) funktionieren oder?

    Doch, so lange das übergeordnete Verzeichnis nur ein Bestandteil des Pfades ist. Moment...


    Noch einfacher... wenn folder1 leer bleiben kann, dann lass ihn leer, dann kommt sowieso ein 404. Dann musst Du noch nicht einmal mit den Rechten was machen...


    Und in der .htaccess oder in der Doc-Definition ein


    Code
    Options -Indexes



    CU, Peter

    Peter Kleemann // https://www.pkleemann.de // +49 621 1806222-0 // Kann Programme, Internet, Netzwerke und Telefon.

  • Hallo Peter:

    Danke, aber die Ordner bleiben natürlich nicht leer! Grundsätzliches Ziel ist ja die Struktur bzw. deren Inhalt zu schützen. Das Directory Listing hab ich aus Sicherheitsgründen bereits komplett deaktiviert


    Am besten du hast eine Standard 404 Seite, dann kannst du mittels mod_rewrite entsprechend weiterleiten:

    Apache Configuration
    RewriteRule ^folder2/ /404.html [L,R=404]

    Hallo anco:

    Grundsätzlich ist mir schon klar, wie das funktioniert. Den Zugriff für einen oder mehrere Ordner grundsätzilch zu unterbinden, habe ich auch bereits umgesetzt.


    Apache Configuration
     <Directory ~ "(/var/www/folder2/|/var/www/folder3/)">
            RewriteEngine On
            RewriteBase /
            RewriteRule ^(.*)$ - [R=404,L]
    </Directory>


    Nur leider schaffe ich es nicht, den "folder1" nur auf der ersten Ebene zu verbieten.

    Noch besser wäre es wie gesagt, wenn das ganze anders herum funktioniert. D. h. man gibt die Ordner an, auf denen der Zugriff erlaubt sein soll und nicht wie aktuell, die Ordner die geschützt sein sollen.

    Übergangsweise habe ich mir als Workaround mit einer index.php Datei beholen, welche einen 404 im Header bzw. Body zurück gibt.

  • Versuch mal das hier:

    Apache Configuration
    <Directory ~ "(/var/www/folder2/|/var/www/folder3/)">
      RewriteEngine On
      RewriteBase /
      RewriteRule ^subfolder/ - [L]
      RewriteRule ^(.*)$ - [R=404,L]
    </Directory>
  • Ich verstehe den Sinn darin nicht, eine 404 statt 403 zurück zu geben. Lässt sich doch in den Logs leichter nach filtern ;)


    Hätte das auch eher mit einer htaccess gemacht, das finde ich weniger Fehleranfällig.


    Für mod_rewrite ist das Vorgehen, alle Anfragen auf die 404 weiterzuleiten und Ausnahmen für deine erlaubten Ordner/Dateien zu machen.

    =>

    Code
    RewriteCond %{REQUEST_URI} !^/(erlaubter/Ordner1|erlaubter/Ordner2)(/.*)?
  • Vielen Dank, mittlerweile habe ich folgende Lösungsmöglichkeiten gefunden


    Apache Configuration
    <DirectoryMatch "/var/www/(?!folder1/subfolder1)">
            RewriteEngine On
            RewriteBase /
            RewriteRule ^(.*)$ - [R=404,L]
    </DirectoryMatch>

    oder

    Apache Configuration
    <DirectoryMatch "/var/www/folder1/(?!subfolder1)|/var/www/folder2/|/var/www/folder3/">
            RewriteEngine On
            RewriteBase /
            RewriteRule ^(.*)$ - [R=404,L]
    </DirectoryMatch>



    Ich verstehe den Sinn darin nicht, eine 404 statt 403 zurück zu geben. Lässt sich doch in den Logs leichter nach filtern ;)


    404 = Gibt es nicht
    403 = Gibt es, aber man hat keinen Zugriff

    Sollten jetzt Bots, Hacker etc.. auf diese Adressen stoßen, sollten diese ein 404 bekommen, damit diese nicht erkennen, dass sich dahinter etwas versteckt.

    Dies ist meiner Meinung nach sogar dann sinnvoll, wenn man durch die Ordnernamen Rückschlüsse auf die installierten Anwendungen schließen kann.