So installieren und sichern Sie phpMyAdmin mit Nginx unter Ubuntu 16.04

Einführung

Während viele Benutzer die Funktionalität eines Datenbankverwaltungssystems wie MySQL benötigen, ist die Befehlszeilenschnittstelle für einige Benutzer möglicherweise weniger intuitiv und benutzerfreundlich, was eine Eintrittsbarriere darstellt.

phpMyAdmin wurde erstellt, damit Benutzer über eine Weboberfläche mit MySQL interagieren können. In diesem Handbuch wird erläutert, wie Sie phpMyAdmin installieren und sichern, damit Sie Ihre Datenbanken sicher von einem Ubuntu 16.04-System aus verwalten können. Wir bauen dieses Setup auf dem Nginx-Webserver auf, der ein gutes Leistungsprofil aufweist und mit hohen Lasten besser umgehen kann als einige andere Webserver.

Voraussetzungen

Bevor Sie mit diesem Handbuch beginnen, stellen Sie sicher, dass Sie die folgenden erforderlichen Schritte ausgeführt haben:

  • Zunächst nehmen wir an, dass Sie einen Nicht-Root-Benutzer mit Sudo-Berechtigungen verwenden, wie in den Schritten 1 bis 4 derinitial server setup of Ubuntu 16.04 beschrieben.

  • Wir gehen auch davon aus, dass Sie eine LEMP-Installation (Linux, Nginx, MySQL und PHP) auf Ihrem Ubuntu 16.04-Server abgeschlossen haben. Wenn Sie dies noch nicht getan haben, können Sie der Anleitung zuinstalling a LEMP stack on Ubuntu 16.04 folgen. Notieren Sie sich unbedingt Ihr MySQL-Datenbankadministratorkennwort.

Schließlich sind bei der Verwendung von Software wie phpMyAdmin wichtige Sicherheitsaspekte zu beachten: Sie kommuniziert direkt mit Ihrer MySQL-Installation, verarbeitet die Authentifizierung mit MySQL-Anmeldeinformationen und führt Ergebnisse für beliebige SQL-Abfragen aus und gibt sie zurück.

Aus diesen Gründen und weil es sich um eine weit verbreitete PHP-Anwendung handelt, die häufig angegriffen wird, sollten Sie phpMyAdmin auf Remote-Systemen niemals über eine einfache HTTP-Verbindung ausführen. Wenn Sie keine vorhandene Domäne mit einem SSL / TLS-Zertifikat konfiguriert haben, können Sie diese Anleitung untersecuring Nginx with Let’s Encrypt on Ubuntu 16.04 befolgen.

Sobald Sie diese erforderlichen Schritte ausgeführt haben, können Sie mit diesem Handbuch beginnen.

[[Schritt-1 -—- install-phpmyadmin]] == Schritt 1 - Installiere phpMyAdmin

Mit unserer bereits vorhandenen LEMP-Plattform können wir zunächst phpMyAdmin installieren, das in den Standard-Repositorys von Ubuntu verfügbar ist.

Zunächst aktualisieren wir den lokalen Paketindex des Servers, um sicherzustellen, dass er über neue Verweise auf verfügbare Pakete verfügt. Anschließend verwenden wir die Verpackungstools vonapt, um die Software aus den Repositorys abzurufen und auf unserem System zu installieren:

sudo apt-get update
sudo apt-get install phpmyadmin

Während der Installation werden Sie zur Eingabe einiger Informationen aufgefordert. Sie werden gefragt, welchen Webserver die Software automatisch konfigurieren soll. Da Nginx, der von uns verwendete Webserver, keine der verfügbaren Optionen ist, können Sie einfachTAB und dannENTER drücken, um diese Eingabeaufforderung zu umgehen.

Bei der nächsten Eingabeaufforderung werden Sie gefragt, obdbconfig-common eine Datenbank für die Verwendung durch phpMyAdmin konfigurieren soll. Wählen Sie "Ja", um fortzufahren. Sie müssen das Datenbankadministratorkennwort eingeben, das Sie während der MySQL-Installation konfiguriert haben, um diese Änderungen zuzulassen.

Sie werden nun aufgefordert, ein Kennwort für die phpMyAdmin-Anwendung und ihre Datenbank (die in diesem Schritt erstellt wird) auszuwählen und zu bestätigen. Wählen und bestätigen Sie ein sicheres Passwort und notieren Sie es.

Die Installation wird nun abgeschlossen. Damit der Nginx-Webserver die phpMyAdmin-Dateien richtig findet und bereitstellt, müssen wir eine symbolische Verknüpfung von den Installationsdateien zu unserem Nginx-Dokumentenstammverzeichnis erstellen:

sudo ln -s /usr/share/phpmyadmin /var/www/html

Schließlich müssen wir das PHP-Modul vonmcryptaktivieren, auf das sich phpMyAdmin stützt. Dies wurde mit phpMyAdmin installiert, daher schalten wir es ein und starten unseren PHP-Prozessor neu:

