Ein Blog über Code, Hardware und Co

Wordpress und Webentwicklung

Einen Verzeichnisschutz mittels .htaccess erstellen [Apache, nginx]

Zuletzt aktualisiert am 14. Januar 2023.

Oder: Wie du Testumgebungen und Co vor neugierigen Augen schützt.

Du hast eine Webseite oder einen Bereich einer Webseite, der nur für bestimmte Nutzer nach einer Authentifizierung zugänglich sein soll und für andere Augen gesperrt sein soll?
Das ist zum Glück nicht schwer, ich zeige dir, wie es geht!

Auch wenn du ein neues Feature deiner Webseite auf einer Testumgebung ausprobieren möchtest, empfiehlt es sich unbedingt – sofern die Testumgebung nicht ohnehin nur lokal läuft (was auf jeden Fall der bessere Weg ist!) – einen Passwortschutz vor die Webseite zu legen.

Der universelle Weg (Apache): Verzeichnisschutz mittels htaccess und .htpasswd

Achtung: Die .htaccess-Datei, benötigt einen Punkt vor dem Dateinahmen. Das ist ein häufiger Grund für Fehler ;)

Beim weit verbreiteten Apache Webserver kann man direkt aus dem jeweilig zu schützenden Verzeichnis heraus einen Verzeichnisschutz erstellen.
Dieser Verzeichnisschutz besteht aus zwei Teilen. Einer grundsätzlichen Anweisung, dass es einen Verzeichnisschutz gibt und welche (Unter-)Verzeichnisse geschützt werden sollen (.htaccess-File), sowie einem File, in dem die Zugangsdaten (Nutzer und Passwort) vermerkt sind (.htpasswd-File).

Hinweise:
-> Bei nginx-(oder anderen) Webservern funktioniert der Verzeichnisschutz per htaccess nicht.
-> Im Apache-Webserver muss die Verarbeitung von htaccess-Dateien aktiviert sein. Diese Einstellung ist aber i.d.R. standard.

1) .htpasswd erstellen/öffnen

Sofern nicht bereits vorhanden, erstellen wir über die Konsole mittels “touch .htpasswd” eine Passwort-Datei. Man sollte darauf achten, dass sich diese Datei in einem anderen Verzeichnis befindet und nicht in dem Verzeichnis, das man schützen will.

Dann öffnen wir das File mittels “vi .htpasswd” und tragen dort eine Username:Passwort-Kombination ein:

username:passwort

Wenn mehrere Benutzer eingetragen werden solle, so kann je Zeile einfach eine weitere User:Passwort-Kombination eingetragen werden.
Das Passwort sollte IMMeR als verschlüsselter, gehashter String hinterlegt werden, das sieht dann so aus:
testnutzer:$apr1$bodu7sw8$gwecyMp3RhT4hentJ0Un8.

Der Passworthash lässt sich leicht mittels Onlinediensten (z.B: diesem htpasswd-Generator) erzeugen.

Hinweis: Die Datei ist lediglich eine Liste der berechtigten Nutzer, sie schützt nicht automatisch das Verzeichnis, in dem sie liegt.

2) .htaccess-File erstellen/öffnen

Sofern es noch kein .htaccess-File gibt, musst du dieses zunächst erstellen.
Auf einem Linux-System geht das ganz einfach mittels des Befehls “touch .htaccess”.

Wenn ein htaccess-File existiert, musst du es öffnen/bearbeiten. Das geht auf Linux-Systemen auf der Konsole z.B. mittels “nano .htaccess” oder “vi .htaccess”.

Anmerkung: Dateien mit einem Punkt werden in vielen Betriebssystemen/Filemanagern standardmäßig ausgeblendet, stelle daher sicher, dass auch “versteckte Dateien” bzw. “Systemdateien” angezeigt werden.
Wenn du auf einem Linux-System auf der Konsole arbeitest, kannst du dir alle Files mit Hilfe des Befehls “ls -la” anzeigen lassen.

3) Verzeichnisschutz in .htaccess eintragen

In die geöffnete .htaccess-Datei tragen wir nun folgenden Inhalt ein:
AuthType Basic
AuthName "Zugangsgeschützter Bereich"
AuthUserFile /pfad/zur/datei/.htpasswd
Require valid-user

Dann einmal abspeichern. Fertig, der Verzeichnisschutz ist ab sofort erstellt.

Was bedeuten eigentlich die einzelnen Zeilen in dieser .htaccess-Datei?

ZeileBedeutung
AuthType BasicHier wird definiert, dass es sich um den Authentifikationstyp “Basis” handelt. Es gibt z.B. auch noch den Type “None”, mit dem sich ein Verzeichnisschutz für ein Unterverezeichnis abstellen lässt.
AuthName "Zugangsgeschützter Bereich"Der Name des Zugangsgeschützten Verzeichnisses, der dem Nutzer angezeigt werden soll.
AuthUserFile /pfad/zur/datei/.htpasswdDer Pfad zur Datei, in der Nutzername und Passworthash gespeichert sind.
Require valid-userWas für eine Bedingung muss erfüllt sein, damit der Zugriff auf das Verzeichnis zugelassen wird? In diesem Fall muss es sich um eine valide User:Passwort-Kombination handeln.
Tabelle 1: Bedeutung der einzelnen Zeilen bei einem Verzeichnisschutz mittels .htaccess.

Tipp: Es ist übrigens vollkommen egal, wie die Datei heißt, in der die Username:Passwort Kombinationen stehen, es ist lediglich wichtig, dass die .htaccess-Datei sich in dem jeweils zu schützenden Verzeichnis befindet und auf die Datei mit den Passwort-User-Kombinationen verweist.

So ist es auch möglich, eine etwas umfangreiche Zugangsberechtigung bzw. mehrere geschützte Verzeichnisse zu erstellen und bequem zu verwalten:

Man kann z.Bn in seinem Home-Verzeichnis ein Unterverzeichnis namens “htpasswd” erstellen und dort zentral alle seine Zugangsdaten in Form von einzelnen Dateien verwalten, das könnte z.B. so aussehen:

htpasswd
–> ZugangsdatenVerzeichnis1
–> ZugangsdatenVerzeichnis2

usw.

Der universelle Weg (nginx)

Der Webserver nginx erfreut sich aufgrund seiner Leichtgewichtigkeit und Performance einer immer größeren Beliebtheit. Auch hier kannst du einen Verzeichnisschutz einrichten.

Nginx kennt jedoch keine .htaccess-Files oder ein Pendant dazu, welches direkt in dem jeweiligen Verzeichnis konfiguriert wird.

1) Konfigurationsfile öffnen

Nginx nutzt eine globale Konfigurationsdatei, in der auch der Verzeichnisschutz konfiguriert wird. Die Konfigurationsdatei nennt sich nginx.conf und findet sich in der Regel unter einem der folgenden Pfade:

  • /etc/nginx
  • /usr/local/etc/nginx
  • /usr/local/nginx/conf

Wir navigieren in das Verzeichnis, in dem das config-file liegt und öffnen es mit folgendem Befehl:

sudo nano /etc/nginx/nginx.conf

Anmerkung: Es ist notwendig, das File mittels sudo, oder als root-user zu öffnen.

2) Verzeichnisschutz eintragen

In diesem Config-file gibt es Bereiche für alle auf dem System genutzten vHosts.
Wir müssen nun nach dem Abschnitt suchen, der den jeweiligen Host, unter dem das Verzeichnis aufrufbar ist, definiert.
Der Eintrag sieht wie folgt aus:

server {
    listen 80;
    servername meinedomain.de www.meinedomain.de;
 
    location / { 
        #XYZ
    }
...
}

Innerhalb dieses Abschnitts ergänzen wir die folgenden Zeilen:

    location /geschuetztesVerzeichnis {
        auth_basic "Login";
        auth_basic_user_file /pfad/zur/passwortdatei/.htpasswd;
    }

In Summe sieht das dann z.B. so aus:

server {
    listen 80;
    servername meinedomain.de www.meinedomain.de;
 
    location / { 
        #XYZ
    }

    location /geschuetztesVerzeichnis {
        auth_basic "Login";
        auth_basic_user_file /pfad/zur/passwortdatei/.htpasswd;
    }
...
}

In der .htpasswd-Datei stehen dann die entsprechenden User:Passwort-Zugangsdaten wie bereits oben beschrieben.


Ein großer Vorteil ist, dass der Zugangsschutz und Zugangsdaten zentral an einer Stelle verwaltet wird und so übersichtlich organisiert werden kann.

Ein Nachteil des Verzeichnisschutzes bei nginx ist, dass die Einrichtung/Verwaltung root-Rechte benötigt. Das und die Eigenschaft, dass sich das Konfigurationsfile in der Standardkonfiguration an einer Stelle im Verzeichnisbaum befindet, auf die in der Regel nur Besitzer des kompletten Servers Zugang haben, kann zu Problemen bei Webspace und geteilten Umgebungen führen.
Diese Probleme lassen sich aber mit einer entsprechenden Konfiguration beheben.

Geschützte Verzeichnisse sind auch für Suchmaschinen nicht indexierbar

Eigentlich logisch, trotzdem noch einmal der gesonderte Hinweis: Geschützte Verzeichnisse können auch nicht von Suchmaschinen-Bots betreten und gecrawlt werden. Daher sind die dortigen Inhalte für Suchmaschinen wie google unsichtbar.

Schreibe eine Antwort