So installieren und sichern Sie phpMyAdmin mit Nginx auf einem CentOS 7-Server

Einführung

Relationale Datenbankverwaltungssysteme wie MySQL und MariaDB werden für einen Großteil der Websites und Anwendungen benötigt. Allerdings fühlen sich nicht alle Benutzer in der Lage, ihre Daten über die Befehlszeile zu verwalten.

Um dieses Problem zu lösen, wurde ein Projekt namens phpMyAdmin erstellt, um eine Alternative in Form einer webbasierten Verwaltungsoberfläche anzubieten. In diesem Handbuch wird gezeigt, wie Sie eine phpMyAdmin-Konfiguration auf einem CentOS 7-Server installieren und sichern. Wir werden dieses Setup auf dem Nginx-Webserver aufbauen, der ein gutes Leistungsprofil aufweist und mit hohen Lasten besser umgehen kann als einige andere Webserver.

Voraussetzungen

Bevor wir beginnen, müssen einige Anforderungen geklärt werden.

Um sicherzustellen, dass Sie eine solide Basis haben, auf der Sie dieses System aufbauen können, sollten Sie unsere initial server setup guide for durcharbeiten CentOS 7. Dies führt Sie unter anderem durch das Einrichten eines Nicht-Root-Benutzers mit "+ sudo +" - Zugriff für Verwaltungsbefehle.

Die zweite Voraussetzung, die erfüllt sein muss, um in diesem Handbuch zu starten, ist die Installation eines LEMP-Stacks (Linux, Nginx, MariaDB und PHP) auf Ihrem CentOS 7-Server. Dies ist die Plattform, auf der wir unsere phpMyAdmin-Schnittstelle bereitstellen (MariaDB ist auch die Datenbankverwaltungssoftware, die wir verwalten möchten). Wenn Sie noch keine LEMP-Installation auf Ihrem Server haben, lesen Sie unser Tutorial unter https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on -centos-7 [LEMP unter CentOS 7 installieren].

Befindet sich Ihr Server in einem ordnungsgemäß funktionierenden Zustand, nachdem Sie diese Anleitungen befolgt haben, können Sie mit dem Rest dieser Seite fortfahren.

Erster Schritt - Installieren Sie phpMyAdmin

Mit unserer bereits vorhandenen LEMP-Plattform können wir sofort mit der Installation der phpMyAdmin-Software beginnen. Leider ist phpMyAdmin im Standard-Repository von CentOS 7 nicht verfügbar.

Um die benötigten Pakete zu erhalten, müssen wir unserem System ein zusätzliches Repo hinzufügen. Das EPEL-Repository ( Extra -Pakete für Enterprise Linux) enthält viele zusätzliche Pakete, einschließlich des von uns gesuchten Pakets phpMyAdmin.

Glücklicherweise wurde das Hinzufügen des EPEL-Repositorys erheblich vereinfacht. Es gibt tatsächlich ein Paket mit dem Namen "+ epel-release +", das unseren Paketmanager für die Verwendung der EPEL-Repos neu konfiguriert.

Wir können das jetzt installieren, indem wir Folgendes eingeben:

sudo yum install epel-release

Nachdem Sie nun Zugriff auf das EPEL-Repository haben, können Sie phpMyAdmin über yum installieren:

sudo yum install phpmyadmin

Die Installation wird nun abgeschlossen. Damit der Nginx-Webserver die phpMyAdmin-Dateien korrekt findet und bereitstellt, müssen Sie lediglich einen symbolischen Link von den Installationsdateien zu unserem Nginx-Dokumentenstammverzeichnis erstellen, indem Sie Folgendes eingeben:

sudo ln -s /usr/share/phpMyAdmin /usr/share/nginx/html

Wir sollten auch unseren PHP-Prozessor neu starten, um sicherzustellen, dass er die zusätzlichen PHP-Module laden kann, die wir installiert haben:

