Tutorial

So richten Sie eine Passwort-Authentifizierung mit Apache unter Ubuntu 18.04 ein

Published on April 24, 2020
Deutsch
So richten Sie eine Passwort-Authentifizierung mit Apache unter Ubuntu 18.04 ein

Einführung

Für Sie als Web-Administrator könnte es eventuell sinnvoll sein, einige Teile einer Website vorübergehend oder dauerhaft für Besucher einzuschränken. Obwohl Webanwendungen möglicherweise ihre eigenen Authentifizierungs- und Autorisierungsmethoden anbieten, können Sie sich auch auf den Webserver selbst stützen, um den Zugriff einzuschränken, wenn diese unzureichend oder nicht verfügbar sind.

Dieses Tutorial bietet Ihnen eine Vorgehensweise, um Assets auf einem Apache-Webserver, auf dem Ubuntu 18.04 ausgeführt wird, mit einem Passwort zu schützen, um Ihren Server mit zusätzlicher Sicherheit zu versehen.

Voraussetzungen

Um dieses Tutorial fertigzustellen, benötigen Sie Zugriff auf einen Ubuntu 18.04 Server.

Zusätzlich benötigen Sie die folgende Einrichtung, bevor Sie beginnen können:

  • Einen sudo-Benutzer auf Ihrem Server: Sie können einen Benutzer mit sudo-Berechtigungen erstellen, indem Sie der Anleitung für die Ersteinrichtung eines Servers unter Ubuntu 18.04 folgen.

  • Einen Apache2-Webserver: Sollten Sie noch keinen eingerichtet haben, können Sie eine Hilfestellung in dem Tutorial So installieren Sie den Apache-Webserver unter Ubuntu 18.04 finden.

  • Eine mit SSL gesicherte Website: Wie Sie diese einrichten, hängt davon ab, ob Sie einen Domänenamen für Ihre Website haben.

    • Wenn Sie einen Domänennamen haben, können Sie Ihre Site mit Let’s Encrypt sichern, das kostenlose, vertrauenswürdige Zertifikate bereitstellt. Folgen Sie dem Leitfaden Let’s Encrypt für Apache, um diese Einrichtung vorzunehmen.
    • Wenn Sie keine Domäne haben und diese Konfiguration nur zu Testzwecken oder für den persönlichen Gebrauch verwenden, können Sie stattdessen ein selbstsigniertes Zertifikat verwenden. Damit wird die gleiche Art der Verschlüsselung bereitgestellt, aber ohne Domänenvalidierung. Folgen Sie dem Leitfaden für selbstsignierte SSL für Apache, um diese Einrichtung vorzunehmen.

Wenn alle diese Voraussetzungen erfüllt sind, melden Sie sich als sudo-Benutzer an Ihrem Server an und fahren weiter unten fort.

Schritt 1 – Installieren des Apache-Dienstprogrammpakets

Beginnen wir, indem wir unseren Server aktualisieren und ein Paket installieren, das wir benötigen. Um diesem Tutorial zu folgen, verwenden wir ein Dienstprogramm namens htpasswd, das Teil des Pakets apache2-utils ist, um die Datei zu erstellen und den Benutzernamen und die Passwörter zu verwalten, die für den Zugriff auf eingeschränkte Inhalte benötigt werden.

  1. sudo apt update
  2. sudo apt install apache2-utils

Wenn dies installiert ist, haben wir Zugriff auf den Befehl htpasswd.

Schritt 2 – Erstellen der Passwort-Datei

Mit dem Befehl htpasswd können wir eine Passwortdatei erstellen, die Apache zur Authentifizierung von Benutzern verwenden kann. Wir werden zu diesem Zweck eine versteckte Datei namens .htpasswd in unserem Konfigurationsverzeichnis /etc/apache2 erstellen.

Wenn wir dieses Dienstprogramm zum ersten Mal verwenden, müssen wir die Option -c hinzufügen, um die spezifizierte passwdfile zu erstellen. Wir geben am Ende des Befehls einen Benutzernamen (in diesem Beispiel sammy) an, um einen neuen Eintrag in der Datei zu erstellen:

  1. sudo htpasswd -c /etc/apache2/.htpasswd sammy

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

Geben Sie für zusätzliche Benutzer, die Sie hinzufügen möchten, nicht das Argument -c ein, um die Datei nicht zu überschreiben:

  1. sudo htpasswd /etc/apache2/.htpasswd another_user

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

  1. cat /etc/apache2/.htpasswd
