So richten Sie die Kennwortauthentifizierung mit Apache unter Ubuntu ein 14.04

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-chinzufü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-cfü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 vonBasiceingerichtet 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 vonBasiceingerichtet 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.htaccessmit 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:

Apache2 password prompt

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:

Apache2 unauthorized error

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.