So richten Sie die Kennwortauthentifizierung mit Nginx 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 Nginx-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 Nicht-Root-Benutzer mit "+ sudo +" - Berechtigungen, um administrative Aufgaben ausführen zu können. Informationen zum Erstellen eines solchen Benutzers finden Sie in unserer Ubuntu 14.04 Anleitung zur Ersteinrichtung des Servers.

Wenn Sie dies noch nicht getan haben, installieren Sie Nginx auf Ihrem Computer, indem Sie Folgendes eingeben:

sudo apt-get update
sudo apt-get install nginx

Erstellen Sie die Passwortdatei

Zu Beginn müssen wir die Datei erstellen, die Ihre Kombinationen aus Benutzername und Kennwort enthält. Verwenden Sie dazu die OpenSSL-Dienstprogramme, die möglicherweise bereits auf Ihrem Server verfügbar sind. Alternativ können Sie das speziell entwickelte Hilfsprogramm + htpasswd + verwenden, das im Paket + apache2-utils + enthalten ist (Nginx-Kennwortdateien verwenden dasselbe Format wie Apache). Wählen Sie die Methode, die Ihnen am besten gefällt.

Erstellen Sie die Kennwortdatei mit den OpenSSL-Dienstprogrammen

Wenn Sie OpenSSL auf Ihrem Server installiert haben, können Sie eine Kennwortdatei ohne zusätzliche Pakete erstellen. Wir erstellen eine versteckte Datei mit dem Namen "+ .htpasswd " im Konfigurationsverzeichnis " / etc / nginx +", um unsere Kombinationen aus Benutzername und Passwort zu speichern.

Mit diesem Befehl können Sie der Datei einen Benutzernamen hinzufügen. Wir verwenden "+ sammy +" als Benutzernamen, aber Sie können jeden beliebigen Namen verwenden:

sudo sh -c "echo -n ':' >> /etc/nginx/.htpasswd"

Fügen Sie als Nächstes einen verschlüsselten Kennworteintrag für den Benutzernamen hinzu, indem Sie Folgendes eingeben:

sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"

Sie können diesen Vorgang für weitere Benutzernamen wiederholen. Sie können sehen, wie die Benutzernamen und verschlüsselten Passwörter in der Datei gespeichert sind, indem Sie Folgendes eingeben:

cat /etc/nginx/.htpasswd
Outputsammy:$apr1$wI1/T0nB$jEKuTJHkTOOWkopnXqC1d1

Erstellen Sie die Kennwortdatei mit den Apache-Dienstprogrammen

Während OpenSSL Kennwörter für die Nginx-Authentifizierung verschlüsseln kann, fällt es vielen Benutzern leichter, ein spezielles Dienstprogramm zu verwenden. Das Hilfsprogramm + htpasswd +, das im Paket + apache2-utils + enthalten ist, erfüllt diese Funktion sehr gut.

Installieren Sie das Paket + apache2-utils + auf Ihrem Server, indem Sie Folgendes eingeben:

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

Jetzt haben Sie Zugriff auf den Befehl + htpasswd +. Hiermit können wir eine Kennwortdatei erstellen, mit der Nginx Benutzer authentifizieren kann. Zu diesem Zweck erstellen wir eine versteckte Datei mit dem Namen "+ .htpasswd " in unserem Konfigurationsverzeichnis " / etc / nginx +".

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/nginx/.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/nginx/.htpasswd

Wenn wir den Inhalt der Datei anzeigen, sehen wir den Benutzernamen und das verschlüsselte Passwort für jeden Datensatz:

cat /etc/nginx/.htpasswd
Outputsammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.

Konfigurieren Sie die Nginx-Kennwortauthentifizierung

Nachdem wir eine Datei mit Benutzern und Kennwörtern in einem Format haben, das Nginx lesen kann, müssen wir Nginx so konfigurieren, dass diese Datei überprüft wird, bevor wir unseren geschützten Inhalt bereitstellen.

Öffnen Sie zunächst die Serverblock-Konfigurationsdatei, der Sie eine Einschränkung hinzufügen möchten. In unserem Beispiel verwenden wir die "+ default" -Serverblockdatei, die mit dem Ubuntu Nginx-Paket installiert wurde:

sudo nano /etc/nginx/sites-enabled/

Wenn die Kommentare entfernt sind, sollte die Datei ungefähr so ​​aussehen:

/ etc / nginx / sites-enabled / default

server {
   listen 80 default_server;
   listen [::]:80 default_server ipv6only=on;

   root /usr/share/nginx/html;
   index index.html index.htm;

   server_name localhost;

   location / {
       try_files $uri $uri/ =404;
   }
}

Um die Authentifizierung einzurichten, müssen Sie den einzuschränkenden Kontext festlegen. Mit Nginx können Sie unter anderem Einschränkungen auf Serverebene oder innerhalb eines bestimmten Standorts festlegen. In unserem Beispiel wird der gesamte Dokumentstamm mit einem Speicherortblock eingeschränkt. Sie können diese Auflistung jedoch so ändern, dass sie nur auf ein bestimmtes Verzeichnis im Webspace abzielt:

Verwenden Sie in diesem Adressblock die Direktive "+ auth_basic ", um die Authentifizierung zu aktivieren und einen Bereichsnamen auszuwählen, der dem Benutzer bei der Aufforderung zur Eingabe von Anmeldeinformationen angezeigt werden soll. Wir werden die Direktive ` auth_basic_user_file +` verwenden, um Nginx auf die von uns erstellte Passwortdatei zu verweisen:

/ etc / nginx / sites-enabled / default

server {
   listen 80 default_server;
   listen [::]:80 default_server ipv6only=on;

   root /usr/share/nginx/html;
   index index.html index.htm;

   server_name localhost;

   location / {
       try_files $uri $uri/ =404;


   }
}

Speichern und schließen Sie die Datei, wenn Sie fertig sind. Starten Sie Nginx neu, um Ihre Kennwortrichtlinie zu implementieren:

sudo service nginx restart

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

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 "Autorisierung erforderlich" 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. Informationen zum Erstellen eines selbstsignierten SSL-Zertifikats für Nginx finden Sie unter https://www.digitalocean.com/community/tutorials/how-to-create-an-ssl-certificate-on-nginx-for-ubuntu -14-04 [diese Anleitung]. Informationen zum Installieren eines kommerziellen Zertifikats finden Sie unter this guide.