Output
sammy:$apr1$.0CAabqX$rb8lueIORA/p8UzGPYtGs/ another_user:$apr1$fqH7UG8a$SrUxurp/Atfq6j7GL/VEC1

Unsere Benutzer und Passwörter liegen jetzt in einem Format vor, das Apache lesen kann.

Schritt 3 – Konfigurieren der Apache Passwort-Authentifizierung

In diesem Schritt müssen wir Apache so konfigurieren, dass diese Datei überprüft wird, bevor unser geschützter Inhalt bereitgestellt wird. Wir können dies auf eine von zwei Arten tun: entweder direkt in der virtuellen Host-Datei einer Website oder indem wir .htaccess-Dateien in die Verzeichnisse übertragen, die eine Einschränkung benötigen. In der Regel empfiehlt sich die Verwendung der virtuellen Host-Datei. Wenn Sie jedoch Benutzern ohne Rootberechtigung die Verwaltung ihrer eigenen Zugriffsbeschränkungen ermöglichen müssen, die Einschränkungen in die Versionskontrolle der Website integrieren müssen oder eine Webanwendung haben, die .htaccess-Dateien bereits für andere Zwecke verwendet, sollten Sie die zweite Option ausprobieren.

Wählen Sie die Option, die am besten für Ihre Bedürfnisse geeignet ist.

Option 1: Konfigurieren der Zugriffskontrolle innerhalb der virtuellen Host-Definition (bevorzugt)

Die erste Option besteht darin, die Apache-Konfiguration zu bearbeiten und den Passwortschutz zu der virtuellen Host-Datei hinzuzufügen. Dadurch wird im Allgemeinen eine bessere Leistung erzielt, da die Kosten für das Lesen von verteilten Konfigurationsdateien vermieden werden. Diese Option erfordert Zugriff auf die Konfiguration, der nicht immer verfügbar ist. Wenn Sie jedoch Zugriff haben, wird dies empfohlen.

Beginnen Sie, indem Sie die virtuelle Host-Datei öffnen, der Sie eine Einschränkung hinzufügen möchten. Wir werden für unser Beispiel die Datei default-ssl.conf verwenden, die den virtuellen Standard-Host enthält, der über das Apache-Paket von Ubuntu installiert wurde. Öffnen Sie die Datei mit einem Befehlszeilen-Texteditor wie nano:

  1. sudo nano /etc/apache2/sites-enabled/default-ssl.conf

Ohne die Kommentare sollte die Datei in etwa wie folgt aussehen:

/etc/apache2/sites-enabled/default-ssl.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 wird pro Verzeichnis durchgeführt. Um die Authentifizierung einzurichten, müssen Sie das Verzeichnis, das Sie einschränken möchten, mit einem <Directory ___>-Block als Ziel angeben. In unserem Beispiel schränken wir den gesamte Dokumentenstamm ein. Sie können diese Auflistung jedoch so ändern, dass sie nur auf ein bestimmtes Verzeichnis innerhalb des Webspace abzielt:

/etc/apache2/sites-enabled/default-ssl.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>

Innerhalb dieses Verzeichnisblocks legen wir fest, dass die Basic-Authentifizierung eingerichtet wird. Wählen Sie für den AuthName einen Bereichsnamen, der dem Benutzer bei der Aufforderung zur Eingabe der Anmeldedaten angezeigt wird. Verwenden Sie die Anweisung AuthUserFile, um Apache auf die von uns erstellte Passwort-Datei zu verweisen. Machen Sie es zum Schluss zur Bedingung, dass nur ein valid-user auf diese Ressource zugreifen kann, was bedeutet, dass jede Person, die ihre Identität mit einem Passwort verifizieren kann, Zugriff erhält.

/etc/apache2/sites-enabled/default-ssl.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>

Wenn Sie fertig sind, speichern und schließen Sie die Datei. Wenn Sie nano verwenden, drücken Sie hierfür STRG+X, gefolgt von Y und dann der EINGABETASTE.

Bevor Sie den Webserver neu starten, können Sie die Konfiguration mit dem folgenden Befehl überprüfen:

  1. sudo apache2ctl configtest

Wenn alles in Ordnung ist und Sie als Ausgabe Syntax OK erhalten, können Sie den Server neu starten, um Ihre Passwort-Richtlinie zu implementieren. Da systemctl nicht das Ergebnis aller Dienstverwaltungsbefehle anzeigt, verwenden wir status, um sicherzustellen, dass der Server ausgeführt wird:

  1. sudo systemctl restart apache2
  2. sudo systemctl status apache2

