SKILL LEVEL: SYSADMIN/ADVANCED - TIME: 5-10 MINS
Einführung
In diesem Tutorial zeigen wir Ihnen, wie Sie eine Website oder nur einen Ordner innerhalb einer Website mit einem Passwort schützen. Wir werden für dieses Beispiel den beliebtesten Webserver, Apache2, verwenden, ähnliche Methoden können jedoch auch mit anderen Webservern durchgeführt werden.
Die Methode, die wir verwenden werden, ist ein einfaches Authentifizierungssystem, aber es ist einfach einzurichten und ermöglicht es Ihnen, Ihre Website schnell vor anderen Leuten im großen bösen Internet zu sichern. Diese Methode basiert darauf, dass Sie eine Kombination aus Benutzername und Passwort für Ihre Site(s) erstellen. Sie können beliebig viele Benutzernamen hinzufügen, aber denken Sie daran, dass Sie jedes Passwort pflegen müssen.
Voraussetzungen
Für dieses Beispiel verwenden wir die Ubuntu 16.04 Server Edition. Dies funktioniert auch unter Ubuntu 14.04 und fast jeder anderen Linux-Distribution, vorausgesetzt, Sie verwenden den Apache 2-Webserver.
In Ubuntu melden Sie sich als Standardbenutzer an und verwenden sudo, um Root-Befehle (privilegiert/Superuser) auszugeben. Wenn Sie ein Root-Login auf Ihrem Server haben, können Sie stattdessen dieses verwenden. Sie müssen sudo nicht verwenden, es wird jedoch für alle sicheren Serveradministrationen empfohlen, dass Sie Aktionen mit sudo ausführen und als normaler (Nicht-Root-)Benutzer arbeiten, um administrative Aufgaben auszuführen.
Installieren Sie das Apache-Dienstprogrammpaket
Um die Datei zu erstellen, die die Passwörter speichert, die für den Zugriff auf unsere eingeschränkten Inhalte erforderlich sind, verwenden wir ein Dienstprogramm namens htpasswd
, das Teil des Pakets apache2-utils ist. Führen Sie die folgenden Befehle aus, um apache2-utils zu installieren:
sudo apt-get update
sudo apt-get install apache2-utils
Das Obige setzt voraus, dass Sie Apache2 bereits installiert haben (sudo apt-get install apache2, falls nicht).
Passwortdatei erstellen
Wir haben jetzt Zugriff auf das htpasswd
Befehl. Wir können dies verwenden, um eine Passwortdatei zu erstellen, mit der Apache Benutzer authentifizieren kann. Zu diesem Zweck erstellen wir eine versteckte Datei mit dem Namen .htpasswd
innerhalb unseres /etc/apache2
Konfigurationsverzeichnis. Beachten Sie, dass Dateien mit einem vorangestellten Punkt (.) automatisch aus einer Standardverzeichnisliste ausgeblendet werden (z. B. werden sie nicht mit dem Befehl ls angezeigt). Wenn Sie sie anzeigen möchten, verwenden Sie ls -la (lange Liste, alle Dateien).
Wenn wir dieses Dienstprogramm zum ersten Mal verwenden, müssen wir -c
hinzufügen Option zum Erstellen der angegebenen Datei. Wir geben einen Benutzernamen an (sammy
in diesem Beispiel) am Ende des Befehls, 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 -c
weg Argument für alle zusätzlichen Benutzer, die Sie hinzufügen möchten:
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
sammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.
Apache-Passwortauthentifizierung konfigurieren
Jetzt, da wir eine Datei mit unseren Benutzern und Passwörtern in einem Format haben, das Apache lesen kann, müssen wir Apache so konfigurieren, dass diese Datei überprüft wird, bevor unsere geschützten Inhalte bereitgestellt werden. Wir können dies auf zwei verschiedene Arten tun.
Die erste Option besteht darin, die Apache-Konfiguration zu bearbeiten und unseren Passwortschutz zur virtuellen Hostdatei hinzuzufügen. Dies führt im Allgemeinen zu einer besseren Leistung, da die Kosten für das Lesen verteilter Konfigurationsdateien vermieden werden. 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
einschränken .htaccessfile. Apache uses
.htaccess`-Dateien, damit bestimmte Konfigurationselemente innerhalb einer Datei in einem Inhaltsverzeichnis festgelegt werden können. Der Nachteil ist, dass Apache diese Dateien bei jeder Anfrage, die das Verzeichnis betrifft, neu einlesen muss, was die Leistung beeinträchtigen kann.
Wählen Sie unten die Option, die Ihren Anforderungen am besten entspricht.
Konfigurieren der Zugriffskontrolle innerhalb der Definition des virtuellen Hosts
Öffnen Sie zunächst die virtuelle Hostdatei, der Sie eine Einschränkung hinzufügen möchten. Für unser Beispiel verwenden wir die 000-default.conf
Datei, die den standardmäßigen virtuellen Host enthält, der über das Apache-Paket von Ubuntu installiert wird:
- sudo nano /etc/apache2/sites-enabled/000-default.conf
Im Inneren sollte die Datei ohne Kommentare 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 pro Verzeichnis. Um die Authentifizierung einzurichten, müssen Sie das Verzeichnis, das Sie einschränken möchten, mit <Directory ___>
anvisieren Block. In unserem Beispiel beschränken wir den gesamten Dokumentenstamm, aber Sie können diese Auflistung so ändern, dass sie nur auf ein bestimmtes Verzeichnis innerhalb des Webspace abzielt:
<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>
Geben Sie innerhalb dieses Verzeichnisblocks an, dass wir Basic
einrichten möchten Authentifizierung. Für den AuthName
, wählen Sie einen Bereichsnamen aus, der dem Benutzer angezeigt wird, wenn er zur Eingabe von Anmeldeinformationen aufgefordert wird. Verwenden Sie die AuthUserFile
Anweisung, um Apache auf die von uns erstellte Passwortdatei zu verweisen. Schließlich benötigen wir einen valid-user
um auf diese Ressource zuzugreifen, was bedeutet, dass jeder, der seine Identität mit einem Passwort verifizieren kann, Zugang zu Folgendem hat:
<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 angegebene Verzeichnis sollte jetzt passwortgeschützt sein.
Zugriffskontrolle mit .htaccess-Dateien konfigurieren
Wenn Sie einen Passwortschutz mit .htaccess
einrichten möchten stattdessen sollten Sie damit beginnen, die Apache-Hauptkonfigurationsdatei zu bearbeiten, um .htaccess
zuzulassen Dateien:
sudo nano /etc/apache2/apache2.conf
Suchen Sie <Directory>
Block für /var/www
Verzeichnis, das den Dokumentstamm enthält. Aktivieren Sie .htaccess
Verarbeitung durch Änderung des AllowOverride
Direktive innerhalb dieses Blocks von „None“ zu „All“:
. . .
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
. . .
Speichern und schließen Sie die Datei, wenn Sie fertig sind.
Als nächstes müssen wir eine .htaccess
hinzufügen Datei in das Verzeichnis, das wir einschränken möchten. In unserer Demonstration schränken wir den gesamten Dokumentenstamm (die gesamte Website) ein, der auf /var/www/html
basiert , aber Sie können diese Datei in jedem Verzeichnis ablegen, auf das Sie den Zugriff beschränken möchten:
sudo nano /var/www/html/.htaccess>
Geben Sie in dieser Datei an, dass wir Basic
einrichten möchten Authentifizierung. Für den AuthName
, wählen Sie einen Bereichsnamen aus, der dem Benutzer angezeigt wird, wenn er zur Eingabe von Anmeldeinformationen aufgefordert wird. Verwenden Sie die AuthUserFile
Anweisung, um Apache auf die von uns erstellte Passwortdatei zu verweisen. Schließlich benötigen wir einen valid-user
um auf diese Ressource zuzugreifen, was bedeutet, dass jeder, der seine Identität mit einem Passwort verifizieren kann, Zugang zu Folgendem hat:
/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 dem .htaccess
mit einem Passwort zu schützen Datei:
- sudo-Dienst apache2 neu starten
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. Sie sollten eine Eingabeaufforderung für Benutzername und Passwort sehen, die wie folgt aussieht:
Wenn Sie die richtigen Anmeldeinformationen eingeben, können Sie auf die Inhalte zugreifen. Wenn Sie die falschen Anmeldeinformationen eingeben oder auf „Abbrechen“ klicken, wird die Fehlerseite „Nicht autorisiert“ angezeigt:
Schlussfolgerung
Sie sollten jetzt alles haben, was Sie zum Einrichten der Basisauthentifizierung für Ihre Website benötigen. Der gesamte Passwortschutz sollte mit einer SSL-Verschlüsselung kombiniert werden, damit Ihre Anmeldeinformationen nicht im Klartext an den Server gesendet werden.
Vielen Dank an die Leute von digitalocean.com für einige der Inhalte auf dieser Seite. Probieren Sie sie unbedingt aus, sie haben fantastische Webhosting-Dienste für jedes Budget!