Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Sicherung des MySQL-Servers

MySQL

MySQL ist ein relationales Open-Source-Datenbankverwaltungssystem. Diese Anleitung zeigt Ihnen, wie Sie einen MySQL-Server sichern und prüfen. Der Name ist eine Kombination aus „My“, dem Namen der Tochter des Mitbegründers Michael Widenius, und „SQL“, der Abkürzung für Structured Query Language.

Bevor Sie beginnen

  1. Stellen Sie sicher, dass Sie die Handbücher „Erste Schritte“ und „Sichern Ihres Servers“ befolgt haben. Stellen Sie sicher, dass der Hostname von Linode festgelegt ist.

    Überprüfen Sie den Hostnamen Ihres Linode. Der erste Befehl sollte Ihren kurzen Hostnamen und der zweite Ihren vollständig qualifizierten Domänennamen (FQDN) anzeigen.

    hostname
    hostname -f
    
    Hinweis Wenn Sie einen registrierten Domainnamen für Ihre Website haben, fügen Sie die Domain dem Linode-Server hinzu, auf dem Sie den LAMP-Stack installieren möchten. Wenn Sie keinen registrierten Domänennamen haben, ersetzen Sie example.com mit der IP-Adresse des Linode-Servers in der folgenden Anleitung.
  2. Aktualisieren Sie Ihr System:

    sudo yum update
    
    Hinweis Dieses Handbuch wurde für Nicht-Root-Benutzer geschrieben. Befehlen, die erhöhte Berechtigungen erfordern, wird das Präfix sudo vorangestellt . Wenn Sie mit sudo nicht vertraut sind Befehl finden Sie in unserem Handbuch für Benutzer und Gruppen.
  3. Um MySQL zu sichern und zu auditieren, benötigen Sie einen Linux-Server mit dem MySQL Server Dienste laufen. Informationen zur Installation von MySQL finden Sie unter MySQL installieren

    Hinweis Die Anweisungen in diesem Handbuch basieren auf Ubuntu 18.04, obwohl alle Schritte mit Ausnahme von Paketnamen und Paketmanagern verteilungsunabhängig sind.

Verwenden des sicheren MySQL-Installationsprogramms

Das Paket mysql-server ist mit einem Dienstprogramm namens mysql_secure_installation vorkonfiguriert die verwendet wird, um einen sicheren Startpunkt für den MySQL-Server einzurichten, indem anonyme Benutzer gelöscht werden und Sie die gewünschte Richtlinie für die Passwortstärke festlegen können.

mysql_secure_installation ist ein auf Unix-Systemen verfügbares Shell-Skript, mit dem Sie die MySQL-Installation sichern können, indem Sie Folgendes tun:

  • ein Passwort für Root-Konten festlegen
  • Root-Konten entfernen, auf die von außerhalb des lokalen Hosts zugegriffen werden kann
  • Anonyme Benutzerkonten entfernen
  • Entfernen Sie die Testdatenbank, auf die standardmäßig anonyme Benutzer zugreifen können

