Platzhalterbild

Dateien und Ordner auf einer Website sperren

Oft befinden sich auf einem Webspace Dateien, die nicht öffentlich zugänglich sein sollten. Durch fehlerhafte Konfigurationen sind diese Dateien jedoch oft trotzdem einsehbar (Siehe z.B CVE-2019-9724). Daher zeige ich in diesem Artikel, wie man den Zugriff auf Dateien und Verzeichnisse verbietet. Dieser Ratgeber ist für Seiten geschrieben, die mit Apache laufen.

Die einfachste Methode zuerst…

Zuerst sollte man sich gut überlegen, ob eine zu sperrende Datei wirklich einen Platz auf dem Webspace verdient hat. Gesperrte Dateien sind zwar grundsätzlich nicht aufrufbar, jedoch können diese Dateien durch Sicherheitslücken (z.B Local File Inclusion) trotzdem aufgerufen werden.

Wenn die Datei also nicht zwingend gebraucht wird, ist es wahrscheinlich am besten, diese zu löschen! Man sollte es sich also zweimal überlegen, bevor man Logdateien, Statistiken oder Kontaktformulardaten in einer Datei abspeichert; Auch, wenn diese gesperrt ist.

Sperrung über das Dateisystem

Ziemlich einfach funktioniert eine Sperrung einer Datei oder eines Ordners das Verändern der Dateisystemberechtigungen. Diese lassen sich durch eine FTP (File Transfer Protocol) oder SSH (Secure Shell) Verbindung verändern. Ich empfehle die Verwendung von FTP mit FileZilla. Andere Clients lassen sich natürlich ebenfalls verwenden.

Wichtig: Nach jeder Änderung der Einstellungen muss der Zugriff auf die Dateien ausgiebig getestet werden!

Per FTP

Um die Sperrung einer Datei oder eines Ordners per FTP ist ziemlich simpel. Verbinden (hier mit FileZilla), Datei oder Verzeichnis auswählen, im Kontextmenü Dateiberechtigungen… auswählen und die entsprechenden Berechtigungen setzen

Dateien sperren über FTP in FileZilla
Datei oder Verzeichnis auswählen…
Dateien sperren über FTP in FileZilla
Und die Dateiberechtigungen setzen

Der entsprechende numerische Wert für das sperren einer Datei lautet 600. Dieser Wert bewirkt, dass die Datei für externe Verbindungen (aus dem Internet) gesperrt wird, jedoch noch von PHP-Scripts genutzt werden kann.

Falls man so ein Verzeichnis sperrt, muss man im Dateiberechtigungsdialog noch die entsprechende Option Unterverzeichnisse einbeziehen aktivieren.

Per SSH

Um eine Datei oder ein Verzeichnis per SSH zu sperren, muss man sich nur Verbinden und per cd ins entsprechende Verzeichnis navigieren.

Eine Datei sperrt man dann wie folgt:

sudo chmod 600 dateiname

Ein Verzeichnis, einbezüglich der Unterverzeichnisse, sperrt man wie folgt:

sudo chmod -R 600 verzeichnis/

Mithilfe einer .htaccess Datei

Falls die erste Methode nicht funktioniert, oder falls Du die Datei doppelt sperren möchtest, lassen sich Dateien oder Ordner auch mithilfe einer oder mehreren .htaccess Konfigurationsdateien sperren.

Eine .htaccess Datei ist einfach eine Datei mit dem Namen .htaccess und wird von Apache-Servern verwendet, um Dateien zu sperren, Weiterleitungen zu aktivieren, einen Passwortschutz einzurichten etc.

Einzelne Dateien sperren

Um eine einzelne Datei zu sperren, muss eine .htaccess Datei mit folgendem Inhalt in dem Verzeichnis, in dem sich die Datei befindet, erstellt werden:

<Files DATEINAME>
Order allow,deny
Deny from all
</Files>