sudo phpenmod mcrypt
sudo systemctl restart php7.0-fpm

Damit ist unsere phpMyAdmin-Installation nun betriebsbereit. Um auf die Benutzeroberfläche zuzugreifen, rufen Sie in Ihrem Webbrowser den Domainnamen oder die öffentliche IP-Adresse Ihres Servers gefolgt von/phpmyadmin auf:

http://server_domain_or_IP/phpmyadmin

phpMyAdmin login screen

Verwenden Sie zum Anmelden eine Reihe von Anmeldeinformationen für einen gültigen MySQL-Benutzer. Beispielsweise ist das Benutzer- und MySQL-Administratorkennwort vonrooteine gute Wahl, um loszulegen. Sie sollten dann in der Lage sein, auf die Verwaltungsoberfläche zuzugreifen:

phpMyAdmin admin interface

Klicken Sie sich durch, um sich mit der Benutzeroberfläche vertraut zu machen.

In den nächsten beiden Abschnitten werden wir Schritte unternehmen, um unsere neue phpMyAdmin-Webkonsole zu sichern.

[[Schritt-2 - Ändern der Standard-phpmyadmin-URL]] == Schritt 2 - Ändern Sie die Standard-URL von phpMyAdmin

Die phpMyAdmin-Installation sollte zu diesem Zeitpunkt voll funktionsfähig sein. Durch die Installation einer Weboberfläche haben wir unseren MySQL-Datenbankserver jedoch der Außenwelt zugänglich gemacht. Aufgrund der Popularität von phpMyAdmin und der großen Datenmenge, auf die es möglicherweise zugreifen kann, sind Installationen wie diese häufige Ziele für Angriffe.

In diesem Abschnitt werden wir unsere Installation "härten" oder sperren, indem wir die URL der Schnittstelle von/phpmyadmin in einen nicht standardmäßigen Wert ändern, um einige der automatisierten Bot-Brute-Force-Versuche zu umgehen.

In einem früheren Schritt haben wir eine symbolische Verknüpfung vom phpMyAdmin-Verzeichnis zu unserem Dokumentenstamm erstellt, damit unser Nginx-Webserver unsere phpMyAdmin-Dateien finden und bereitstellen kann. Um die URL für unsere phpMyAdmin-Oberfläche zu ändern, benennen wir diesen symbolischen Link um.

Navigieren wir zunächst zum Stammverzeichnis des Nginx-Dokuments, um einen besseren Überblick über die vorgenommenen Änderungen zu erhalten:

cd /var/www/html/
ls -l

Sie erhalten folgende Ausgabe:

Outputtotal 4
-rw-r--r-- 1 root root 612 Apr 10 16:40 index.nginx-debian.html
lrwxrwxrwx 1 root root  21 Apr 10 17:06 phpmyadmin -> /usr/share/phpmyadmin

Die Ausgabe zeigt, dass wir in diesem Verzeichnis einen symbolischen Link namensphpmyadmin haben. Wir können diesen Linknamen nach Belieben ändern. Dadurch wird wiederum die Zugriffs-URL von phpMyAdmin geändert. Dies kann dazu beitragen, den Endpunkt vor Bots zu verbergen, die hartcodiert sind, um nach allgemeinen Endpunktnamen zu suchen (z. B. "phpmyadmin").

Wählen Sie einen Namen, der den Zweck des Endpunkts verdeckt. In diesem Handbuch nennen wir unseren Endpunkt/nothingtosee, aber Sie sollten einen alternativen Namen wählen. Dazu benennen wir den Link einfach um:

sudo mv phpmyadmin nothingtosee
ls -l

Nachdem Sie die obigen Befehle ausgeführt haben, erhalten Sie folgende Ausgabe:

Outputtotal 4
-rw-r--r-- 1 root root 612 Apr 10 16:40 index.nginx-debian.html
lrwxrwxrwx 1 root root  21 Apr 10 17:06 nothingtosee -> /usr/share/phpmyadmin

Wenn Sie jetzt zur alten URL wechseln, wird der Fehler 404 angezeigt:

http://server_domain_or_IP/phpmyadmin

phpMyAdmin 404 error

Jetzt ist Ihre phpMyAdmin-Oberfläche unter der neuen URL verfügbar, die wir gerade konfiguriert haben:

http://server_domain_or_IP/nothingtosee

phpMyAdmin login screen

Wir können unsere phpMyAdmin-Installation jetzt weiter härten, indem wir ein Authentifizierungs-Gateway einrichten.

[[Schritt-3 - Einrichten eines Nginx-Authentifizierungs-Gateways]] == Schritt 3 - Einrichten eines Nginx-Authentifizierungs-Gateways

Die nächste Funktion, die wir einrichten werden, ist eine Authentifizierungsaufforderung, die ein Benutzer passieren muss, bevor er den Anmeldebildschirm von phpMyAdmin sieht. Die meisten Webserver, einschließlich Nginx, bieten diese Funktion von Haus aus an. Wir müssen lediglich unsere Nginx-Konfigurationsdatei mit den Details ändern.