Nun sollte das von Ihnen angegebene Verzeichnis passwortgeschützt sein.

Option 2: Konfigurieren der Zugriffskontrolle mit .htaccess-Dateien

Apache kann .htaccess-Dateien verwenden, um die Einstellung bestimmter Konfigurationselemente innerhalb eines Inhaltsverzeichnisses zu ermöglichen. Da Apache diese Dateien bei jeder das Verzeichnis betreffenden Anfrage erneut lesen muss, was sich negativ auf die Leistung auswirken kann, wird Option 1 bevorzugt. Wenn Sie jedoch bereits die Datei .htaccess verwenden oder Benutzern ohne Rootberechtigung die Verwaltung von Einschränkungen ermöglichen müssen, sind .htaccess-Dateien sinnvoll.

Um den Passwortschutz unter Verwendung von .htaccess-Dateien zu aktivieren, öffnen Sie die Apache-Konfigurationsdatei mit einem Befehlszeilen-Texteditor wie nano:

  1. sudo nano /etc/apache2/apache2.conf

Suchen Sie den Block <Directory> für das Verzeichnis /var/www, in dem sich der Dokumentenstamm befindet. Aktivieren Sie die Verarbeitung von .htaccess, indem Sie die Anweisung AllowOverride innerhalb dieses Blocks von None zu All ändern:

/etc/apache2/apache2.conf
. . .

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

. . .

Wenn Sie fertig sind, speichern und schließen Sie die Datei. Wenn Sie nano verwenden, drücken Sie hierfür STRG+X, gefolgt von Y und dann der EINGABETASTE.

Als Nächstes müssen wir dem Verzeichnis, das wir einschränken möchten, eine .htaccess-Datei hinzufügen. In unserer Demonstration beschränken wir den gesamten Dokumentenstamm (die gesamte Website), der auf /var/www/html basiert. Sie können diese Datei jedoch in jedem Verzeichnis ablegen, in dem Sie den Zugriff einschränken möchten:

  1. sudo nano /var/www/html/.htaccess

Innerhalb dieser Datei geben wir an, dass wir die Basic-Authentifizierung einrichten möchten. Wählen Sie für den AuthName einen Bereichsnamen, der dem Benutzer bei der Aufforderung zur Eingabe der Anmeldedaten angezeigt wird. Verwenden Sie die Anweisung AuthUserFile, um Apache auf die von uns erstellte Passwort-Datei zu verweisen. Abschließend erfordern wir den Zugriff auf diese Ressource durch einen valid-user, d. h. jede Person, die ihre Identität mit einem Passwort verifizieren kann, erhält Zugriff:

/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 in oder unterhalb des Verzeichnisses mit der .htaccess-Datei mit einem Passwort zu schützen, und verwenden Sie systemctl status, um den Erfolg des Neustarts zu überprüfen:

  1. sudo systemctl restart apache2
  2. sudo systemctl status apache2

Das von Ihnen angegebene Verzeichnis sollte nun passwortgeschützt sein.

Schritt 4 – Bestätigen der Passwort-Authentifizierung

Um zu bestätigen, dass Ihr Inhalt geschützt ist, versuchen Sie, in einem Webbrowser auf Ihren eingeschränkten Inhalt zuzugreifen. Sie sollten eine Aufforderung zur Eingabe von Benutzername und Passwort erhalten, die wie folgt aussieht:

Eingabeaufforderung für ein Apache2-Passwort

Wenn Sie die richtigen Anmeldedaten eingeben, können Sie auf den Inhalt zugreifen. Wenn Sie die falschen Anmeldedaten eingeben oder auf „Cancel“ klicken, wird die Fehlerseite „Unauthorized“ angezeigt:

Apache2 Fehler „unauthorized“

Zusammenfassung

Herzlichen Glückwunsch! Wenn Sie diesem Tutorial gefolgt sind, haben Sie nun die standardmäßige Authentifizierung für Ihre Website eingerichtet.

Sie können mit der Apache-Konfiguration und .htaccess noch wesentlich mehr tun. Um mehr über die Flexibilität und Leistungsfähigkeit der Apache-Konfiguration zu erfahren, probieren Sie eines dieser Tutorials aus:

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about us


About the authors

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel