Tutorial

Installieren und Sichern von phpMyAdmin unter Ubuntu 20.04

UbuntuApachePHPUbuntu 20.04

Eine frühere Version dieses Tutorials wurde von Brennan Bearnes geschrieben.

Einführung

Während viele Benutzer die Funktionalität eines Datenbankverwaltungssystems wie MySQL benötigen, fühlen sie sich möglicherweise nicht wohl, wenn sie nur über die MySQL-Eingabeaufforderung mit dem System interagieren.

phpMyAdmin wurde erstellt, damit Benutzer über eine Weboberfläche mit MySQL interagieren können. In diesem Leitfaden wird erläutert, wie Sie phpMyAdmin installieren und sichern, damit Sie Ihre Datenbanken sicher auf einem Ubuntu 20.04-System verwalten können.

Voraussetzungen

Um diesen Leitfaden abzuschließen, benötigen Sie Folgendes:

Darüber hinaus gibt es wichtige Sicherheitsaspekte bei der Verwendung von Software wie phpMyAdmin, da sie:

  • direkt mit Ihrer MySQL-Installation kommuniziert
  • die Authentifizierung mithilfe von MySQL-Anmeldeinformationen verarbeitet
  • Ergebnisse für beliebige SQL-Abfragen ausführt und sie zurückgibt

Aus diesen Gründen und weil es sich um eine weit verbreitete PHP-Anwendung handelt, die häufig angegriffen wird, sollten Sie phpMyAdmin niemals auf Remote-Systemen über eine einfache HTTP-Verbindung ausführen.

Wenn Sie keine vorhandene Domäne mit einem SSL-/TLS-Zertifikat konfiguriert haben, können Sie diesen Leitfaden zum Sichern von Apache mit Let’s Encrypt unter Ubuntu 20.04 befolgen. Dazu müssen Sie einen Domänennamen registrieren, DNS-Einträge für Ihren Server erstellen und einen virtuellen Apache-Host einrichten.

Schritt 1 — Installieren von phpMyAdmin

Sie können APT verwenden, um phpMyAdmin aus den Standard-Ubuntu-Repositorys zu installieren.

Aktualisieren Sie als Nicht-root sudo-Benutzer den Paketindex Ihres Servers:

  • sudo apt update

Anschließend können Sie das phpmyadmin-Paket installieren. Zusammen mit diesem Paket wird in der offiziellen Dokumentation empfohlen, einige PHP-Erweiterungen auf Ihrem Server zu installieren, um bestimmte Funktionen zu aktivieren und die Leistung zu verbessern.

Wenn Sie das vorausgesetzte LAMP-Stack-Tutorial befolgt haben, wurden mehrere dieser Module zusammen mit dem php-Paket installiert. Es wird jedoch empfohlen, auch diese Pakete zu installieren:

  • php-mbstring: Ein Modul zum Verwalten von Nicht-ASCII-Zeichenfolgen und zum Konvertieren von Zeichenfolgen in verschiedene Codierungen
  • php-zip: Diese Erweiterung unterstützt das Hochladen von .zip-Dateien auf phpMyAdmin
  • php-gd: Aktiviert die Unterstützung für die GD Graphics Library
  • php-json: Bietet PHP Unterstützung für die JSON-Serialisierung
  • php-curl: Ermöglicht PHP die Interaktion mit verschiedenen Servertypen unter Verwendung verschiedener Protokolle

Führen Sie den folgenden Befehl aus, um diese Pakete auf Ihrem System zu installieren. Bitte beachten Sie jedoch, dass Sie für die Installation einige Auswahlmöglichkeiten zum korrekten Konfigurieren von phpMyAdmin benötigen. Wir werden diese Optionen in Kürze durchgehen:

  • sudo apt install phpmyadmin php-mbstring php-zip php-gd php-json php-curl

Hier sind die Optionen, die Sie auswählen sollten, wenn Sie dazu aufgefordert werden, um Ihre Installation korrekt zu konfigurieren:

  • Wählen Sie für die Serverauswahl apache2 Warnung: Wenn die Eingabeaufforderung angezeigt wird, wird „apache2“ markiert, aber nicht ausgewählt. Wenn Sie nicht SPACE drücken, um Apache auszuwählen, verschiebt das Installationsprogramm die erforderlichen Dateien während der Installation nicht. Drücken Sie SPACE, TAB und dann ENTER, um Apache auszuwählen.
  • Wählen Sie Yes, wenn Sie gefragt werden, ob dbconfig-common zum Einrichten der Datenbank verwendet werden soll.
  • Sie werden dann aufgefordert, ein MySQL-Anwendungspasswort für phpMyAdmin auszuwählen und zu bestätigen

