Zum Hauptinhalt springen
S-EDV news
← Alle Anleitungen
📘 Anleitung Linux 01.10.2026 · 9 min Lesezeit

KeyHelp: Verzeichnisschutz mit Passwort für Staging-Seiten und Admin-Bereiche einrichten

So schützen Sie in KeyHelp Staging-Seiten und interne Ordner mit Benutzername und Passwort, legen mehrere Zugänge an und prüfen per curl, welche Apache-Konfiguration KeyHelp schreibt. Mit Warnung zur Ausnahmefunktion.

Geprüft am 01.10.2026 · für KeyHelp 26.1.1

WerbelinksMit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Mehr dazu

Illustration eines Hosting-Panels mit der Überschrift Verzeichnisschutz und den Karten Ordner, Benutzer, Passwort

Eine neue Website liegt schon auf dem Server, soll aber noch nicht öffentlich sein. Oder ein Kunde hat ein selbst gebautes Admin-Tool im Webspace, das niemand außer ihm aufrufen darf. Für solche Fälle bietet KeyHelp im Kundenbereich den „Verzeichnisschutz“: Ein Ordner unterhalb von /www fragt dann im Browser nach Benutzername und Passwort. Diese Anleitung zeigt, wie Sie den Schutz anlegen, mehrere Benutzer zulassen und Ausnahmen setzen, welche Apache-Konfiguration KeyHelp dafür schreibt und wo die Grenzen liegen. Die Wirkung haben wir auf einem Testserver mit curl nachgeprüft und dabei eine Schwachstelle bei den Ausnahmen gefunden. Grundlage ist ein KeyHelp-Server wie in KeyHelp installieren und absichern.

Voraussetzungen

  • KeyHelp-Server, getestet mit KeyHelp 26.1.1 (Build 3698) auf Debian 12.15.
  • Kundenzugang mit Webspace, im Beispiel der Kunde kunde1 mit der Domain kunde1.example.de.
  • Ein Ordner unter /www, im Beispiel /www/staging/ für eine Testseite und /www/admin/ für ein internes Werkzeug.
  • SSH-Zugang als root, wenn Sie die erzeugte Konfiguration wie hier nachprüfen wollen. Für die Einrichtung selbst ist er nicht nötig.

Schritt 1: Verzeichnisschutz anlegen

Im Kundenbereich finden Sie unter „Sicherheit“ den Menüpunkt „Verzeichnisschutz“. Die Seite erklärt den Zweck selbst: „Verwenden Sie diese für administrative Bereiche oder Seiten, auf die die Öffentlichkeit keinen Zugriff haben soll.“ Mit „Verzeichnisschutz hinzufügen“ öffnet sich das Formular.

  • „Verzeichnis“: Der Pfad steht relativ zu /www. Sie tippen ihn ein oder wählen ihn mit „Durchsuchen...“. Die KeyHelp-Dokumentation nennt diesen Button noch „Verzeichnisexplorer öffnen“, in Version 26.1.1 heißt er „Durchsuchen...“. Laut Hinweis gilt: „Wenn das angegebene Verzeichnis nicht existiert, wird es automatisch erstellt.“ Das hat im Test funktioniert, der Ordner /www/admin/ entstand beim Speichern.
  • „Titel des geschützten Bereichs“: optional. Apache sendet den Text als Realm im Header WWW-Authenticate mit, laut KeyHelp-Dokumentation wird er im Loginfenster des Browsers angezeigt.
  • „Benutzername“ und „Passwort“: Pflichtfelder. „Generieren“ erzeugt einen Passwortvorschlag.

Wir haben für /staging den Benutzer vorschau mit dem Titel „Staging kunde1“ angelegt. Die Bestätigung lautete: „Der Verzeichnisschutz für das Verzeichnis /www/staging/ wurde erfolgreich angelegt und steht in wenigen Augenblicken zur Verfügung.“ Der Schutz greift nicht sofort. 20 Sekunden nach dem Speichern war im Test noch keine Passwortdatei vorhanden, beim nächsten Blick gut eine Minute nach dem Speichern schon.

Verifizieren: Prüfen Sie mit curl, ob der Ordner ohne Anmeldung gesperrt ist. Auf einem Server mit öffentlichem DNS lassen Sie --resolve weg:

