Basic-Authentifizierung ist der schnellste Weg, eine Staging-Seite, einen Admin-Ordner oder ein privates Tool hinter einem Login zu verstecken. Diese Anleitung behandelt Apache und Nginx auf Ihrem VPS Linux Infrawire mit einer mit htpasswd erzeugten Passwortdatei.
📋 Voraussetzungen
- Ein Linux-VPS (Ubuntu 24.04 / Debian 12 oder AlmaLinux 9 / Rocky 9) mit SSH-Root-Zugang. IP und Root-Passwort stehen in Ihrem Kundenbereich.
- Apache oder Nginx liefert bereits eine Website aus.
- Ein gültiges HTTPS-Zertifikat für
example.com. Basic-Authentifizierung sendet das Passwort Base64-kodiert, was keine Verschlüsselung ist: Nutzen Sie sie niemals über reines HTTP.
📦 Das Werkzeug htpasswd installieren
Der Befehl htpasswd stammt aus einem kleinen Paket, auch wenn Sie Nginx verwenden:
Bash# Debian / Ubuntu sudo apt install -y apache2-utils # AlmaLinux / Rocky sudo dnf install -y httpd-tools
🔐 Die Passwortdatei erstellen
Legen Sie die Datei außerhalb jedes Web-Roots ab, damit niemand sie herunterladen kann:
Bashsudo mkdir -p /etc/htpasswd sudo htpasswd -c -B /etc/htpasswd/example.com USER
-B nutzt bcrypt. -c erstellt die Datei: Verwenden Sie es nur für den ersten Benutzer, denn bei einer bestehenden Datei überschreibt es alles (destruktiv). Weitere Benutzer fügen Sie ohne -c hinzu:
Bashsudo htpasswd -B /etc/htpasswd/example.com USER2
Der Webserver muss die Datei lesen können:
Bash# Debian / Ubuntu (Apache und Nginx laufen als www-data) sudo chown root:www-data /etc/htpasswd/example.com # AlmaLinux / Rocky: Gruppe apache (Apache) oder nginx (Nginx) sudo chmod 640 /etc/htpasswd/example.com
Einen Benutzer entfernen: sudo htpasswd -D /etc/htpasswd/example.com USER2.
🪶 Option A: Apache mit .htaccess
Legen Sie eine .htaccess in den zu schützenden Ordner, zum Beispiel /var/www/example.com/private/.htaccess:
ApacheAuthType Basic AuthName "Geschützter Bereich" AuthUserFile /etc/htpasswd/example.com Require valid-user
.htaccess-Dateien werden ignoriert, solange der Virtual Host sie nicht erlaubt. In Ihrem <Directory>-Block (Datei in /etc/apache2/sites-available/ unter Debian/Ubuntu, /etc/httpd/conf.d/ unter AlmaLinux/Rocky):
Apache<Directory /var/www/example.com> AllowOverride AuthConfig </Directory>
Dann testen und neu laden:
Bashsudo apachectl configtest sudo systemctl reload apache2 # Debian / Ubuntu sudo systemctl reload httpd # AlmaLinux / Rocky
Wenn Sie .htaccess vermeiden möchten, setzen Sie die vier Authentifizierungszeilen direkt in einen <Directory>- oder <Location>-Block: schneller und sicherer.
🚀 Option B: Nginx mit auth_basic
Nginx liest keine .htaccess. Fügen Sie die Direktiven im Server-Block hinzu:
Nginx1server { 2 listen 443 ssl; 3 server_name example.com; 4 # ssl_certificate-Zeilen hier 5 6 location /private/ { 7 auth_basic "Geschützter Bereich"; 8 auth_basic_user_file /etc/htpasswd/example.com; 9 } 10}
Für die ganze Website setzen Sie die beiden Zeilen stattdessen in den server-Block. Um in einer geschützten Seite einen Pfad öffentlich zu lassen (zum Beispiel einen Webhook), fügen Sie in dessen eigenem location auth_basic off; ein. Dann:
Bashsudo nginx -t && sudo systemctl reload nginx
✅ Testen
Ohne Zugangsdaten muss ein 401 kommen, mit Zugangsdaten ein 200:
Bashcurl -I https://example.com/private/ curl -I -u USER https://example.com/private/
Erwartete erste Antwort:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Geschützter Bereich"
curl fragt nach dem Passwort, wenn Sie nur -u USER angeben; so landet es nicht in der Shell-History.
🛠️ Fehlerbehebung
Unter Apache erscheint keine Abfrage. AllowOverride steht noch auf None, oder die .htaccess liegt im falschen Ordner. Prüfen Sie den <Directory>-Block erneut und laden Sie neu.
Immer 401 trotz richtigem Passwort. Der Webserver kann die Datei nicht lesen (prüfen Sie chown und chmod), oder der Pfad in AuthUserFile bzw. auth_basic_user_file ist falsch. Das Fehlerlog verrät es: /var/log/apache2/error.log, /var/log/httpd/error_log oder /var/log/nginx/error.log.
500 Internal Server Error nach dem Anlegen der .htaccess. Eine Direktive ist ungültig oder ein Modul fehlt. Führen Sie sudo apachectl configtest aus und lesen Sie die Meldung.
Passwortabfrage über HTTP. Leiten Sie zuerst HTTP auf HTTPS um, damit Zugangsdaten nie im Klartext übertragen werden.
🎉 Ihr privater Ordner verlangt nun einen Login, mit gehashten Passwörtern außer Reichweite und ausschließlich über HTTPS.