Eine frühere Version dieses Tutorials wurde von Brennan Bearnes geschrieben.
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.
Um diesen Leitfaden abzuschließen, benötigen Sie Folgendes:
ufw
konfigurierte Firewall verfügen. Um dies einzurichten, folgen Sie unserem Leitfaden für die Ersteinrichtung des Servers für Ubuntu 18.04.Darüber hinaus gibt es wichtige Sicherheitsaspekte bei der Verwendung von Software wie phpMyAdmin, da sie:
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.
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 Codierungenphp-zip
: Diese Erweiterung unterstützt das Hochladen von .zip
-Dateien auf phpMyAdminphp-gd
: Aktiviert die Unterstützung für die GD Graphics Libraryphp-json
: Bietet PHP Unterstützung für die JSON-Serialisierungphp-curl
: Ermöglicht PHP die Interaktion mit verschiedenen Servertypen unter Verwendung verschiedener ProtokolleFü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:
apache2
<$>[warning]
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.
<$>Yes
, wenn Sie gefragt werden, ob dbconfig-common
zum Einrichten der Datenbank verwendet werden soll.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:
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.
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.
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.
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
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:
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.
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:
<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:
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
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.
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.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!