Beginnen Sie den Sicherheitsprozess, indem Sie dieses Dienstprogramm sofort nach der Installation von mysql-server ausführen.

  1. Rufen Sie das Dienstprogramm auf, indem Sie den folgenden Befehl ausführen:

     sudo mysql_secure_installation
    
  2. Der Setup-Vorgang beginnt und das Dienstprogramm fordert Sie auf anzugeben, ob Sie das Plugin zur Kennwortvalidierung aktivieren möchten, das zum Testen von Kennwörtern und zur Verbesserung der Sicherheit verwendet wird. Es wird empfohlen, diese Funktion zu aktivieren.

    Securing the MySQL server deployment.
    
    Connecting to MySQL using a blank password.
    
    VALIDATE PASSWORD PLUGIN can be used to test passwords
    and improve security. It checks the strength of password
    and allows the users to set only those passwords which are
    secure enough. Would you like to setup VALIDATE PASSWORD plugin?
    
    Press y|Y for Yes, any other key for No: y

  3. Nachdem Sie das Passwort-Plug-in aktiviert haben, geben Sie Ihre Passwortvalidierungsrichtlinie basierend auf der Stärke der gewünschten Passwörter an.

    There are three levels of password validation policy:
    
    LOW    Length >= 8
    MEDIUM Length >= 8, numeric, mixed case, and special characters
    STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file
    
    Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
    Please set the password for root here.
    
    New password:
    
    Re-enter new password:
    
    Estimated strength of the password: 100
    Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

  4. Entfernen Sie anonyme Benutzer. Dies ist eine wichtige Sicherheitsoption, da Angreifer anonyme Benutzer nutzen können, um Zugriff auf den Datenbankserver zu erlangen.

    By default, a MySQL installation has an anonymous user,
    allowing anyone to log into MySQL without having to have
    a user account created for them. This is intended only for
    testing, and to make the installation go a bit smoother.
    You should remove them before moving into a production
    environment.
    
    Remove anonymous users? (Press y|Y for Yes, any other key for No) : y

  5. Deaktivieren Sie die Root-Anmeldung aus der Ferne. Dies ist eine äußerst wichtige Sicherheitskonfiguration, da sie Angreifer daran hindert, sich aus der Ferne beim MySQL-Server als Root zu authentifizieren oder Brute-Force-Angriffe mit Kennwörtern durchzuführen. Die Remote-Authentifizierung kann auch vollständig deaktiviert werden, wir werden uns im nächsten Abschnitt ansehen, wie das geht.

    Normally, root should only be allowed to connect from
    'localhost'. This ensures that someone cannot guess at
    the root password from the network.
    
    Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y

  6. Löschen Sie die Testdatenbank, die während des Installationsvorgangs von mysql-server erstellt wurde. Diese Datenbank wird zu Testzwecken erstellt. Als bewährte Vorgehensweise wird empfohlen, diese Datenbank zu löschen.

    By default, MySQL comes with a database named 'test' that
    anyone can access. This is also intended only for testing,
    and should be removed before moving into a production
    environment.
    
    
    Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y

  7. Laden Sie die Berechtigungstabellen neu, um sicherzustellen, dass alle Änderungen angewendet werden und wirksam sind.

    Reloading the privilege tables will ensure that all changes
    made so far will take effect immediately.
    
    Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
    Success.
    
    All done!
    Sie haben jetzt eine sichere Basis, mit der Sie arbeiten können. Im nächsten Abschnitt finden Sie die Anweisungen zum Ändern des Standard-Stammverzeichnisses Benutzername und Passwort.

Ändern des „Root“-Benutzers

Standardmäßig ist der MySQL-Server mit einem superuser/admin vordefiniert Konto, das Zugriff auf alle Berechtigungen und Funktionen der Datenbanken und Datenbankbenutzer hat. Angesichts dieser beispiellosen Kontrolle und des Zugriffs ist es wichtig, das Root-Konto zu sperren und zu sichern, da Angreifer normalerweise auf das Root-Konto auf einem MySQL-Server abzielen, da es das Potenzial hat, vollständigen Zugriff auf die Datenbanken und Datenbankbenutzer zu gewähren.