curl -s -D - -o /dev/null --resolve kunde1.example.de:80:127.0.0.1 http://kunde1.example.de/staging/ | grep -i "^HTTP\|WWW-Authenticate"
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Staging kunde1"

Schritt 2: Was KeyHelp technisch einrichtet

Laut KeyHelp-Dokumentation erfolgt die Steuerung über die Konfigurationsdatei der Domain im Webserver, im Verzeichnis wird „keine .htaccess bzw. .htpasswd“ angelegt. Im Test lag im Ordner staging tatsächlich nur die eigene index.html. Stattdessen hängt KeyHelp an die Apache-Konfiguration des Kunden in /etc/apache2/keyhelp/vhosts/kunde1.conf einen Abschnitt an:

# Directory protection
<Directory "/home/users/kunde1/www/staging/">
    AuthType Basic
    AuthName "Staging kunde1"
    AuthUserFile "/etc/apache2/keyhelp/htpasswd/.htpasswd_kunde1_9d5476f7
    <RequireAny>
        Require valid-user
    </RequireAny>
</Directory>

Der Block steht nicht in einem einzelnen VirtualHost, sondern gilt für das Verzeichnis. Deshalb wirkt er auf alle Domains, die auf diesen Webspace zeigen. Im Test galt der Schutz gleichermaßen für kunde1.example.de, www.kunde1.example.de und die System-Domain kunde1.server.example.de. Die Passwortdatei liegt außerhalb des Webspace /home/users/kunde1/www/, gehört www-data und ist nur für diesen lesbar (die Namen der Passwortdateien sind in dieser Anleitung gekürzt):

-rwx------ 1 www-data www-data   70 Oct  1 18:21 .htpasswd_kunde1_9d5476f7

Das Passwort steht darin als bcrypt-Hash, erkennbar am Präfix $2y$ (laut Apache-Dokumentation):

vorschau
$2y$10$

Verifizieren: Rufen Sie den Ordner einmal mit falschem und einmal mit richtigem Passwort ab. Das Passwort übergeben Sie mit -u benutzer:passwort. Unser Testlauf über alle drei Domains:

== kunde1.example.de
ohne Login: 401
falsches Passwort: 401
richtiges Passwort: 200
== www.kunde1.example.de
ohne Login: 401
falsches Passwort: 401
richtiges Passwort: 200
== kunde1.server.example.de
ohne Login: 401
falsches Passwort: 401
richtiges Passwort: 200
Startseite ohne Login: 200

Fehlversuche protokolliert Apache im Fehlerprotokoll der Domain, im Test /home/users/kunde1/logs/kunde1.example.de/error.log:

[Thu Oct 01 18:21:57.624077 2026] [auth_basic:error] [pid 1582:tid 1636] [client 127.0.0.1:54600] AH01617: user vorschau: authentication failure for "/staging/": Password Mismatch

Schritt 3: Mehrere Benutzer für einen Ordner

Pro Eintrag gibt es genau einen Benutzernamen. Für einen zweiten Zugang, etwa für eine Agentur, legen Sie einen weiteren Verzeichnisschutz für denselben Ordner an. Das beschreibt auch die Keyweb-Dokumentation so. Im Test haben wir für /staging zusätzlich den Benutzer redaktion angelegt. KeyHelp schrieb ihn in dieselbe Passwortdatei, der <Directory>-Block blieb einer. Für /admin entstand eine eigene Datei:

== /etc/apache2/keyhelp/htpasswd/.htpasswd_kunde1_01266630
vorschau
== /etc/apache2/keyhelp/htpasswd/.htpasswd_kunde1_9d5476f7
vorschau
redaktion

Die Liste zeigt jede Kombination aus Benutzer und Ordner als eigene Zeile. In der Spalte „S“ zeigen alle Einträge ein grünes Symbol, das graue Warndreieck neben /www/admin/ bedeutet laut Tooltip: „Für dieses Verzeichnis sind Ausnahmen definiert worden.“

KeyHelp-Kundenbereich Verzeichnisschutz mit drei Einträgen: vorschau für /www/admin/ mit Warndreieck für Ausnahmen, redaktion und vorschau für /www/staging/
Jeder Benutzer eines geschützten Ordners ist ein eigener Eintrag

Einen einzelnen Zugang entziehen Sie, indem Sie seinen Eintrag mit dem Papierkorb löschen. KeyHelp verlangt dabei die Checkbox „Bestätigung“ und meldete danach „Die folgenden Elemente wurden gelöscht.“ Der Benutzer verschwand aus der Passwortdatei, die anderen blieben:

/staging/ als redaktion nach Löschen: 401
/staging/ als vorschau: 200

Verifizieren: Nach dem Anlegen oder Löschen meldet sich jeder Benutzer einmal an. Ein gelöschter Benutzer erscheint im Fehlerprotokoll als user redaktion not found.

Schritt 4: Passwort ändern und Ausnahmen setzen

Das Stiftsymbol öffnet den Eintrag zum Bearbeiten. Die Passwortfelder sind dort keine Pflichtfelder mehr: „Lassen Sie das Feld leer, um das aktuelle Passwort beizubehalten.“ Unter „Ausnahmen definieren“ können Sie URL-Pfade freigeben, die trotz Schutz erreichbar bleiben sollen, etwa eine Schnittstelle, die ein externer Dienst ohne Passwort aufruft. KeyHelp erklärt dazu: „Geben Sie die Pfade so ein, wie sie in der Domain-URL erscheinen.“

KeyHelp-Formular Verzeichnisschutz bearbeiten mit Verzeichnis /www/admin/, aufgeklappten Ausnahmen mit /admin/api/, Titel Adminbereich, Benutzer vorschau und leeren Passwortfeldern
Ausnahmen geben URL-Pfade innerhalb des geschützten Ordners frei

Für /admin mit der Ausnahme /admin/api/ schrieb KeyHelp diesen Block:

<Directory "/home/users/kunde1/www/admin/">
    AuthType Basic
    AuthName "Adminbereich"
    AuthUserFile "/etc/apache2/keyhelp/htpasswd/.htpasswd_kunde1_01266630
    <RequireAny>
        Require expr %{REQUEST_URI} =~ m#/admin/api/.*?#
        Require expr %{THE_REQUEST} =~ m#/admin/api/.*?#
        Require valid-user
    </RequireAny>
</Directory>

Die Ausnahme selbst funktioniert:

/admin/ ohne Login: 401
/admin/api/ ohne Login: 200

Die beiden regulären Ausdrücke sind aber nicht am Anfang verankert. REQUEST_URI ist laut Apache-Dokumentation der Pfad ohne Query-String, THE_REQUEST dagegen die komplette Anfragezeile (etwa „GET /index.html HTTP/1.1“), zu der auch ein angehängter Query-String gehört. Wir haben deshalb eine Datei /admin/intern.html ohne Passwort abgerufen und den Ausnahmepfad nur als Parameter angehängt:

/admin/intern.html: 401
/admin/intern.html?x=/admin/api/: 200
/admin/intern.html#/admin/api/: 401
geheim

Mit dem angehängten ?x=/admin/api/ lieferte Apache den Inhalt der eigentlich geschützten Datei aus. Nach unserer Analyse greift hier die unverankerte THE_REQUEST-Regel. In KeyHelp 26.1.1 schützt der Verzeichnisschutz einen Ordner mit eingetragener Ausnahme also nicht zuverlässig. Unsere Empfehlung: Keine Ausnahmen für Ordner mit sensiblen Inhalten. Ohne Ausnahme schrieb KeyHelp im Test nur Require valid-user in den Block (siehe /staging oben). Legen Sie öffentlich nötige Pfade wie eine API stattdessen in einen eigenen Ordner außerhalb des geschützten Bereichs.

Verifizieren: Rufen Sie nach dem Setzen einer Ausnahme eine geschützte Datei mit dem Ausnahmepfad als Query-String auf, wie oben gezeigt. Erwartet ist 401. Bekommen Sie 200, ist der Ordner offen.

Typische Fehler

„Die geforderte Passwort-Komplexität wurde nicht erfüllt.“ Das Passwort muss laut Meldung mindestens 12 Zeichen lang sein und Klein- und Großbuchstaben sowie eine Ziffer enthalten. Die Meldung kam im Test auch bei leerem Passwort. Der Button „Generieren“ erzeugt einen passenden Vorschlag.

