Wie man phpMyAdmin mit Nginx auf Ubuntu 16.04 installiert und sichert
Verwendest du nicht Ubuntu 16.04?Wähle eine andere Version oder Distribution aus.
Einführung
Während viele Benutzer die Funktionalität eines Datenbankmanagementsystems wie MySQL benötigen, kann die Befehlszeilenschnittstelle für einige weniger intuitiv und benutzerfreundlich sein, was eine Eintrittsbarriere darstellt.
phpMyAdmin wurde erstellt, damit Benutzer über eine Weboberfläche mit MySQL interagieren können. In diesem Handbuch werden wir besprechen, wie man phpMyAdmin installiert und sichert, damit Sie es sicher nutzen können, um Ihre Datenbanken von einem Ubuntu 16.04-System aus zu verwalten. Wir werden dieses Setup auf dem Nginx-Webserver aufbauen, der ein gutes Leistungsprofil hat und schwerere Lasten besser bewältigen kann als einige andere Webserver.
Voraussetzungen
Bevor Sie mit diesem Leitfaden beginnen, stellen Sie sicher, dass Sie die folgenden Voraussetzungen abgeschlossen haben:
- Zuerst nehmen wir an, dass Sie einen Nicht-Root-Benutzer mit Sudo-Rechten verwenden, wie in den Schritten 1-4 der ersten Servereinrichtung von 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 die Anleitung zur Installation eines LEMP-Stacks auf Ubuntu 16.04 folgen. Vergessen Sie nicht, Ihr MySQL-Datenbank-Administrator-Passwort zu notieren.
Schließlich gibt es wichtige Sicherheitsaspekte, die man beachten sollte, wenn man Software wie phpMyAdmin verwendet: Sie kommuniziert direkt mit Ihrer MySQL-Installation, verarbeitet die Authentifizierung mithilfe von MySQL-Zugangsdaten und führt beliebige SQL-Abfragen aus und gibt deren Ergebnisse zurück.
Aus diesen Gründen und weil es sich um eine weit verbreitete PHP-Anwendung handelt, die häufig Ziel von Angriffen ist, sollten Sie phpMyAdmin niemals auf entfernten Systemen über eine ungesicherte HTTP-Verbindung ausführen. Wenn Sie kein bestehendes Gebiet mit einem SSL/TLS-Zertifikat konfiguriert haben, können Sie dieser Anleitung zur Sicherung von Nginx mit Let's Encrypt auf Ubuntu 16.04 folgen.
Sobald Sie diese erforderlichen Schritte abgeschlossen haben, sind Sie bereit, mit diesem Leitfaden zu beginnen.
Schritt 1 — Installieren Sie phpMyAdmin
Mit unserer LEMP-Plattform, die bereits eingerichtet ist, können wir damit beginnen, phpMyAdmin zu installieren, das in den Standard-Repositories von Ubuntu verfügbar ist.
Zuerst aktualisieren wir den lokalen Paketindex des Servers, um sicherzustellen, dass er eine frische Menge an Referenzen zu verfügbaren Paketen hat. Dann verwenden wir die apt-Paketierungswerkzeuge, um die Software aus den Repositories herunterzuladen und sie auf unserem System zu installieren:
- sudo apt-get update
- sudo apt-get install phpmyadmin
Während der Installation werden Sie nach einigen Informationen gefragt. Es wird Sie fragen, welchen Webserver Sie möchten, dass die Software automatisch konfiguriert. Da Nginx, der Webserver, den wir verwenden, keine der verfügbaren Optionen ist, können Sie einfach TAB drücken und dann ENTER drücken, um diese Eingabeaufforderung zu umgehen.
Der nächste Prompt fragt, ob Sie dbconfig-common verwenden möchten, um eine Datenbank für phpMyAdmin zu konfigurieren. Wählen Sie „Ja“, um fortzufahren. Sie müssen das Administratorpasswort der Datenbank eingeben, das Sie während der MySQL-Installation konfiguriert haben, um diese Änderungen zuzulassen.
Sie werden jetzt aufgefordert, ein Passwort für die phpMyAdmin-Anwendung und deren Datenbank (die in diesem Schritt erstellt wird) auszuwählen und zu bestätigen. Wählen Sie ein sicheres Passwort und notieren Sie es.
Die Installation wird jetzt abgeschlossen. Damit der Nginx-Webserver die phpMyAdmin-Dateien korrekt finden und bereitstellen kann, müssen wir einen symbolischen Link von den Installationsdateien zu unserem Nginx-Dokumentstammverzeichnis erstellen:
- sudo ln -s /usr/share/phpmyadmin /var/www/html
Schließlich müssen wir das mcrypt PHP-Modul aktivieren, auf das phpMyAdmin angewiesen ist. Dies wurde zusammen mit phpMyAdmin installiert, also werden wir es aktivieren und unseren PHP-Prozessor neu starten:
- sudo phpenmod mcrypt
- sudo systemctl restart php7.0-fpm
Damit ist unsere phpMyAdmin-Installation nun betriebsbereit. Um auf die Oberfläche zuzugreifen, gehen Sie in Ihrem Webbrowser zu dem Domainnamen oder der öffentlichen IP-Adresse Ihres Servers, gefolgt von /phpmyadmin :
http://server_domain_or_IP/phpmyadmin
Um sich anzumelden, verwenden Sie ein Set von Anmeldeinformationen für einen gültigen MySQL-Benutzer. Zum Beispiel ist der root-Benutzer und das MySQL-Verwaltungspasswort eine gute Wahl, um zu beginnen. Sie sollten dann in der Lage sein, auf die Verwaltungsoberfläche zuzugreifen:
Klicken Sie herum, 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 Sie die Standard-phpMyAdmin-URL
Die phpMyAdmin-Installation sollte zu diesem Zeitpunkt vollständig funktionsfähig sein. Durch die Installation einer Weboberfläche haben wir jedoch unseren MySQL-Datenbankserver der Außenwelt ausgesetzt. Aufgrund der Popularität von phpMyAdmin und der großen Menge an Daten, auf die es möglicherweise Zugriff gewährt, sind Installationen wie diese häufige Ziele für Angriffe.
In diesem Abschnitt werden wir unsere Installation "härten" oder absichern, indem wir die URL der Schnittstelle von /phpmyadmin auf etwas Nicht-Standardmäßiges ändern, um einige der automatisierten Bot-Brute-Force-Angriffe zu umgehen.
In einem früheren Schritt haben wir einen symbolischen Link 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, werden wir diesen symbolischen Link umbenennen.
Zuerst navigieren wir zum Nginx-Dokumentenstammverzeichnis, um ein besseres Verständnis für die Änderung zu bekommen, die wir vornehmen werden:
- cd /var/www/html/
- ls -l
Sie erhalten die folgende Ausgabe:
total 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 einen symbolischen Link mit dem Namen phpmyadmin in diesem Verzeichnis haben. Wir können diesen Linknamen in beliebigen Namen ändern. Dies wird wiederum die Zugriffs-URL von phpMyAdmin ändern, was helfen kann, den Endpunkt vor Bots zu verstecken, die hartcodiert sind, um nach gängigen Endpunktnamen (wie "phpmyadmin") zu suchen.
Wählen Sie einen Namen, der den Zweck des Endpunkts verschleiert. In diesem Leitfaden werden wir unseren Endpunkt /nothingtosee nennen, aber Sie sollten einen anderen Namen wählen. Um dies zu erreichen, benennen wir einfach den Link um:
- sudo mv phpmyadmin nothingtosee
- ls -l
Nachdem Sie die obigen Befehle ausgeführt haben, erhalten Sie diese Ausgabe:
total 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
Jetzt, wenn Sie die alte URL aufrufen, erhalten Sie einen 404-Fehler:
http://server_domain_or_IP/phpmyadmin
Jetzt ist Ihre phpMyAdmin-Oberfläche unter der neuen URL verfügbar, die wir gerade konfiguriert haben:
http://server_domain_or_IP/nothingtosee
Wir können unsere phpMyAdmin-Installation jetzt weiter absichern, indem wir ein Authentifizierungsgateway einrichten.
Schritt 3 — Richten Sie ein Nginx-Authentifizierungsgateway ein
Das nächste Feature, das wir einrichten werden, ist eine Authentifizierungsaufforderung, die ein Benutzer besteht, bevor er jemals den phpMyAdmin-Loginbildschirm sieht. Die meisten Webserver, einschließlich Nginx, bieten diese Funktionalität nativ an. Wir müssen lediglich unsere Nginx-Konfigurationsdatei mit den Details ändern.
Bevor wir dies tun, werden wir eine Passwortdatei erstellen, die die Authentifizierungsanmeldeinformationen speichert. Nginx erfordert, dass Passwörter mit der Funktion crypt() verschlüsselt werden. Die OpenSSL-Suite, die bereits auf Ihrem Server installiert sein sollte, enthält diese Funktionalität.
Um ein verschlüsseltes Passwort zu erstellen, geben Sie ein:
- openssl passwd
Sie werden aufgefordert, das Passwort einzugeben und zu bestätigen, das Sie verwenden möchten. Das Programm zeigt dann eine verschlüsselte Version des Passworts an, die ungefähr so aussieht:
O5az.RSPzd.HE
Kopiere diesen Wert, da du ihn in die Authentifizierungsdatei einfügen musst, die wir erstellen werden.
Jetzt erstellen Sie eine Authentifizierungsdatei. Wir nennen diese Datei pma_pass und platzieren sie im Nginx-Konfigurationsverzeichnis:
- sudo nano /etc/nginx/pma_pass
In dieser Datei geben Sie den Benutzernamen an, den Sie verwenden möchten, gefolgt von einem Doppelpunkt (:), gefolgt von der verschlüsselten Version des Passworts, das Sie von der openssl passwd Utility erhalten haben.
Wir werden unseren Benutzer sammy nennen, aber du solltest einen anderen Benutzernamen wählen. Die Datei sollte so aussehen:
sammy:O5az.RSPzd.HE
Speichern und schließen Sie die Datei, wenn Sie fertig sind.
Jetzt sind wir bereit, unsere Nginx-Konfigurationsdatei zu ändern. Öffnen Sie sie in Ihrem Texteditor, um loszulegen:
- sudo nano /etc/nginx/sites-available/default
Innerhalb dieser Datei müssen wir einen neuen location-Abschnitt hinzufügen. Dies wird auf die location abzielen, die wir für unsere phpMyAdmin-Oberfläche ausgewählt haben (wir haben /nothingtosee in diesem Leitfaden ausgewählt).
Erstellen Sie diesen Abschnitt innerhalb des server-Blocks, aber außerhalb anderer Blöcke. Wir werden unseren neuen location-Block in unserem Beispiel unter dem /-Block einfügen:
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 namens auth_basic auf eine Authentifizierungsnachricht setzen, die unser Prompt den Benutzern anzeigen wird. Wir wollen unauthentifizierten Benutzern nicht mitteilen, was wir schützen, daher geben wir keine spezifischen Details an. Wir werden in unserem Beispiel einfach “Admin Login ” verwenden.
Wir müssen dann eine Variable namens auth_basic_user_file hinzufügen, um unseren Webserver auf die Authentifizierungsdatei zu verweisen, die wir gerade erstellt haben. Nginx wird den Benutzer nach Authentifizierungsdetails fragen und überprüfen, ob die eingegebenen Werte mit dem übereinstimmen, was es in der angegebenen Datei findet.
Nachdem wir fertig sind, sollte die Datei wie folgt aussehen:
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 Authentifizierungstor zu aktivieren, müssen wir den Webserver neu starten:
- sudo service nginx restart
Wenn Sie nun die phpMyAdmin-URL in Ihrem Webbrowser besuchen (falls das Aktualisieren der Seite nicht funktioniert, müssen Sie möglicherweise den Cache leeren oder eine andere Browsersitzung verwenden, wenn Sie bereits phpMyAdmin verwendet haben), sollten Sie nach dem Benutzernamen und Passwort gefragt werden, die Sie in die pma_pass-Datei eingegeben haben:
http://server_domain_or_IP/nothingtosee
Sobald Sie Ihre Anmeldeinformationen eingegeben haben, werden Sie zur Standard-pgMyAdmin-Anmeldeseite weitergeleitet.
Neben der Bereitstellung einer zusätzlichen Sicherheitsebene wird dieses Gateway dazu beitragen, Ihre MySQL-Protokolle von spamhaften Authentifizierungsversuchen sauber zu halten.
Schlussfolgerung
Nach Abschluss dieses Tutorials können Sie Ihre MySQL-Datenbanken nun ü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 Schemata durchsuchen, Abfragen ausführen und neue Datensätze und Strukturen erstellen.