sudo systemctl restart php-fpm

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

http:///phpMyAdmin

Verwenden Sie zum Anmelden ein Benutzername / Passwort-Paar eines gültigen MariaDB-Benutzers. Der Benutzer + root + und das Administratorkennwort MariaDB sind eine gute Wahl, um loszulegen. Sie können dann auf die Verwaltungsoberfläche zugreifen:

image: https: //assets.digitalocean.com/articles/phpmyadmin_lemp_centos7/main_page.png [phpMyAdmin admin interface]

Klicken Sie sich durch, um sich mit der Benutzeroberfläche vertraut zu machen. Im nächsten Abschnitt werden wir Schritte unternehmen, um unsere neue Schnittstelle zu sichern.

Zweiter Schritt - Sichern Sie Ihre phpMyAdmin-Instanz

Die auf unserem Server installierte phpMyAdmin-Instanz sollte zu diesem Zeitpunkt vollständig nutzbar sein. Durch die Installation eines Webinterfaces haben wir unser MySQL-System jedoch der Außenwelt zugänglich gemacht.

Selbst mit dem mitgelieferten Authentifizierungsbildschirm ist dies ein ziemliches Problem. Aufgrund der Popularität von phpMyAdmin in Verbindung mit der großen Datenmenge, auf die es Zugriff bietet, sind Installationen wie diese häufige Ziele für Angreifer.

Wir werden zwei einfache Strategien implementieren, um die Chancen zu verringern, dass unsere Installation gezielt und kompromittiert wird. Wir werden die Position der Schnittstelle von "+ / phpMyAdmin +" auf etwas anderes ändern, um einige der automatisierten Bot-Brute-Force-Versuche zu umgehen. Wir werden auch ein zusätzliches Authentifizierungs-Gateway auf Webserverebene erstellen, das übergeben werden muss, bevor der phpMyAdmin-Anmeldebildschirm angezeigt wird.

Ändern des Zugriffsorts der Anwendung

Damit unser Nginx-Webserver unsere phpMyAdmin-Dateien finden und bereitstellen kann, haben wir in einem früheren Schritt eine symbolische Verknüpfung vom phpMyAdmin-Verzeichnis zu unserem Dokumentenstamm erstellt.

Um die URL zu ändern, über die auf unsere phpMyAdmin-Oberfläche zugegriffen werden kann, müssen wir lediglich den symbolischen Link umbenennen. Wechseln Sie in das Stammverzeichnis des Nginx-Dokuments, um eine bessere Vorstellung davon zu erhalten, was wir tun:

cd /usr/share/nginx/html
ls -l
-rw-r--r-- 1 root root 537 Aug  5 08:15 50x.html
-rw-r--r-- 1 root root 612 Aug  5 08:15 index.html
lrwxrwxrwx 1 root root  21 Aug  6 17:29  -> /usr/share/phpMyAdmin

Wie Sie sehen, befindet sich in diesem Verzeichnis ein symbolischer Link mit dem Namen "+ phpMyAdmin +". Wir können diesen Linknamen nach Belieben ändern. Dadurch wird der Ort geändert, an dem über einen Browser auf phpMyAdmin zugegriffen werden kann. Dies kann dazu beitragen, den Zugriffspunkt vor hartcodierten Bots zu verbergen.

Wählen Sie einen Namen, der nicht den Zweck des Standorts angibt. In diesem Handbuch benennen wir unseren Zugriffspunkt "+ / nothingtosee +". Um dies zu erreichen, benennen wir den Link einfach um:

sudo mv phpMyAdmin
ls -l
total 8
-rw-r--r-- 1 root root 537 Aug  5 08:15 50x.html
-rw-r--r-- 1 root root 612 Aug  5 08:15 index.html
lrwxrwxrwx 1 root root  21 Aug  6 17:29 nothingtosee -> /usr/share/phpMyAdmin

