Einführung
Beim Einrichten eines Webservers gibt es häufig Abschnitte der Site, auf die Sie den Zugriff beschränken möchten. Webanwendungen stellen häufig ihre eigenen Authentifizierungs- und Autorisierungsmethoden bereit. Der Webserver selbst kann jedoch verwendet werden, um den Zugriff einzuschränken, wenn diese unzureichend oder nicht verfügbar sind.
In diesem Handbuch wird gezeigt, wie Sie Assets auf einem Apache-Webserver unter Ubuntu 14.04 mit einem Kennwort schützen.
Voraussetzungen
Zu Beginn benötigen Sie Zugriff auf eine Ubuntu 14.04-Serverumgebung. Sie benötigen einen Benutzer ohne Rootberechtigung mit den Berechtigungensudo
, um Verwaltungsaufgaben ausführen zu können. Befolgen Sie unsereUbuntu 14.04 initial server setup guide, um zu erfahren, wie Sie einen solchen Benutzer erstellen.
Installieren Sie das Apache Utilities-Paket
Um die Datei zu erstellen, in der die Kennwörter gespeichert werden, die für den Zugriff auf unsere eingeschränkten Inhalte erforderlich sind, verwenden wir ein Dienstprogramm namenshtpasswd
. Dies finden Sie im Paketapache2-utils
in den Ubuntu-Repositorys.
Aktualisieren Sie den lokalen Paketcache und installieren Sie das Paket, indem Sie diesen Befehl eingeben. Wir werden diese Gelegenheit nutzen, um auch den Apache2-Server zu greifen, falls er noch nicht auf dem Server installiert ist:
sudo apt-get update
sudo apt-get install apache2 apache2-utils
Erstellen Sie die Passwortdatei
Wir haben jetzt Zugriff auf den Befehlhtpasswd
. Hiermit können wir eine Kennwortdatei erstellen, mit der Apache Benutzer authentifizieren kann. Zu diesem Zweck erstellen wir eine versteckte Datei namens.htpasswd
in unserem Konfigurationsverzeichnis/etc/apache2
.
Wenn wir dieses Dienstprogramm zum ersten Mal verwenden, müssen wir die Option-c
hinzufügen, um die angegebene Datei zu erstellen. Wir geben am Ende des Befehls einen Benutzernamen (sammy
in diesem Beispiel) an, um einen neuen Eintrag in der Datei zu erstellen:
sudo htpasswd -c /etc/apache2/.htpasswd sammy
Sie werden aufgefordert, ein Kennwort für den Benutzer einzugeben und zu bestätigen.
Lassen Sie das Argument-c
für weitere Benutzer weg, die Sie hinzufügen möchten:
sudo htpasswd /etc/apache2/.htpasswd another_user
Wenn wir den Inhalt der Datei anzeigen, sehen wir den Benutzernamen und das verschlüsselte Passwort für jeden Datensatz:
cat /etc/apache2/.htpasswd
Outputsammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.
Konfigurieren Sie die Apache-Kennwortauthentifizierung
Nachdem wir eine Datei mit Benutzern und Kennwörtern in einem Format haben, das Apache lesen kann, müssen wir Apache so konfigurieren, dass diese Datei überprüft wird, bevor wir unseren geschützten Inhalt bereitstellen. Wir können dies auf zwei verschiedene Arten tun.
Die erste Möglichkeit besteht darin, die Apache-Konfiguration zu bearbeiten und der virtuellen Hostdatei unseren Kennwortschutz hinzuzufügen. Dies führt im Allgemeinen zu einer besseren Leistung, da keine verteilten Konfigurationsdateien gelesen werden müssen. Wenn Sie diese Option haben, wird diese Methode empfohlen.
Wenn Sie die virtuelle Hostdatei nicht ändern können (oder wenn Sie bereits.htaccess files for other purposes), you can restrict access using an
.htaccess`file verwenden. Apache verwendet.htaccess
Dateien, damit bestimmte Konfigurationselemente in einer Datei in einem Inhaltsverzeichnis festgelegt werden können. Der Nachteil ist, dass Apache diese Dateien bei jeder Anforderung des Verzeichnisses erneut lesen muss, was die Leistung beeinträchtigen kann.
Wählen Sie unten die Option, die Ihren Anforderungen am besten entspricht.
Konfigurieren der Zugriffssteuerung in der Definition des virtuellen Hosts
Öffnen Sie zunächst die virtuelle Hostdatei, der Sie eine Einschränkung hinzufügen möchten. In unserem Beispiel verwenden wir die Datei000-default.conf
, die den virtuellen Standardhost enthält, der über das Apache-Paket von Ubuntu installiert wurde:
sudo nano /etc/apache2/sites-enabled/000-default.conf
Wenn die Kommentare entfernt sind, sollte die Datei ungefähr so aussehen:
/etc/apache2/sites-enabled/000-default.conf
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Die Authentifizierung erfolgt verzeichnisbezogen. Um die Authentifizierung einzurichten, müssen Sie das Verzeichnis, das Sie einschränken möchten, mit einem<Directory ___>
-Block ausrichten. In unserem Beispiel wird das gesamte Dokumentstammverzeichnis eingeschränkt. Sie können diese Auflistung jedoch so ändern, dass sie nur auf ein bestimmtes Verzeichnis im Webspace abzielt:
/etc/apache2/sites-enabled/000-default.conf
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Geben Sie in diesem Verzeichnisblock an, dass die Authentifizierung vonBasic
eingerichtet werden soll. Wählen Sie fürAuthName
einen Bereichsnamen aus, der dem Benutzer angezeigt wird, wenn er zur Eingabe von Anmeldeinformationen aufgefordert wird. Verwenden Sie die DirektiveAuthUserFile
, um Apache auf die von uns erstellte Kennwortdatei zu verweisen. Schließlich benötigen wirvalid-user
, um auf diese Ressource zuzugreifen. Dies bedeutet, dass jeder, der seine Identität mit einem Passwort überprüfen kann, zugelassen wird in:
/etc/apache2/sites-enabled/000-default.conf
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
Speichern und schließen Sie die Datei, wenn Sie fertig sind. Starten Sie Apache neu, um Ihre Kennwortrichtlinie zu implementieren:
sudo service apache2 restart
Das von Ihnen angegebene Verzeichnis sollte jetzt kennwortgeschützt sein.
Konfigurieren der Zugriffssteuerung mit .htaccess-Dateien
Wenn Sie den Kennwortschutz stattdessen mit.htaccess
-Dateien einrichten möchten, sollten Sie zunächst die Haupt-Apache-Konfigurationsdatei bearbeiten, um.htaccess
-Dateien zuzulassen:
sudo nano /etc/apache2/apache2.conf
Suchen Sie den Block<Directory>
für das Verzeichnis/var/www
, in dem sich das Dokumentstammverzeichnis befindet. Aktivieren Sie die Verarbeitung von.htaccess
, indem Sie die AnweisungAllowOverride
in diesem Block von "Keine" in "Alle" ändern:
/etc/apache2/apache2.conf
. . .
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
. . .
Speichern und schließen Sie die Datei, wenn Sie fertig sind.
Als nächstes müssen wir eine.htaccess
-Datei zu dem Verzeichnis hinzufügen, das wir einschränken möchten. In unserer Demonstration beschränken wir den gesamten Dokumentstamm (die gesamte Website), der auf/var/www/html
basiert. Sie können diese Datei jedoch in einem beliebigen Verzeichnis ablegen, auf das Sie den Zugriff beschränken möchten:
sudo nano /var/www/html/.htaccess
Geben Sie in dieser Datei an, dass die Authentifizierung vonBasic
eingerichtet werden soll. Wählen Sie fürAuthName
einen Bereichsnamen aus, der dem Benutzer angezeigt wird, wenn er zur Eingabe von Anmeldeinformationen aufgefordert wird. Verwenden Sie die DirektiveAuthUserFile
, um Apache auf die von uns erstellte Kennwortdatei zu verweisen. Schließlich benötigen wirvalid-user
, um auf diese Ressource zuzugreifen. Dies bedeutet, dass jeder, der seine Identität mit einem Passwort überprüfen kann, zugelassen wird in:
/var/www/html/.htaccess
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 im oder unter dem Verzeichnis mit der Datei.htaccess
mit einem Kennwort zu schützen:
sudo service apache2 restart
Bestätigen Sie die Kennwortauthentifizierung
Versuchen Sie, in einem Webbrowser auf Ihre eingeschränkten Inhalte zuzugreifen, um zu bestätigen, dass Ihre Inhalte geschützt sind. Es sollte eine Eingabeaufforderung für den Benutzernamen und das Kennwort angezeigt werden, die folgendermaßen aussieht:
Wenn Sie die richtigen Anmeldeinformationen eingeben, können Sie auf den Inhalt zugreifen. Wenn Sie die falschen Anmeldeinformationen eingeben oder auf "Abbrechen" klicken, wird die Fehlerseite "Nicht autorisiert" angezeigt:
Fazit
Sie sollten jetzt über alles verfügen, was Sie zum Einrichten der Basisauthentifizierung für Ihre Site benötigen. Beachten Sie, dass der Kennwortschutz mit der SSL-Verschlüsselung kombiniert werden sollte, damit Ihre Anmeldeinformationen nicht im Klartext an den Server gesendet werden. Befolgen Siethis guide, um zu erfahren, wie Sie ein selbstsigniertes SSL-Zertifikat für Apache erstellen. Befolgen Siethis guide, um zu erfahren, wie Sie ein kommerzielles Zertifikat installieren.