Einrichten der Kennwortauthentifizierung mit Apache unter Ubuntu 16.04

Einführung

Wenn Sie eine Website betreiben, gibt es häufig Teile der Website, die Sie für Besucher einschränken möchten. Webanwendungen stellen möglicherweise ihre eigenen Authentifizierungs- und Autorisierungsmethoden zur Verfügung. Der Webserver selbst kann jedoch auch 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 16.04 mit einem Kennwort schützen.

Voraussetzungen

Um dieses Tutorial abzuschließen, benötigen Sie Zugriff auf einen Ubuntu 16.04-Server.

Darüber hinaus benötigen Sie Folgendes, bevor Sie beginnen können:

  • * Ein "+ sudo " - Benutzer auf Ihrem Server *: Sie können einen Benutzer mit " sudo +" - Berechtigungen erstellen, indem Sie der https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu- folgen. 16-04 [Installationsanleitung für Ubuntu 16.04 Server].

  • * Ein Apache2-Webserver *: Wenn Sie noch keinen eingerichtet haben, lesen Sie den Abschnitt Apache im ausführlichen Artikel unter https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache -mysql-php-lampen-stapel-auf-ubuntu-16-04 [So installieren Sie den Linux-, Apache-, MySQL-, PHP- (LAMP-) Stapel unter Ubuntu 16.04
    ], kann dich führen.

  • * Eine mit SSL gesicherte Site *: Wie Sie dies einrichten, hängt davon ab, ob Sie einen Domainnamen für Ihre Site haben.

  • * Wenn Sie einen Domain-Namen haben …​ * Der einfachste Weg, Ihre Site zu sichern, ist Let’s Encrypt, das kostenlose, vertrauenswürdige Zertifikate bereitstellt. Folgen Sie der Let’s Encrypt guide for Apache, um dies einzurichten .

  • * Wenn Sie keine Domain haben …​ * und diese Konfiguration nur zum Testen oder für den persönlichen Gebrauch verwenden, können Sie stattdessen ein selbstsigniertes Zertifikat verwenden. Dies bietet die gleiche Art der Verschlüsselung, jedoch ohne Domänenüberprüfung. Folgen Sie dem self-signed SSL guide for Apache einrichten.

Wenn all dies vorhanden ist, melden Sie sich bei Ihrem Server als "+ sudo +" - Benutzer an und fahren Sie unten fort.

Schritt 1 - Installieren des Apache Utilities-Pakets

Wir werden ein Hilfsprogramm namens "+ htpasswd " verwenden, das Teil des Pakets " apache2-utils +" ist, um die Datei zu erstellen und den Benutzernamen und die Kennwörter zu verwalten, die für den Zugriff auf eingeschränkten Inhalt erforderlich sind.

sudo apt-get update
sudo apt-get install apache2-utils

Schritt 2 - Erstellen der Passwortdatei

Wir haben jetzt Zugriff auf den Befehl "+ htpasswd ". Hiermit können wir eine Kennwortdatei erstellen, mit der Apache Benutzer authentifizieren kann. Zu diesem Zweck erstellen wir eine versteckte Datei mit dem Namen " .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 einen Benutzernamen (in diesem Beispiel " sammy +") am Ende des Befehls an, um einen neuen Eintrag in der Datei zu erstellen:

sudo htpasswd -c /etc/apache2/.htpasswd

Sie werden aufgefordert, ein Kennwort für den Benutzer einzugeben und zu bestätigen.

Lassen Sie das Argument "+ -c +" für alle weiteren Benutzer weg, die Sie hinzufügen möchten:

sudo htpasswd /etc/apache2/.htpasswd

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$.0CAabqX$rb8lueIORA/p8UzGPYtGs/
another_user:$apr1$fqH7UG8a$SrUxurp/Atfq6j7GL/VEC1

Schritt 3 - Konfigurieren der 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. Dies kann auf zwei Arten erfolgen: entweder direkt in der virtuellen Hostdatei einer Site oder durch Platzieren von .htaccess-Dateien in den Verzeichnissen, für die Einschränkungen erforderlich sind. Im Allgemeinen ist es am besten, die virtuelle Hostdatei zu verwenden. Wenn Sie jedoch Nicht-Root-Benutzern erlauben müssen, ihre eigenen Zugriffsbeschränkungen zu verwalten, überprüfen Sie die Einschränkungen in der Versionskontrolle neben der Website oder verwenden Webanwendungen .htaccess-Dateien bereits für andere Zwecke Überprüfen Sie die zweite Option.

Wählen Sie die Option, die Ihren Anforderungen am besten entspricht.

Option 1: Konfigurieren der Zugriffssteuerung innerhalb der virtuellen Hostdefinition (bevorzugt)

Die erste Möglichkeit besteht darin, die Apache-Konfiguration zu bearbeiten und der virtuellen Hostdatei den Kennwortschutz hinzuzufügen. Dies führt im Allgemeinen zu einer besseren Leistung, da keine verteilten Konfigurationsdateien gelesen werden müssen. Diese Option erfordert Zugriff auf die Konfiguration, die nicht immer verfügbar ist. Wenn Sie jedoch Zugriff haben, wird empfohlen,

Öffnen Sie zunächst die virtuelle Hostdatei, der Sie eine Einschränkung hinzufügen möchten. In unserem Beispiel verwenden wir die Datei "+ 000-default.conf +", die den virtuellen Standardhost enthält, der über das Apache-Paket von Ubuntu installiert wurde:

