- Introduction
- Voraussetzungen
- Installieren Sie das Apache Utilities-Paket
- Passwortdatei erstellen
- Apache-Passwortauthentifizierung konfigurieren
- Konfiguration der Zugriffskontrolle innerhalb der Definition des virtuellen Hosts
- Zugangskontrolle mit .htaccess-Dateien konfigurieren
- Bestätigen Sie die Passwortauthentifizierung
- Schlussfolgerung
Introduction
Beim Einrichten eines Webservers gibt es oft Bereiche, auf die man den Zugriff beschränken möchte. Webanwendungen bieten oft ihre eigenen Authentifizierungs- und Autorisierungsmethoden, aber der Webserver selbst kann verwendet werden, um den Zugriff einzuschränken, wenn diese unzureichend oder nicht verfügbar sind.
In diesem Leitfaden wird gezeigt, wie man Assets auf einem Apache-Webserver, der unter Ubuntu 14.04 läuft, mit einem Passwort schützen kann.
Voraussetzungen
Um loszulegen, benötigen Sie Zugang zu einer Ubuntu 14.04-Serverumgebung. Sie benötigen einen Nicht-Root-Benutzer mit sudo
-Rechten, um administrative Aufgaben durchführen zu können. Um zu erfahren, wie Sie einen solchen Benutzer erstellen, folgen Sie unserer Anleitung zur Einrichtung eines Ubuntu 14.04-Servers.
Installieren Sie das Apache Utilities-Paket
Um die Datei zu erstellen, in der die Passwörter gespeichert werden, die für den Zugriff auf unsere eingeschränkten Inhalte benötigt werden, verwenden wir ein Dienstprogramm namens htpasswd
. Es befindet sich im Paket apache2-utils
in den Ubuntu-Repositories.
Aktualisieren Sie den lokalen Paket-Cache und installieren Sie das Paket, indem Sie diesen Befehl eingeben. Bei dieser Gelegenheit holen wir uns auch den Apache2-Server, falls er noch nicht auf dem Server installiert ist:
- sudo apt-get update
- sudo apt-get install apache2 apache2-utils
Passwortdatei erstellen
Wir haben nun Zugriff auf den Befehl htpasswd
. Damit können wir eine Passwortdatei erstellen, die der Apache zur Authentifizierung der Benutzer verwenden kann. Wir werden zu diesem Zweck eine versteckte Datei namens .htpasswd
in unserem /etc/apache2
-Konfigurationsverzeichnis erstellen.
Wenn wir dieses Dienstprogramm zum ersten Mal verwenden, müssen wir die Option -c
hinzufügen, um die angegebene Datei zu erstellen. Wir geben einen Benutzernamen (sammy
in diesem Beispiel) am Ende des Befehls 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.
Lassen Sie das Argument -c
für alle weiteren Benutzer, die Sie hinzufügen möchten, weg:
- sudo htpasswd /etc/apache2/.htpasswd another_user
Wenn wir uns den Inhalt der Datei ansehen, können wir den Benutzernamen und das verschlüsselte Passwort für jeden Datensatz sehen:
- cat /etc/apache2/.htpasswd
Outputsammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.
Apache-Passwortauthentifizierung konfigurieren
Nun, da wir eine Datei mit unseren Benutzern und Passwörtern in einem Format haben, das der Apache lesen kann, müssen wir den Apache so konfigurieren, dass er diese Datei überprüft, bevor er unsere geschützten Inhalte bereitstellt. Dazu gibt es zwei Möglichkeiten.
Die erste Möglichkeit besteht darin, die Apache-Konfiguration zu bearbeiten und den Passwortschutz in die Datei des virtuellen Hosts aufzunehmen. Dies führt in der Regel zu einer besseren Leistung, da der Aufwand für das Lesen verteilter Konfigurationsdateien entfällt. Wenn Sie diese Möglichkeit haben, wird diese Methode empfohlen.
Wenn Sie nicht in der Lage sind, die virtuelle Hostdatei zu ändern (oder wenn Sie bereits .htaccess files for other purposes), you can restrict access using an
.htaccessfile. Apache uses
.htaccess`-Dateien verwenden, um die Einstellung bestimmter Konfigurationselemente innerhalb einer Datei in einem Inhaltsverzeichnis zu ermöglichen. Der Nachteil ist, dass der Apache diese Dateien bei jeder Anfrage, die das Verzeichnis betrifft, neu lesen muss, was sich auf die Leistung auswirken kann.
Wählen Sie im Folgenden die Option, die Ihren Bedürfnissen am besten entspricht.
Konfiguration der Zugriffskontrolle innerhalb der Definition des virtuellen Hosts
Beginnen Sie damit, die Datei des virtuellen Hosts zu öffnen, der Sie eine Einschränkung hinzufügen möchten. Für unser Beispiel verwenden wir die Datei 000-default.conf
, die den standardmäßigen virtuellen Host enthält, der über das Apache-Paket von Ubuntu installiert wurde:
- sudo nano /etc/apache2/sites-enabled/000-default.conf
Innerhalb sollte die Datei, ohne die Kommentare, ähnlich 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 erfolgt pro Verzeichnis. Um die Authentifizierung einzurichten, müssen Sie das Verzeichnis, das Sie einschränken möchten, mit einem <Directory ___>
-Block markieren. In unserem Beispiel beschränken wir das gesamte Stammverzeichnis des Dokuments, aber Sie können diese Auflistung ändern, um nur ein bestimmtes Verzeichnis innerhalb des Webspaces festzulegen:
<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>
In diesem Verzeichnisblock geben Sie an, dass wir eine Basic
-Authentifizierung einrichten möchten. Wählen Sie für AuthName
einen Realm-Namen, der dem Benutzer angezeigt wird, wenn er zur Eingabe von Anmeldeinformationen aufgefordert wird. Verwenden Sie die Direktive AuthUserFile
, um den Apache auf die von uns erstellte Passwortdatei zu verweisen. Schließlich benötigen wir ein valid-user
, um auf diese Ressource zuzugreifen, was bedeutet, dass jeder, der seine Identität mit einem Passwort verifizieren kann, Zugang 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>
Speichern und schließen Sie die Datei, wenn Sie fertig sind. Starten Sie Apache neu, um Ihre Passwortrichtlinie zu implementieren:
- sudo service apache2 restart
Das von Ihnen angegebene Verzeichnis sollte nun passwortgeschützt sein.
Zugangskontrolle mit .htaccess-Dateien konfigurieren
Wenn Sie stattdessen einen Passwortschutz mit .htaccess
-Dateien einrichten möchten, sollten Sie zunächst die Hauptkonfigurationsdatei von Apache bearbeiten, um .htaccess
-Dateien zuzulassen:
- sudo nano /etc/apache2/apache2.conf
Suchen Sie den <Directory>
-Block für das /var/www
-Verzeichnis, das das Stammverzeichnis des Dokuments enthält. Schalten Sie die .htaccess
-Verarbeitung ein, indem Sie die AllowOverride
-Direktive in diesem Block von „None“ auf „All“ ändern:
. . .<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted</Directory>. . .
Speichern Sie die Datei und schließen Sie sie, wenn Sie fertig sind.
Als Nächstes müssen wir dem Verzeichnis, das wir einschränken wollen, eine .htaccess
-Datei hinzufügen. In unserer Demonstration beschränken wir den gesamten Dokumentstamm (die gesamte Website), der sich unter /var/www/html
befindet, aber Sie können diese Datei in jedem Verzeichnis platzieren, auf das Sie den Zugriff beschränken möchten:
- sudo nano /var/www/html/.htaccess
In dieser Datei geben Sie an, dass wir die Basic
-Authentifizierung einrichten möchten. Wählen Sie für AuthName
einen Realm-Namen, der dem Benutzer angezeigt wird, wenn er zur Eingabe von Anmeldeinformationen aufgefordert wird. Verwenden Sie die Direktive AuthUserFile
, um den Apache auf die von uns erstellte Passwortdatei zu verweisen. Schließlich benötigen wir ein valid-user
, um auf diese Ressource zuzugreifen, was bedeutet, dass jeder, der seine Identität mit einem Passwort verifizieren kann, Zugang erhält:
AuthType BasicAuthName "Restricted Content"AuthUserFile /etc/apache2/.htpasswdRequire valid-user
Speichern und schließen Sie die Datei. Starten Sie den Webserver neu, um alle Inhalte in oder unterhalb des Verzeichnisses mit der Datei .htaccess
mit einem Passwort zu schützen:
- sudo service apache2 restart
Bestätigen Sie die Passwortauthentifizierung
Um zu bestätigen, dass Ihre Inhalte geschützt sind, versuchen Sie, in einem Webbrowser auf Ihre eingeschränkten Inhalte zuzugreifen. Es sollte eine Eingabeaufforderung für den Benutzernamen und das Kennwort angezeigt werden, 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 „Abbrechen“ klicken, wird die Fehlerseite „Nicht autorisiert“ angezeigt:
Schlussfolgerung
Sie sollten nun alles haben, was Sie brauchen, um eine grundlegende Authentifizierung für Ihre Website einzurichten. Denken Sie daran, dass der Passwortschutz mit einer SSL-Verschlüsselung kombiniert werden sollte, damit Ihre Anmeldedaten nicht im Klartext an den Server gesendet werden. In dieser Anleitung erfahren Sie, wie Sie ein selbstsigniertes SSL-Zertifikat für die Verwendung mit Apache erstellen. Um zu erfahren, wie Sie ein kommerzielles Zertifikat installieren, folgen Sie dieser Anleitung.