Zuvor erstellen wir eine Kennwortdatei, in der die Anmeldeinformationen für die Authentifizierung gespeichert werden. Für Nginx müssen Kennwörter mit der Funktioncrypt()verschlüsselt werden. Die OpenSSL-Suite, die bereits auf Ihrem Server installiert sein sollte, enthält diese Funktionalität.

Geben Sie Folgendes ein, um ein verschlüsseltes Kennwort zu erstellen:

openssl passwd

Sie werden aufgefordert, das gewünschte Passwort einzugeben und zu bestätigen. Das Dienstprogramm zeigt dann eine verschlüsselte Version des Kennworts an, die ungefähr so ​​aussieht:

OutputO5az.RSPzd.HE

Kopieren Sie diesen Wert, da Sie ihn in die zu erstellende Authentifizierungsdatei einfügen müssen.

Erstellen Sie nun eine Authentifizierungsdatei. Wir rufen diese Dateipma_pass auf und legen sie im Nginx-Konfigurationsverzeichnis ab:

sudo nano /etc/nginx/pma_pass

In dieser Datei geben Sie den Benutzernamen an, den Sie verwenden möchten, gefolgt von einem Doppelpunkt (:) und der verschlüsselten Version des Kennworts, das Sie vom Dienstprogrammopenssl passwderhalten haben.

Wir werden unseren Benutzersammy benennen, aber Sie sollten einen anderen Benutzernamen wählen. Die Datei sollte folgendermaßen aussehen:

/etc/nginx/pma_pass

sammy:O5az.RSPzd.HE

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

Jetzt können wir unsere Nginx-Konfigurationsdatei ändern. Öffnen Sie es in Ihrem Texteditor, um zu beginnen:

sudo nano /etc/nginx/sites-available/default

In dieser Datei müssen wir einen neuen Abschnittlocationhinzufügen. Dies zielt auf dielocation ab, die wir für unsere phpMyAdmin-Schnittstelle ausgewählt haben (wir haben/nothingtosee in diesem Handbuch ausgewählt).

Erstellen Sie diesen Abschnitt innerhalb des Blocksserver, jedoch außerhalb aller anderen Blöcke. In unserem Beispiel wird unser neuerlocation-Block unter den/-Block gesetzt:

/etc/nginx/sites-available/default

server {
    . . .

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        location /nothingtosee {
        }


    . . .
}

Innerhalb dieses Blocks müssen wir den Wert einer Variablen namensauth_basic auf eine Authentifizierungsnachricht setzen, die unsere Eingabeaufforderung den Benutzern anzeigt. Wir möchten nicht authentifizierten Benutzern mitteilen, was wir schützen. Geben Sie daher keine spezifischen Details an. In unserem Beispiel verwenden wir einfach "Admin Login".

Anschließend müssen wir eine Variable namensauth_basic_user_file hinzufügen, um unseren Webserver auf die gerade erstellte Authentifizierungsdatei zu verweisen. Nginx fordert den Benutzer zur Eingabe von Authentifizierungsdetails auf und überprüft, ob die eingegebenen Werte mit den in der angegebenen Datei gefundenen übereinstimmen.

Nachdem wir fertig sind, sollte die Datei folgendermaßen aussehen:

/etc/nginx/sites-available/default

server {
    . . .

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

    location /nothingtosee {
        auth_basic "Admin Login";
        auth_basic_user_file /etc/nginx/pma_pass;
    }

    . . .
}

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

Um unser neues Authentifizierungsgatter zu aktivieren, müssen wir den Webserver neu starten:

sudo service nginx restart

Wenn Sie jetzt die phpMyAdmin-URL in Ihrem Webbrowser besuchen (wenn das Aktualisieren der Seite nicht funktioniert, müssen Sie möglicherweise Ihren Cache leeren oder eine andere Browsersitzung verwenden, wenn Sie bereits phpMyAdmin verwendet haben), sollten Sie zur Eingabe der URL aufgefordert werden Benutzername und Passwort, die Sie der Dateipma_passhinzugefügt haben:

http://server_domain_or_IP/nothingtosee

Nginx authentication page

Sobald Sie Ihre Anmeldeinformationen eingegeben haben, werden Sie zur Standard-Anmeldeseite von phpMyAdmin weitergeleitet.

Dieses Gateway bietet nicht nur eine zusätzliche Sicherheitsebene, sondern sorgt auch dafür, dass Ihre MySQL-Protokolle frei von Spam-Authentifizierungsversuchen sind.

Fazit

Nach Abschluss dieses Lernprogramms können Sie Ihre MySQL-Datenbanken jetzt über eine einigermaßen sichere Weboberfläche verwalten. Diese Benutzeroberfläche bietet die meisten Funktionen, die über die MySQL-Befehlszeile verfügbar sind. Sie können Datenbanken und Schemas durchsuchen, Abfragen ausführen und neue Datensätze und Strukturen erstellen.

Related