Wenn Sie nun zum vorherigen Speicherort Ihrer phpMyAdmin-Installation wechseln, wird eine 404-Fehlermeldung angezeigt:

http:///phpMyAdmin

image: https: //assets.digitalocean.com/articles/phpmyadmin_lemp_centos7/404_error.png [phpMyAdmin 404 error]

Ihre phpMyAdmin-Oberfläche wird jedoch an dem neuen Ort verfügbar sein, den wir ausgewählt haben:

http:///nothingtosee

Einrichten eines Web Server Authentication Gate

Die nächste Funktion, die wir für unsere Installation wollten, war eine Authentifizierungsaufforderung, die ein Benutzer bestehen muss, bevor er den Anmeldebildschirm von phpMyAdmin sehen kann.

Glücklicherweise bieten die meisten Webserver, einschließlich Nginx, diese Funktion von Haus aus an. Wir müssen nur 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 Funktion + crypt () + 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:

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

Erstellen Sie nun eine Authentifizierungsdatei. Wir werden diese Datei "+ pma_pass +" aufrufen und sie in das Nginx-Konfigurationsverzeichnis legen:

sudo nano /etc/nginx/pma_pass

In dieser Datei müssen Sie lediglich den Benutzernamen angeben, den Sie verwenden möchten, gefolgt von einem Doppelpunkt (:), gefolgt von der verschlüsselten Version Ihres Kennworts, das Sie vom Dienstprogramm "+ openssl passwd +" erhalten haben.

Wir werden unseren Benutzer "+ demo +" nennen, aber Sie sollten einen anderen Benutzernamen wählen. Die Datei für dieses Handbuch sieht folgendermaßen aus:

:

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

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

sudo nano /etc/nginx/conf.d/default.conf

In dieser Datei müssen wir einen neuen Standortabschnitt hinzufügen. Dies richtet sich nach dem Ort, den wir für unsere phpMyAdmin-Oberfläche ausgewählt haben (wir haben in diesem Handbuch "+ / nothingtosee +" ausgewählt).

Erstellen Sie diesen Abschnitt innerhalb des Blocks "+ server ", jedoch außerhalb aller anderen Blöcke. In unserem Beispiel werden wir unseren neuen Location-Block unter den " location / +" -Block setzen:

server {
   . . .

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




   . . .
}

Innerhalb dieses Blocks müssen wir den Wert einer Direktive mit dem Namen "+ auth_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".

Wir müssen dann eine Direktive mit dem Namen "+ auth_basic_user_file +" verwenden, um unseren Webserver auf die von uns 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 so aussehen:

server {
   . . .

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

   location /nothingtosee {


   }

   . . .
}

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

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

sudo systemctl restart nginx

Wenn wir jetzt unseren phpMyAdmin-Speicherort in unserem Webbrowser besuchen (Sie müssen möglicherweise Ihren Cache leeren oder eine andere Browsersitzung verwenden, wenn Sie bereits phpMyAdmin verwendet haben), sollten Sie aufgefordert werden, den Benutzernamen und das Kennwort einzugeben, die Sie dem `+ hinzugefügt haben pma_pass + `file:

http:///nothingtosee

Sobald Sie Ihre Anmeldeinformationen eingegeben haben, werden Sie zur normalen Anmeldeseite von phpMyAdmin weitergeleitet. Diese zusätzliche Schutzebene hilft, Ihre MySQL-Protokolle von Authentifizierungsversuchen freizuhalten, zusätzlich zu dem zusätzlichen Sicherheitsvorteil.

Fazit

Sie können Ihre MySQL-Datenbanken jetzt über eine einigermaßen sichere Weboberfläche verwalten. Diese Benutzeroberfläche stellt die meisten Funktionen zur Verfügung, die über die MySQL-Eingabeaufforderung verfügbar sind. Sie können Datenbanken und Schemata anzeigen, Abfragen ausführen und neue Datensätze und Strukturen erstellen.