sudo nano /etc/apache2/sites-enabled/

Wenn die Kommentare entfernt sind, sollte die Datei ungefähr so ​​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 verzeichnisbezogen. Um die Authentifizierung einzurichten, müssen Sie das Verzeichnis, das Sie einschränken möchten, mit einem + <Verzeichnis _> + Block markieren. 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

<VirtualHost *:80>
 ServerAdmin webmaster@localhost
 DocumentRoot /var/www/html
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined



</VirtualHost>

Geben Sie in diesem Verzeichnisblock an, dass die Authentifizierung "+ Basic " eingerichtet werden soll. Wählen Sie für " AuthName " einen Bereichsnamen aus, der dem Benutzer angezeigt wird, wenn Sie zur Eingabe von Anmeldeinformationen aufgefordert werden. Verwenden Sie die Direktive " AuthUserFile ", um Apache auf die von uns erstellte Kennwortdatei zu verweisen. Schließlich benötigen wir ein " valid-user +", um auf diese Ressource zuzugreifen. Dies bedeutet, dass jeder, der seine Identität mit einem Passwort überprüfen kann, in folgenden Ländern zugelassen wird:

/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>

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Vor dem Neustart des Webservers können Sie die Konfiguration mit dem folgenden Befehl überprüfen:

sudo apache2ctl configtest

Wenn alles ausgecheckt ist und Sie "+ Syntax OK " erhalten, starten Sie den Server neu, um Ihre Kennwortrichtlinie zu implementieren. Da " systemctl " nicht das Ergebnis aller Dienstverwaltungsbefehle anzeigt, verwenden wir das " status +", um sicherzustellen, dass der Server ausgeführt wird:

sudo systemctl restart apache2
sudo systemctl status apache2

Das von Ihnen angegebene Verzeichnis sollte jetzt kennwortgeschützt sein.

Option 2: Konfigurieren der Zugriffssteuerung mit .htaccess-Dateien

Apache kann "+ .htaccess +" - Dateien verwenden, um das Festlegen bestimmter Konfigurationselemente in einem Inhaltsverzeichnis zu ermöglichen. Da Apache diese Dateien bei jeder Anforderung, die das Verzeichnis betrifft, erneut lesen muss, was sich negativ auf die Leistung auswirken kann, wird Option 1 bevorzugt. Wenn Sie jedoch bereits eine .htaccess-Datei verwenden oder es Nicht-Root-Benutzern ermöglichen müssen, Einschränkungen zu verwalten, ` + .htaccess + `Dateien machen Sinn.

Öffnen Sie die Apache-Hauptkonfigurationsdatei, um den Kennwortschutz mithilfe von "+ .htaccess +" - Dateien zu aktivieren:

sudo nano /etc/apache2/apache2.conf

Suchen Sie den + <Verzeichnis> + Block für das + / var / www + Verzeichnis, in dem sich das Dokumentenstammverzeichnis befindet. Aktivieren Sie die Verarbeitung von "+ .htaccess ", indem Sie die Direktive " AllowOverride +" in diesem Block von "None" in "All" ändern:

/etc/apache2/apache2.conf

. . .

<Directory /var/www/>
 Options Indexes FollowSymLinks
 AllowOverride
 Require all granted
</Directory>

. . .

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 das gesamte Dokumentstammverzeichnis (die gesamte Website), das auf "+ / var / www / html +" basiert. Sie können diese Datei jedoch in einem beliebigen Verzeichnis ablegen, in dem Sie den Zugriff einschränken möchten:

sudo nano /var/www/html/.htaccess

Geben Sie in dieser Datei an, dass die Authentifizierung "+ Basic " eingerichtet werden soll. Wählen Sie für " AuthName " einen Bereichsnamen aus, der dem Benutzer angezeigt wird, wenn Sie zur Eingabe von Anmeldeinformationen aufgefordert werden. Verwenden Sie die Direktive " AuthUserFile ", um Apache auf die von uns erstellte Kennwortdatei zu verweisen. Schließlich benötigen wir ein " valid-user +", um auf diese Ressource zuzugreifen. Dies bedeutet, dass jeder, der seine Identität mit einem Passwort überprüfen kann, in folgenden Ländern zugelassen wird:

/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 den gesamten Inhalt im oder unter dem Verzeichnis mit dem Kennwort "+ .htaccess " zu schützen, und überprüfen Sie mit " systemctl status +", ob der Neustart erfolgreich war:

sudo systemctl restart apache2
sudo systemctl status apache2

Schritt 4 - Bestätigung der Passwortauthentifizierung

Versuchen Sie, in einem Webbrowser auf Ihre eingeschränkten Inhalte zuzugreifen, um zu bestätigen, dass Ihre Inhalte geschützt sind. Ihnen sollte eine Eingabeaufforderung für Benutzername und 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

Herzliche Glückwünsche! Wenn Sie mitverfolgt haben, richten Sie jetzt die Standardauthentifizierung für Ihre Site ein. Apache-Konfiguration und .htaccess können jedoch viel mehr als die Standardauthentifizierung. Probieren Sie eines der folgenden Tutorials aus, um mehr über die Flexibilität und Leistungsfähigkeit der Apache-Konfiguration zu erfahren: