Für Sie als Web-Administrator könnte es eventuell sinnvoll sein, einige Teile einer Website vorübergehend oder dauerhaft für Besucher einzuschränken. Obwohl Webanwendungen möglicherweise ihre eigenen Authentifizierungs- und Autorisierungsmethoden anbieten, können Sie sich auch auf den Webserver selbst stützen, um den Zugriff einzuschränken, wenn diese unzureichend oder nicht verfügbar sind.
Dieses Tutorial bietet Ihnen eine Vorgehensweise, um Assets auf einem Apache-Webserver, auf dem Ubuntu 18.04 ausgeführt wird, mit einem Passwort zu schützen, um Ihren Server mit zusätzlicher Sicherheit zu versehen.
Um dieses Tutorial fertigzustellen, benötigen Sie Zugriff auf einen Ubuntu 18.04 Server.
Zusätzlich benötigen Sie die folgende Einrichtung, bevor Sie beginnen können:
Einen sudo
-Benutzer auf Ihrem Server: Sie können einen Benutzer mit sudo
-Berechtigungen erstellen, indem Sie der Anleitung für die Ersteinrichtung eines Servers unter Ubuntu 18.04 folgen.
Einen Apache2-Webserver: Sollten Sie noch keinen eingerichtet haben, können Sie eine Hilfestellung in dem Tutorial So installieren Sie den Apache-Webserver unter Ubuntu 18.04 finden.
Eine mit SSL gesicherte Website: Wie Sie diese einrichten, hängt davon ab, ob Sie einen Domänenamen für Ihre Website haben.
Wenn alle diese Voraussetzungen erfüllt sind, melden Sie sich als sudo
-Benutzer an Ihrem Server an und fahren weiter unten fort.
Beginnen wir, indem wir unseren Server aktualisieren und ein Paket installieren, das wir benötigen. Um diesem Tutorial zu folgen, verwenden wir ein Dienstprogramm namens htpasswd
, das Teil des Pakets apache2-utils
ist, um die Datei zu erstellen und den Benutzernamen und die Passwörter zu verwalten, die für den Zugriff auf eingeschränkte Inhalte benötigt werden.
- sudo apt update
- sudo apt install apache2-utils
Wenn dies installiert ist, haben wir Zugriff auf den Befehl htpasswd
.
Mit dem Befehl htpasswd
können wir eine Passwortdatei erstellen, die Apache zur Authentifizierung von Benutzern verwenden kann. Wir werden zu diesem Zweck eine versteckte Datei namens .htpasswd
in unserem Konfigurationsverzeichnis /etc/apache2
erstellen.
Wenn wir dieses Dienstprogramm zum ersten Mal verwenden, müssen wir die Option -c
hinzufügen, um die spezifizierte passwdfile zu erstellen. Wir geben am Ende des Befehls einen Benutzernamen (in diesem Beispiel sammy
) an, um einen neuen Eintrag in der Datei zu erstellen:
- sudo htpasswd -c /etc/apache2/.htpasswd sammy
Sie werden aufgefordert, ein Passwort für den Benutzer anzugeben und zu bestätigen.
Geben Sie für zusätzliche Benutzer, die Sie hinzufügen möchten, nicht das Argument -c
ein, um die Datei nicht zu überschreiben:
- sudo htpasswd /etc/apache2/.htpasswd another_user
Wenn wir den Inhalt der Datei ansehen, können wir für jeden Datensatz den Benutzernamen und das verschlüsselte Passwort sehen:
- cat /etc/apache2/.htpasswd
Outputsammy:$apr1$.0CAabqX$rb8lueIORA/p8UzGPYtGs/
another_user:$apr1$fqH7UG8a$SrUxurp/Atfq6j7GL/VEC1
Unsere Benutzer und Passwörter liegen jetzt in einem Format vor, das Apache lesen kann.
In diesem Schritt müssen wir Apache so konfigurieren, dass diese Datei überprüft wird, bevor unser geschützter Inhalt bereitgestellt wird. Wir können dies auf eine von zwei Arten tun: entweder direkt in der virtuellen Host-Datei einer Website oder indem wir .htaccess
-Dateien in die Verzeichnisse übertragen, die eine Einschränkung benötigen. In der Regel empfiehlt sich die Verwendung der virtuellen Host-Datei. Wenn Sie jedoch Benutzern ohne Rootberechtigung die Verwaltung ihrer eigenen Zugriffsbeschränkungen ermöglichen müssen, die Einschränkungen in die Versionskontrolle der Website integrieren müssen oder eine Webanwendung haben, die .htaccess
-Dateien bereits für andere Zwecke verwendet, sollten Sie die zweite Option ausprobieren.
Wählen Sie die Option, die am besten für Ihre Bedürfnisse geeignet ist.
Die erste Option besteht darin, die Apache-Konfiguration zu bearbeiten und den Passwortschutz zu der virtuellen Host-Datei hinzuzufügen. Dadurch wird im Allgemeinen eine bessere Leistung erzielt, da die Kosten für das Lesen von verteilten Konfigurationsdateien vermieden werden. Diese Option erfordert Zugriff auf die Konfiguration, der nicht immer verfügbar ist. Wenn Sie jedoch Zugriff haben, wird dies empfohlen.
Beginnen Sie, indem Sie die virtuelle Host-Datei öffnen, der Sie eine Einschränkung hinzufügen möchten. Wir werden für unser Beispiel die Datei default-ssl.conf
verwenden, die den virtuellen Standard-Host enthält, der über das Apache-Paket von Ubuntu installiert wurde. Öffnen Sie die Datei mit einem Befehlszeilen-Texteditor wie nano:
- sudo nano /etc/apache2/sites-enabled/default-ssl.conf
Ohne die Kommentare sollte die Datei in etwa wie folgt aussehen:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Die Authentifizierung wird pro Verzeichnis durchgeführt. Um die Authentifizierung einzurichten, müssen Sie das Verzeichnis, das Sie einschränken möchten, mit einem <Directory ___>
-Block als Ziel angeben. In unserem Beispiel schränken wir den gesamte Dokumentenstamm ein. Sie können diese Auflistung jedoch so ändern, dass sie nur auf ein bestimmtes Verzeichnis innerhalb des Webspace abzielt:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory "/var/www/html">
</Directory>
</VirtualHost>
Innerhalb dieses Verzeichnisblocks legen wir fest, dass die Basic
-Authentifizierung eingerichtet wird. Wählen Sie für den AuthName
einen Bereichsnamen, der dem Benutzer bei der Aufforderung zur Eingabe der Anmeldedaten angezeigt wird. Verwenden Sie die Anweisung AuthUserFile
, um Apache auf die von uns erstellte Passwort-Datei zu verweisen. Machen Sie es zum Schluss zur Bedingung, dass nur ein valid-user
auf diese Ressource zugreifen kann, was bedeutet, dass jede Person, die ihre Identität mit einem Passwort verifizieren kann, Zugriff erhält.
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory "/var/www/html">
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
</VirtualHost>
Wenn Sie fertig sind, speichern und schließen Sie die Datei. Wenn Sie nano verwenden, drücken Sie hierfür STRG+X
, gefolgt von Y
und dann der EINGABETASTE
.
Bevor Sie den Webserver neu starten, können Sie die Konfiguration mit dem folgenden Befehl überprüfen:
- sudo apache2ctl configtest
Wenn alles in Ordnung ist und Sie als Ausgabe Syntax OK
erhalten, können Sie den Server neu starten, um Ihre Passwort-Richtlinie zu implementieren. Da systemctl
nicht das Ergebnis aller Dienstverwaltungsbefehle anzeigt, verwenden wir status
, um sicherzustellen, dass der Server ausgeführt wird:
- sudo systemctl restart apache2
- sudo systemctl status apache2
Nun sollte das von Ihnen angegebene Verzeichnis passwortgeschützt sein.
Apache kann .htaccess
-Dateien verwenden, um die Einstellung bestimmter Konfigurationselemente innerhalb eines Inhaltsverzeichnisses zu ermöglichen. Da Apache diese Dateien bei jeder das Verzeichnis betreffenden Anfrage erneut lesen muss, was sich negativ auf die Leistung auswirken kann, wird Option 1 bevorzugt. Wenn Sie jedoch bereits die Datei .htaccess
verwenden oder Benutzern ohne Rootberechtigung die Verwaltung von Einschränkungen ermöglichen müssen, sind .htaccess
-Dateien sinnvoll.
Um den Passwortschutz unter Verwendung von .htaccess
-Dateien zu aktivieren, öffnen Sie die Apache-Konfigurationsdatei mit einem Befehlszeilen-Texteditor wie nano:
- sudo nano /etc/apache2/apache2.conf
Suchen Sie den Block <Directory>
für das Verzeichnis /var/www
, in dem sich der Dokumentenstamm befindet. Aktivieren Sie die Verarbeitung von .htaccess
, indem Sie die Anweisung AllowOverride
innerhalb dieses Blocks von None
zu All
ändern:
. . .
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
. . .
Wenn Sie fertig sind, speichern und schließen Sie die Datei. Wenn Sie nano verwenden, drücken Sie hierfür STRG+X
, gefolgt von Y
und dann der EINGABETASTE
.
Als Nächstes müssen wir dem Verzeichnis, das wir einschränken möchten, eine .htaccess
-Datei hinzufügen. In unserer Demonstration beschränken wir den gesamten Dokumentenstamm (die gesamte Website), der auf /var/www/html
basiert. Sie können diese Datei jedoch in jedem Verzeichnis ablegen, in dem Sie den Zugriff einschränken möchten:
- sudo nano /var/www/html/.htaccess
Innerhalb dieser Datei geben wir an, dass wir die Basic
-Authentifizierung einrichten möchten. Wählen Sie für den AuthName
einen Bereichsnamen, der dem Benutzer bei der Aufforderung zur Eingabe der Anmeldedaten angezeigt wird. Verwenden Sie die Anweisung AuthUserFile
, um Apache auf die von uns erstellte Passwort-Datei zu verweisen. Abschließend erfordern wir den Zugriff auf diese Ressource durch einen valid-user
, d. h. jede Person, die ihre Identität mit einem Passwort verifizieren kann, erhält Zugriff:
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
Speichern und schließen Sie die Datei. Starten Sie den Webserver neu, um alle Inhalte in oder unterhalb des Verzeichnisses mit der .htaccess
-Datei mit einem Passwort zu schützen, und verwenden Sie systemctl status
, um den Erfolg des Neustarts zu überprüfen:
- sudo systemctl restart apache2
- sudo systemctl status apache2
Das von Ihnen angegebene Verzeichnis sollte nun passwortgeschützt sein.
Um zu bestätigen, dass Ihr Inhalt geschützt ist, versuchen Sie, in einem Webbrowser auf Ihren eingeschränkten Inhalt zuzugreifen. Sie sollten eine Aufforderung zur Eingabe von Benutzername und Passwort erhalten, die wie folgt aussieht:
Wenn Sie die richtigen Anmeldedaten eingeben, können Sie auf den Inhalt zugreifen. Wenn Sie die falschen Anmeldedaten eingeben oder auf „Cancel“ klicken, wird die Fehlerseite „Unauthorized“ angezeigt:
Herzlichen Glückwunsch! Wenn Sie diesem Tutorial gefolgt sind, haben Sie nun die standardmäßige Authentifizierung für Ihre Website eingerichtet.
Sie können mit der Apache-Konfiguration und .htaccess
noch wesentlich mehr tun. Um mehr über die Flexibilität und Leistungsfähigkeit der Apache-Konfiguration zu erfahren, probieren Sie eines dieser Tutorials aus:
Für ein besseres Verständnis der Hauptkonfigurationsdatei lesen Sie den Abschnitt Mit wichtigen Apache-Dateien und -Verzeichnissen vertraut werden in unserem Apache-Installationsleitfaden.
Erfahren Sie mehr über die virtuellen Host-Dateien in So richten Sie Apache Virtual Hosts unter Ubuntu 16.04 ein
Erfahren Sie mehr über das Neuschreiben von URLs, das Anpassen von Fehlerseiten wie die obige Meldung „Unauthorized“ oder das Einfügen gemeinsamer Elemente auf allen Ihren Seiten mit Server Side Includes in unserem Leitfaden So verwenden Sie die Datei .htaccess.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!