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
Output
sammy:$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:

/etc/apache2/sites-enabled/000-default.conf
<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:

/etc/apache2/sites-enabled/000-default.conf
<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:

/etc/apache2/sites-enabled/000-default.conf
<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:

/etc/apache2/apache2.conf
. . .<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:

/var/www/html/.htaccess
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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.