Hinweis: Angenommen, Sie haben MySQL installiert, indem Sie Schritt 2 des vorausgesetzten LAMP-Stack-Tutorials ausgeführt haben, haben Sie möglicherweise beschlossen, das Plugin Validate Passwort zu aktivieren. Zum Zeitpunkt dieses Schreibens löst das Aktivieren dieser Komponente einen Fehler aus, wenn Sie versuchen, ein Passwort für den Benutzer phpmyadmin festzulegen:

Fehler bei der Überprüfung des phpMyAdmin-Passworts

Um dies zu beheben, wählen Sie die Option abort, um den Installationsvorgang zu stoppen. Öffnen Sie dann Ihre MySQL-Eingabeaufforderung:

  • sudo mysql

Oder, wenn Sie die Passwortauthentifizierung für den MySQL-root-Benutzer aktiviert haben, führen Sie diesen Befehl aus und geben Sie dann Ihr Passwort ein, wenn Sie dazu aufgefordert werden:

  • mysql -u root -p

Führen Sie bei der Eingabeaufforderung den folgenden Befehl aus, um die Komponente Validate Passwort zu deaktivieren. Beachten Sie, dass dies nicht zu einer Deinstallation führt, sondern nur das Laden der Komponente auf Ihren MySQL-Server verhindert:

  • UNINSTALL COMPONENT "file://component_validate_password";

Danach können Sie den MySQL-Client schließen:

  • exit

Versuchen Sie dann erneut, das phpmyadmin-Paket zu installieren, und es funktioniert wie erwartet:

  • sudo apt install phpmyadmin

Sobald phpMyAdmin installiert ist, können Sie die MySQL-Eingabeaufforderung erneut mit sudo mysql oder mysql -u root -p öffnen und anschließend den folgenden Befehl ausführen, um die Komponente Validate Passwort wieder zu aktivieren:

  • INSTALL COMPONENT "file://component_validate_password";

Der Installationsvorgang fügt die Apache-Konfigurationsdatei phpMyAdmin in das Verzeichnis /etc/apache2/conf-enabled/ ein, wo sie automatisch gelesen wird. Um die Konfiguration von Apache und PHP für die Arbeit mit phpMyAdmin abzuschließen, müssen Sie in diesem Abschnitt des Tutorials nur noch explizit die mbstring-PHP-Erweiterung aktivieren. Geben Sie dazu Folgendes ein:

  • sudo phpenmod mbstring

Starten Sie anschließend Apache neu, damit Ihre Änderungen erkannt werden:

  • sudo systemctl restart apache2

phpMyAdmin ist jetzt installiert und konfiguriert, um mit Apache zu arbeiten. Bevor Sie sich jedoch anmelden und mit Ihren MySQL-Datenbanken interagieren können, müssen Sie sicherstellen, dass Ihre MySQL-Benutzer über die für die Interaktion mit dem Programm erforderlichen Berechtigungen verfügen.

Schritt 2 — Anpassen der Benutzerauthentifizierung und -berechtigungen

Als Sie phpMyAdmin auf Ihrem Server installiert haben, wurde automatisch ein Datenbankbenutzer namens phpmyadmin erstellt, der bestimmte zugrunde liegende Prozesse für das Programm ausführt. Anstatt sich als dieser Benutzer mit dem Administratorpasswort anzumelden, das Sie während der Installation festgelegt haben, wird empfohlen, dass Sie sich entweder als Ihr MySQL-Benutzer root oder als ein Benutzer anmelden, der Datenbanken über die phpMyAdmin-Schnittstelle verwaltet.

Konfigurieren des Passwortzugriffs für das MySQL root-Konto

In Ubuntu-Systemen, die MySQL 5.7 (oder höher) ausführen, ist der MySQL-Benutzer root so konfiguriert, dass er nicht per Passwort, sondern standardmäßig mit dem Plugin auth_socket authentifiziert wird. Dadurch entsteht in vielen Fällen mehr Sicherheit und Benutzerfreundlichkeit, es können Aufgaben aber auch komplizierter werden, wenn Sie einem externen Programm – wie phpMyAdmin – den Zugriff auf den Benutzer erlauben müssen.

Um sich bei phpMyAdmin als MySQL-Benutzer root anzumelden, müssen Sie die Authentifizierungsmethode von auth_socket auf eine umstellen, die ein Passwort verwendet, sofern Sie dies noch nicht getan haben. Öffnen Sie dazu die MySQL-Eingabeaufforderung auf Ihrem Terminal:

  • sudo mysql

Prüfen Sie dann mit folgendem Befehl, welches Authentifizierungsverfahren Ihre MySQL-Benutzerkonten verwenden:

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | caching_sha2_password | localhost | | phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | caching_sha2_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec)

In diesem Beispiel können Sie sehen, dass der root-Benutzer über das auth_socket-Plugin authentifiziert wird. Um das root-Konto zur Authentifizierung mit einem Passwort konfigurieren zu können, führen Sie den folgenden ALTER USER-Befehl aus. Denken Sie daran, password in ein starkes Passwort Ihrer Wahl zu ändern:

  • ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

Anmerkung: Die vorherige ALTER USER-Anweisung konfiguriert den MySQL-Benutzer root so, dass er mit dem Plugin caching_sha2_password authentifiziert wird. Gemäß der offiziellen MySQL-Dokumentation ist caching_sha2_password das bevorzugte Authentifizierungs-Plugin von MySQL, da es eine sicherere Passwortverschlüsselung bietet als das ältere, aber immer noch verbreitete Plugin mysql_native_password.

Einige Versionen von PHP funktionieren jedoch nicht zuverlässig mit caching_sha2_password. PHP hat gemeldet, dass dieses Problem ab PHP 7.4 behoben wurde. Wenn Sie jedoch später beim Versuch, sich bei phpMyAdmin anzumelden, auf einen Fehler stoßen, möchten Sie möglicherweise root so einstellen, dass er sich stattdessen mit mysql_native_password authentifiziert:

  • ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Prüfen Sie dann die von Ihren Benutzern verwendeten Authentifizierungsmethoden erneut, um zu bestätigen, dass root nicht mehr über das auth_socket-Plugin authentifiziert wird:

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *DE06E242B88EFB1FE4B5083587C260BACB2A6158 | caching_sha2_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | caching_sha2_password | localhost | | phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | caching_sha2_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec)

An dieser Ausgabe können Sie erkennen, dass sich der Benutzer root mit einem Passwort authentifiziert. Sie können sich jetzt als root-Benutzer mit dem hier festgelegten Passwort bei der phpMyAdmin-Oberfläche anmelden.

Konfigurieren des Passwortzugriffs für einen dedizierten MySQL-Benutzer

Manchmal ist es hilfreicher, sich über einen dedizierten Benutzer mit phpMyAdmin zu verbinden. Öffnen Sie dazu die MySQL-Shell erneut:

  • sudo mysql

Wenn Sie die Passwortauthentifizierung für Ihren root-Benutzer aktiviert haben, wie im vorherigen Abschnitt beschrieben, müssen Sie den folgenden Befehl ausführen und Ihr Passwort eingeben, wenn Sie dazu aufgefordert werden, um eine Verbindung herzustellen:

  • mysql -u root -p

Erstellen Sie von dort einen neuen Benutzer und geben Sie ihm ein starkes Passwort:

  • CREATE USER 'sammy'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

Anmerkung: Je nachdem, welche Version von PHP Sie installiert haben, möchten Sie Ihren neuen Benutzer möglicherweise so einstellen, dass er sich mit mysql_native_password authentifiziert, anstatt mit caching_sha2_password:

  • ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Erteilen Sie dann Ihrem neuen Benutzer die entsprechenden Berechtigungen. Mit diesem Befehl können Sie dem Benutzer zum Beispiel Berechtigungen für alle Tabellen in der Datenbank sowie Berechtigungen zum Hinzufügen, Ändern und Entfernen von Benutzerberechtigungen erteilen:

  • GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

Beenden Sie anschließend die MySQL-Shell:

  • exit

Sie können jetzt auf die Weboberfläche zugreifen, indem Sie den Domänennamen oder die öffentliche IP-Adresse Ihres Servers gefolgt von /phpmyadmin aufrufen:

https://your_domain_or_IP/phpmyadmin

phpMyAdmin-Anmeldebildschirm

Melden Sie sich an der Oberfläche an, entweder als root oder mit dem neuen Benutzernamen und Passwort, das Sie gerade konfiguriert haben.

Wenn Sie sich anmelden, sehen Sie die Benutzeroberfläche, die ungefähr so aussieht:

phpMyAdmin-Benutzeroberfläche

Nachdem Sie nun eine Verbindung zu phpMyAdmin herstellen und mit ihm interagieren können, müssen Sie nur noch die Sicherheit Ihres Systems erhöhen, um es vor Angreifern zu schützen.

Schritt 3 — Sichern Ihrer phpMyAdmin-Instanz

Aufgrund seiner Allgegenwart ist phpMyAdmin ein beliebtes Ziel für Angreifer, und Sie sollten besonders darauf achten, unbefugten Zugriff zu verhindern. Eine Möglichkeit, dies zu tun, besteht darin, ein Gateway vor der gesamten Anwendung zu platzieren, indem Sie die integrierten .htaccess-Authentifizierungs- und Autorisierungsfunktionen von Apache verwenden.

Dazu müssen Sie zuerst die Verwendung von .htaccess-Dateiüberschreibungen aktivieren, indem Sie die Apache-Konfigurationsdatei Ihrer phpMyAdmin-Installation bearbeiten.