Zu bemerken ist hier auch noch, dass wenn man eine einzelne Datei in einem Verzeichnis sperrt, bei dem das Directory Listing aktiv ist, wird die gesperrte Datei aus der Liste entfernt. Auch der Name bleibt also trotz Directory Listing geheim.

Einen ganzen Ordner sperren

Um den Zugriff auf ein ganzes Verzeichnis zu sperren, erstellt man einfach eine .htaccess Datei mit folgendem Inhalt:

Deny from all

Weiteres .htaccess Zeugs

Directory Listing deaktivieren

Wenn Directory Listing aktiviert ist, werden bei einem Aufruf eines Verzeichnisses alle Dateien aufgelistet, die sich darin befinden- ausgenommen der Dateien, die per .htaccess gesperrt wurden.

Falls man dies nicht will, kann man diese Funktion ganz einfach deaktivieren, indem man folgenden Code in die .htaccess Datei des zu sperrenden Verzeichnisses schreibt:

Options -Indexes

Einen Passwortschutz einrichten

Falls man zum Beispiel trotzdem noch von Zeit zu Zeit auf eine Log-Datei Zugreifen will, bietet sich ein Passwortschutz an. Folgender Code sperrt alle Dateien und Ordner in dem Verzeichnis, in dem sich die .htaccess Datei befindet:

AuthUserFile /var/www/.htpasswd
AuthType Basic
AuthName "Gesperrt"
Require valid-user

Und falls man nur eine einzelne Datei sperren will, lässt sich das wie folgt einrichten (der DATEINAME ist zu ersetzen):

<FilesMatch "DATEINAME">
AuthUserFile /var/www/.htpasswd
AuthType Basic
AuthName "Gesperrt"
Require valid-user
</FilesMatch>

Bei AuthUserFile muss der absolute Pfad zur .htpasswd Datei angegeben werden. Diese Datei erstellen wir im nächsten Schritt. Den absoluten Pfad zum Webspace lässt sich ganz einfach herausfinden: Einfach eine .php Datei mit dem Inhalt auf der Website abspeichern, die Datei schnell abrufen, den Pfad merken und die Datei wieder löschen.

Der AuthName ist der Text, der angezeigt wird, wenn man versucht, das Verzeichnis zu öffnen. Diesen kann man beliebig ändern.

.htpasswd Datei erstellen

Zusätzlich muss man noch eine .htpasswd Datei erstellen. Diese kann auch mehrere Benutzer beinhalten. Da die Passwörter in dieser Datei gehasht sind, muss man diese Datei mit einem entsprechenden Tool erstellen. Der offizielle Weg dazu ist die Verwendung des Tools htpasswd. Eine Passwortdatei für den Usernamen Benutzer lässt sich zum Beispiel wie folgt erstellen: htpasswd -c .htpasswd Benutzer

Wer dieses Tool nicht bereits installiert hat und es auch nicht installieren will, kann auch eine Website zur Erstellung verwenden. Dafür eignet sich zum Beispiel diese Seite. Den erstellten String muss man dann nur noch in die (oben angegebene) .htpasswd-Datei einfügen und fertig!

Schlusswort

Es gibt viele verschiedene Wege, Dateien oder Verzeichnisse zu sperren. Alle haben ihre Vor- und Nachteile. Auch hier gilt: Doppelt genäht hält besser! Es macht also durchaus Sinn, mehrere Massnahmen zur Sperrung zu verwenden.

Und wie immer bei einer Änderung der Konfiguration: Testen, testen, testen. Fehler in der .htaccess Datei können fatale Folgen haben. Also wenn möglich auch immer ein Backup der Datei anlegen.

Falls noch Fragen sind: Kommentare, Mails etc. sind erwünscht!

News und andere interessante Sachen.

Blog.

Auf unserem Blog finden Sie interessante Artikel über von uns gefundene Sicherheitslücken, aktuelle Themen, Neuigkeiten und weiteres