Der erste Schritt zur Sicherung des „root“-Benutzers besteht darin, den Benutzernamen von root zu ändern zu etwas Unnachgiebigerem ist das Ziel, den Root-Benutzernamen so schwer zu erraten oder für Angreifer mit Brute-Force zu machen. Danach wird auch empfohlen, den root zu ändern Kontopasswort regelmäßig als bewährte Methode.

  1. Melden Sie sich mit dem folgenden Befehl beim MySQL-Server an:

     sudo mysql -u root
    
  2. Ändern Sie den Benutzernamen des „Root“-Kontos, indem Sie die folgende Abfrage ausführen:

     rename user 'root'@'localhost' to '<new-username>'@'localhost';
    
  3. Ändere die root Account-Passwort auf etwas Starkes und schwer zu Erratendes setzen, wird empfohlen, einen Passwort-Generator zu verwenden. Wenn Sie das Plugin zur Kennwortbestätigung während des sicheren Installationsvorgangs aktiviert haben, müssen Sie ein Kennwort angeben, das die Richtlinienanforderungen in Bezug auf die Stärke erfüllt.

     ALTER USER 'example_username'@'localhost' IDENTIFIED BY '<new-password>';
    
  4. Laden Sie die Berechtigungstabelle neu, um sicherzustellen, dass alle Änderungen gespeichert und aktiviert werden, indem Sie den folgenden Befehl ausführen:

     flush privileges;
    
  5. Um zu bestätigen, ob der root Benutzername und Passwort geändert wurden, führen Sie die folgende Abfrage aus:

     use mysql;
     select user,host,authentication_string from mysql.user;
    

Dies zeigt die in der MySQL-Datenbank gespeicherten Benutzertabellen an und sollte die vorgenommenen Änderungen widerspiegeln.

+------------------+-----------+-------------------------------------------+
| user             | host      | authentication_string                     |
+------------------+-----------+-------------------------------------------+
| example_user     | localhost | *A2550B00C6DF81DACE33551E8293462F6CAE33DA |
| mysql.session    | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys        | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| debian-sys-maint | localhost | *241DC5A20F017D55EE82E46E7996784ED4A5CD8A |
+------------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)

Erstellen eines neuen Benutzers

Eine gute Sicherheitspraxis ist das Konzept der Trennung nach Pflichten oder Rollen. Das bedeutet, dass Sie für jede Datenbank oder Anwendung, die die Datenbank verwendet, einen neuen Benutzer erstellen, der über CRUD-Berechtigungen für diese bestimmte Datenbank verfügt. Dadurch wird sichergestellt, dass immer nur ein Benutzer Zugriff auf eine Datenbank hat und Benutzer nicht auf andere Datenbanken zugreifen können.

  1. Erstellen Sie einen Test Datenbank, indem Sie die folgende Abfrage in MYSQL ausführen:

     create database Test;
    
  2. Erstellen Sie den Benutzer, der für die Verwaltung dieser Testdatenbank verantwortlich ist:

     CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';
    
  3. Weisen Sie dem Benutzer die entsprechenden CRUD-Berechtigungen für den Test zu Datenbank:

     GRANT SELECT,UPDATE,DELETE ON Test.* TO '<username>'@'localhost';
    
  4. Es ist wichtig zu beachten, dass diese Privilegien nur für den Test gelten Datenbank, wenn Sie einen Benutzer für eine Anwendung wie phpMyAdmin erstellen müssen Sie dem Benutzer root zur Verfügung stellen Berechtigungen.

  5. Wenn Sie sich entscheiden, einen bestimmten Benutzer zu löschen, führen Sie die folgende Abfrage aus:

     drop user '<username>'@'localhost';
    
  6. Laden Sie die Berechtigungstabelle neu, um sicherzustellen, dass die vorgenommenen Änderungen angewendet und aktiviert werden, indem Sie die folgende Abfrage ausführen:

     flush privileges;
    

Benutzerdefinierte MySQL-Konfiguration

Sie können jetzt eine sichere benutzerdefinierte Konfiguration für MySQL einrichten, die zusätzliche Sicherheitskonfigurationsoptionen bietet.

  1. Die globale MySQL-Konfigurationsdatei befindet sich in /etc/mysql/my.cnf , alle benutzerdefinierten globalen Konfigurationen müssen in der Konfigurationsdatei eingerichtet werden.

  2. Die benutzerdefinierte Konfiguration muss für mysqld (MySQL-Daemon) angegeben werden, die im Bild angezeigten Optionen sind benutzerdefinierte Sicherheitskonfigurationen.