KeyHelp-Fehlermeldung Die geforderte Passwort-Komplexität wurde nicht erfüllt mit den Regeln mindestens 12 Zeichen, Kleinbuchstabe, Großbuchstabe und Ziffer über dem Formular Verzeichnisschutz
KeyHelp prüft die Passwortregeln erst beim Speichern

„Das von Ihnen eingegebene Passwort stimmt nicht mit der Passwortbestätigung überein.“ Beide Passwortfelder müssen gleich sein. Kopieren Sie einen generierten Vorschlag in beide Felder.

„Die Kombination aus Benutzernamen und Pfad existiert bereits.“ Für denselben Ordner gibt es den Benutzer schon. Ändern Sie dessen Passwort über das Stiftsymbol, statt einen neuen Eintrag anzulegen.

Ordner bleibt direkt nach dem Speichern offen. Der Hintergrunddienst braucht einen Moment. Warten Sie die Meldung „steht in wenigen Augenblicken zur Verfügung“ ab und prüfen Sie nach gut einer Minute erneut.

Pfad mit .. eingegeben. Den Pfad /../etc hat KeyHelp im Test als /www/./etc/ gespeichert und den Ordner etc innerhalb von /www angelegt. Außerhalb von /www entstand im Test kein Ordner, ein Tippfehler erzeugt aber einen neuen Ordner.

Häufige Fragen

Kann ich zusätzlich eine eigene .htaccess verwenden?

Ja. Die Kundenkonfiguration erlaubt mit AllowOverride AuthConfig eigene Regeln. Im Test führte eine .htaccess mit Require all denied im geschützten Ordner zu 403 statt 401.

Werden Fehlversuche gesperrt?

Im Test nicht. Wir haben sieben falsche Passwörter gesendet und nur weiter 401 erhalten, die Fail2Ban-Liste enthielt keine Regel für Apache-Anmeldungen:

401 401 401 401 401 401 401 
`- Jail list:	kh-database, kh-dovecot, kh-ftp, kh-phpmyadmin, kh-postfix, kh-postfix-sasl, kh-roundcube, kh-snappymail, sshd

Ein langes, generiertes Passwort ist deshalb wichtig.

Ist das Passwort ohne SSL geschützt?

AuthType Basic überträgt das Passwort laut Apache-Dokumentation unverschlüsselt vom Client zum Server, sofern die Verbindung nicht per SSL verschlüsselt ist. Unsere Testdomain hatte kein Zertifikat, HTTPS leitete per 302 auf HTTP um. Richten Sie vorher ein Zertifikat ein, siehe SSL-Zertifikate in KeyHelp.

Hält der Schutz Suchmaschinen fern?

Ein Crawler bekommt wie jeder Besucher ohne Passwort den Status 401 und damit keinen Inhalt zu sehen. Ob eine Suchmaschine die URL trotzdem listet, haben wir nicht geprüft.

Testumfang

Anlegen, mehrere Benutzer, Löschen und Ausnahmen haben wir in KeyHelp 26.1.1 im Kundenbereich durchgespielt und die Wirkung per curl auf dem Server selbst (gegen 127.0.0.1) und in der Apache-Konfiguration nachgeprüft. Auffällig: Eine Ausnahme ließ sich per Query-String auf eine andere Datei im Ordner ausweiten. Nicht geprüft wurden Zugriffe von außen über öffentliches DNS, HTTPS mit Zertifikat und das Verhalten echter Browser. Prüfen Sie bestehende Ausnahmen auf Ihrem Server.

Fazit

Der Verzeichnisschutz von KeyHelp ist für Staging-Seiten und interne Ordner schnell eingerichtet und technisch sauber umgesetzt: Die Regeln stehen in der Apache-Konfiguration, die Passwörter als bcrypt-Hash außerhalb des Webspace, und der Schutz greift für alle Domains des Kunden. Mehrere Zugänge sind eigene Einträge und lassen sich einzeln entziehen. Die Ausnahmefunktion sollten Sie dagegen meiden, solange sie per Query-String umgangen werden kann. Kombinieren Sie den Schutz immer mit einem SSL-Zertifikat und langen, generierten Passwörtern.

Weiterführende Anleitungen und Quellen

KeyHelpApacheVerzeichnisschutzBasic AuthSicherheitWebhosting