Verwenden Sie Ihren bevorzugten Texteditor, um die Datei phpmyadmin.conf zu bearbeiten, die in Ihrem Apache-Konfigurationsverzeichnis abgelegt wurde. Wir verwenden hier nano:

  • sudo nano /etc/apache2/conf-available/phpmyadmin.conf

Fügen Sie eine AllowOverride All-Anweisung im Abschnitt <Directory/usr/share/phpmyadmin> der Konfigurationsdatei wie folgt hinzu:

/etc/apache2/conf-available/phpmyadmin.conf
<Directory /usr/share/phpmyadmin>
    Options FollowSymLinks
    DirectoryIndex index.php
    AllowOverride All
    . . .

Wenn Sie diese Zeile hinzugefügt haben, speichern und schließen Sie die Datei. Wenn Sie nano zum Bearbeiten der Datei verwendet haben, drücken Sie dazu STRG + X, Y und dann ENTER.

Starten Sie Apache neu, um die vorgenommenen Änderungen zu implementieren:

  • sudo systemctl restart apache2

Nachdem Sie die Verwendung von .htaccess-Dateien für Ihre Anwendung aktiviert haben, müssen Sie eine erstellen, um tatsächlich Sicherheit zu implementieren.

Damit dies erfolgreich ist, muss die Datei im Anwendungsverzeichnis erstellt werden. Sie können die erforderliche Datei erstellen und in Ihrem Texteditor mit root-Berechtigungen öffnen, indem Sie Folgendes eingeben:

  • sudo nano /usr/share/phpmyadmin/.htaccess

Geben Sie in diese Datei die folgenden Informationen ein:

/usr/share/phpmyadmin/.htaccess
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user

Hier folgt, was jede dieser Zeilen bedeutet:

  • AuthType Basic: Diese Zeile gibt den Authentifizierungstyp an, den Sie implementieren. Dieser Typ implementiert die Passwortauthentifizierung mithilfe einer Passwortdatei.
  • AuthName: Hiermit wird die Nachricht für das Authentifizierungsdialogfeld festgelegt. Sie sollten dieses Generikum beibehalten, damit nicht autorisierte Benutzer keine Informationen darüber erhalten, was geschützt wird.
  • AuthUserFile: Hiermit wird der Speicherort der Passwortdatei festgelegt, die für die Authentifizierung verwendet wird. Dies sollte außerhalb der Verzeichnisse liegen, die bereitgestellt werden. Wir erstellen diese Datei in Kürze.
  • Require valid-user: Hiermit wird angegeben, dass nur authentifizierten Benutzern Zugriff auf diese Ressource gegeben werden soll. Dies verhindert, dass nicht autorisierte Benutzer eintreten.

Wenn Sie dies abgeschlossen haben, speichern und schließen Sie die Datei.

Der Speicherort, den Sie für Ihre Passwortdatei ausgewählt haben, war /etc/phpmyadmin/.htpasswd. Sie können diese Datei jetzt erstellen und mit dem Dienstprogramm htpasswd an einen Erstbenutzer übergeben:

  • sudo htpasswd -c /etc/phpmyadmin/.htpasswd username

Sie werden aufgefordert, ein Passwort für den von Ihnen erstellten Benutzer auszuwählen und zu bestätigen. Anschließend wird die Datei mit dem von Ihnen eingegebenen Hash-Passwort erstellt.

Wenn Sie einen zusätzlichen Benutzer eingeben möchten, müssen Sie dies wie folgt ohne das Flag -c tun:

  • sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

Wenn Sie jetzt auf Ihr Unterverzeichnis phpMyAdmin zugreifen, werden Sie aufgefordert, den zusätzlichen Kontonamen und das Passwort einzugeben, die Sie gerade konfiguriert haben:

https://domain_name_or_IP/phpmyadmin

phpMyAdmin-Apache-Passwort

Nach Eingabe der Apache-Authentifizierung werden Sie zur regulären phpMyAdmin-Authentifizierungsseite weitergeleitet, auf der Sie Ihre MySQL-Anmeldeinformationen eingeben können. Durch Hinzufügen eines zusätzlichen Satzes von Nicht-MySQL-Anmeldeinformationen bieten Sie Ihrer Datenbank eine zusätzliche Sicherheitsebene. Dies ist wünschenswert, da phpMyAdmin in der Vergangenheit anfällig für Sicherheitsbedrohungen war.

Zusammenfassung

Sie sollten jetzt phpMyAdmin konfiguriert und für die Verwendung auf Ihrem Ubuntu 20.04-Server bereit haben. Über diese Schnittstelle können Sie Datenbanken, Benutzer und Tabellen erstellen sowie die üblichen Vorgänge wie das Löschen und Ändern von Strukturen und Daten ausführen.

0 Comments

Creative Commons License