MySQL Workbench (Bild © Eigene)
Während sich viele Installationsanleitungen ausschließlich darauf konzentrieren, den Dienst zum Laufen zu bringen, ist der anfängliche Absicherungsprozess entscheidend. Das wichtigste Tool für diesen Zweck ist das mysql_secure_installation-Skript.
Absicherungsablauf von mysql_secure_installation
Das Dienstprogramm mysql_secure_installation wurde entwickelt, um Administratoren durch eine Reihe von Sicherheitsabfragen zu führen, bei denen die häufigsten Standard-Sicherheitslücken beseitigt werden. Um den Vorgang zu starten, wird der folgende Befehl mit Administratorrechten ausgeführt:
sudo mysql_secure_installation
Das Skript folgt einer schrittweisen Logik, um die Umgebung abzusichern:
1. Authentifizierung des Root-Kontos
Der Vorgang beginnt mit der Überprüfung des aktuellen Root-Passworts. Bei Neuinstallationen, bei denen noch kein Passwort festgelegt wurde, drückt der Benutzer einfach erst einmal Enter. Das Skript fordert den Admin daraufhin auf, ein sicheres Root-Passwort festzulegen. Das ist das absolute Mindestmaß an Sicherheit.
2. Beseitigung anonymer Benutzer
Standardmäßig enthalten einige MySQL-Installationen anonyme Benutzerkonten, um erste Tests zu vereinfachen. Diese Konten ermöglichen es jedem Benutzer, sich ohne registriertes Konto bei der Datenbank anzumelden. In einer Produktionsumgebung stellen diese eine erhebliche Sicherheitslücke dar und werden in diesem Schritt des Skripts entfernt.
3. Einschränkung des Root-Zugriffs auf „localhost“
Um Brute-Force-Angriffe aus externen Netzwerken zu verhindern, fragt das Skript, ob die Remote-Root-Anmeldung deaktiviert werden soll. Indem der Root-Benutzer auf localhost beschränkt wird, stellt der Administrator sicher, dass auf das Root-Konto nur von der VM aus zugegriffen werden kann, auf der die Datenbank gehostet wird.
4. Entfernung der Testdatenbank
MySQL wird oft mit einer Standarddatenbank namens test ausgeliefert. Auf diese Datenbank haben alle Benutzer Zugriff - auch anonyme. Das Tool entfernt diese Datenbank und löscht alle Berechtigungen, die Benutzern den Zugriff auf Datenbanken mit Namen ermöglichen, die mit test_ beginnen.
5. Fertigstellung der Berechtigungstabellen
Der letzte Schritt besteht darin, die Berechtigungstabellen neu zu laden. Dadurch wird sichergestellt, dass alle Änderungen, darunter das neue Root-Passwort und die Entfernung anonymer Benutzer, erst wirksam werden, ohne dass ein vollständiger Neustart des MySQL-Dienstes erforderlich ist – was man aber gerne auch machen kann.
Erweiterte Konfiguration und technische Optionen
Für Umgebungen, die spezifische Verbindungsanforderungen oder automatisierte Bereitstellungen erfordern, unterstützt mysql_secure_installation verschiedene Befehlszeilenargumente.
Passwortüberprüfung
Das Tool ist mit der Komponente validate_password integriert. Sollte dieses Plugin noch nicht aktiv sein, fordert das Skript den Benutzer auf, es zu installieren. Sobald es aktiviert ist, müssen alle während des Vorgangs eingegebenen Passwörter bestimmte Sicherheitsanforderungen erfüllen (z. B. Mindestlänge, Zeichenkombination), um die Verwendung schwacher Anmeldedaten zu verhindern.
Verbindungsparameter
Administratoren können den Host und den Port angeben, wenn der MySQL-Server nicht in der standardmäßigen lokalen Konfiguration läuft. Um beispielsweise einen Server über IPv6 mit Port 3307 anzusteuern:
mysql_secure_installation --host=::1 --port=3307
Referenz zu technischen Optionen
Das Skript unterstützt mehrere Optionen, um sein Verhalten anzupassen:
- --user: Gibt das MySQL-Konto an, das für die Verbindung verwendet werden soll.
- --protocol: Legt das Transportprotokoll fest (TCP, SOCKET, PIPE oder MEMORY).
- --use-default: Führt das Skript im nicht-interaktiven Modus aus, was für automatisierte Bereitstellungsskripte unerlässlich ist.
- --ssl-mode: Legt den gewünschten Sicherheitsstatus der Verbindung zum Server fest und stellt sicher, dass die übertragenen Daten verschlüsselt werden.
- --no-defaults: Verhindert, dass das Dienstprogramm Optionsdateien liest, was bei der Fehlerbehebung von Konfigurationskonflikten hilfreich ist.
Häufige Fragen mit Antworten
Welchen Einfluss hat die Komponente „validate_password“ auf die Installation?
Die validate_password-Komponente fungiert als Gatekeeper. Wenn sie aktiv ist, verhindert sie, dass der Administrator ein zu einfaches Passwort festlegt. Versucht ein Benutzer, ein Passwort festzulegen, das die Komplexitätsprüfung nicht besteht, lehnt das Dienstprogramm die Eingabe ab und fordert eine sicherere Zeichenfolge an, wodurch ein grundlegender Sicherheitsstandard durchgesetzt wird.
Lässt sich dieser Vorgang für mehrere Server automatisieren?
Ja. Durch Verwendung des --use-default-Flags kann das Skript ohne manuelle Benutzereingriffe ausgeführt werden. Dies wird in der Regel mit einer Konfigurationsdatei in der ** [mysql_secure_installation] **-Gruppe kombiniert, um sicherzustellen, dass alle Server in einem Cluster mit denselben Parametern abgesichert werden.
Warum muss gerade die Testdatenbank entfernt werden?
Die Testdatenbank ist eine veraltete Funktion, die zu Demonstrationszwecken gedacht ist. Da sie so konfiguriert ist, dass sie global zugänglich ist, kann sie von Angreifern als Sandbox genutzt werden, um SQL-Injection-Techniken zu testen oder Informationen über die Version und Konfiguration des Servers zu sammeln, ohne dass die üblichen Alarme für unbefugten Zugriff ausgelöst werden.
Wie wirkt sich das Deaktivieren der Remote-Root-Anmeldung auf die Datenbankverwaltung aus?
Das Deaktivieren der Remote-Root-Anmeldung verhindert nicht den Fernzugriff auf die Datenbank; es verhindert lediglich, dass das root-Konto darauf zugreift. Der professionelle Standard sieht vor, ein dediziertes Benutzerkonto mit eingeschränkten Berechtigungen für Remote-Anwendungen anzulegen und das Root-Konto streng für lokale Verwaltungsaufgaben zu reservieren.
Was ist zu tun, wenn das Root-Passwort während dieses Vorgangs vergessen wird?
Wenn das Passwort verloren geht, muss der Administrator den MySQL-Dienst im abgesicherten Modus neu starten (mit der Option --skip-grant-tables). Dies ermöglicht den Zugriff auf die Datenbank ohne Passwort, wobei das Root-Passwort mithilfe einer UPDATE-Anweisung in der Tabelle mysql.user zurückgesetzt werden kann. Danach sollte der Dienst normal neu gestartet und mysql_secure_installation erneut ausgeführt werden.
