Website-Suche

12 MySQL/MariaDB-Sicherheits-Best Practices für Linux


MySQL ist das weltweit beliebteste Open-Source-Datenbanksystem und MariaDB (ein Zweig von MySQL) ist das am schnellsten wachsende Open-Source-Datenbanksystem der Welt. Nach der Installation des MySQL-Servers ist er in seiner Standardkonfiguration unsicher und seine Sicherung ist eine der wesentlichen Aufgaben bei der allgemeinen Datenbankverwaltung.

Lesen Sie auch: Lernen Sie MySQL/MariaDB für Anfänger – Teil 1

Dies wird dazu beitragen, die allgemeine Sicherheit von Linux-Servern zu stärken und zu erhöhen, da Angreifer immer Schwachstellen in jedem Teil eines Systems scannen und Datenbanken in der Vergangenheit wichtige Angriffspunkte waren. Ein häufiges Beispiel ist das brutale Erzwingen des Root-Passworts für die MySQL-Datenbank.

In diesem Leitfaden erklären wir nützliche Best Practices für die MySQL/MariaDB-Sicherheit für Linux.

1. Sichere MySQL-Installation

Dies ist der erste empfohlene Schritt nach der Installation des MySQL-Servers zur Sicherung des Datenbankservers. Dieses Skript trägt dazu bei, die Sicherheit Ihres MySQL-Servers zu verbessern, indem es Sie auffordert:

  • Legen Sie ein Passwort für das Root-Konto fest, falls Sie es nicht während der Installation festgelegt haben.
  • Deaktivieren Sie die Remote-Root-Benutzeranmeldung, indem Sie Root-Konten entfernen, auf die von außerhalb des lokalen Hosts zugegriffen werden kann.
  • Entfernen Sie anonyme Benutzerkonten und testen Sie die Datenbank, auf die standardmäßig alle Benutzer zugreifen können, auch anonyme Benutzer.
mysql_secure_installation

Nachdem Sie es ausgeführt haben, legen Sie das Root-Passwort fest und beantworten Sie die Reihe von Fragen, indem Sie [Ja/Ja] eingeben und [Enter] drücken.

2. Binden Sie den Datenbankserver an die Loopback-Adresse

Diese Konfiguration schränkt den Zugriff von Remote-Rechnern ein und weist den MySQL-Server an, nur Verbindungen vom lokalen Host aus zu akzeptieren. Sie können es in der Hauptkonfigurationsdatei festlegen.

vi /etc/my.cnf	                   [RHEL/CentOS]	
vi /etc/mysql/my.conf                    [Debian/Ubuntu] 
OR
vi /etc/mysql/mysql.conf.d/mysqld.cnf    [Debian/Ubuntu] 

Fügen Sie die folgende Zeile unten im Abschnitt [mysqld] hinzu.

bind-address = 127.0.0.1

3. Deaktivieren Sie LOCAL INFILE in MySQL

Im Rahmen der Sicherheitsverstärkung müssen Sie local_infile deaktivieren, um den Zugriff auf das zugrunde liegende Dateisystem von MySQL aus zu verhindern, indem Sie die folgende Anweisung im Abschnitt [mysqld] verwenden.

local-infile=0

4. Ändern Sie den MYSQL-Standardport

Die Variable Port legt die MySQL-Portnummer fest, die zum Abhören von TCP/IP-Verbindungen verwendet wird. Die Standard-Portnummer ist 3306, aber Sie können sie wie gezeigt im Abschnitt [mysqld] ändern.

Port=5000

5. Aktivieren Sie die MySQL-Protokollierung

Protokolle sind eine der besten Möglichkeiten, um zu verstehen, was auf einem Server passiert. Im Falle eines Angriffs können Sie anhand der Protokolldateien problemlos alle einbruchsbezogenen Aktivitäten erkennen. Sie können die MySQL-Protokollierung aktivieren, indem Sie die folgende Variable im Abschnitt [mysqld] hinzufügen.

log=/var/log/mysql.log

6. Legen Sie die entsprechenden Berechtigungen für MySQL-Dateien fest

Stellen Sie sicher, dass Sie über die entsprechenden Berechtigungen für alle MySQL-Serverdateien und Datenverzeichnisse verfügen. Die Datei /etc/my.conf sollte nur für Root schreibbar sein. Dadurch wird verhindert, dass andere Benutzer Datenbankserverkonfigurationen ändern.

chmod 644 /etc/my.cnf

7. Löschen Sie den MySQL-Shell-Verlauf

Alle Befehle, die Sie auf der MySQL-Shell ausführen, werden vom MySQL-Client in einer Verlaufsdatei gespeichert: ~/.mysql_history. Dies kann gefährlich sein, da für alle Benutzerkonten, die Sie erstellen, alle in der Shell eingegebenen Benutzernamen und Passwörter in der Verlaufsdatei aufgezeichnet werden.

cat /dev/null > ~/.mysql_history

8. Führen Sie MySQL-Befehle nicht über die Befehlszeile aus

Wie Sie bereits wissen, werden alle Befehle, die Sie am Terminal eingeben, in einer Verlaufsdatei gespeichert, abhängig von der verwendeten Shell (z. B. ~/.bash_history für Bash). Ein Angreifer, dem es gelingt, Zugriff auf diese Verlaufsdatei zu erhalten, kann die dort aufgezeichneten Passwörter leicht einsehen.

Es wird dringend davon abgeraten, Passwörter in der Befehlszeile einzugeben, etwa so:

mysql -u root -ppassword_

Wenn Sie den letzten Abschnitt der Befehlsverlaufsdatei überprüfen, sehen Sie das oben eingegebene Passwort.

history 

Der geeignete Weg, MySQL zu verbinden, ist.

mysql -u root -p
Enter password:

9. Definieren Sie anwendungsspezifische Datenbankbenutzer

Gewähren Sie für jede Anwendung, die auf dem Server ausgeführt wird, nur einem Benutzer Zugriff, der für die Datenbank einer bestimmten Anwendung verantwortlich ist. Wenn Sie beispielsweise eine WordPress-Site haben, erstellen Sie wie folgt einen bestimmten Benutzer für die WordPress-Site-Datenbank.

mysql -u root -p
MariaDB [(none)]> CREATE DATABASE osclass_db;
MariaDB [(none)]> CREATE USER 'osclassdmin'@'localhost' IDENTIFIED BY 'osclass@dmin%!2';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON osclass_db.* TO 'osclassdmin'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit

Und denken Sie daran, immer Benutzerkonten zu entfernen, die keine Anwendungsdatenbank mehr auf dem Server verwalten.

10. Verwenden Sie zusätzliche Sicherheits-Plugins und Bibliotheken

MySQL enthält eine Reihe von Sicherheits-Plugins für: Authentifizierungsversuche von Clients, eine Verbindung zum MySQL-Server herzustellen, Passwortvalidierung und Sicherung der Speicherung vertraulicher Informationen, die alle in der kostenlosen Version verfügbar sind.

Mehr finden Sie hier: https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html

11. Ändern Sie MySQL-Passwörter regelmäßig

Dies ist ein allgemeiner Ratschlag zur Informations-/Anwendungs-/Systemsicherheit. Wie oft Sie dies tun, hängt vollständig von Ihrer internen Sicherheitsrichtlinie ab. Es kann jedoch verhindern, dass „Schnüffler“, die Ihre Aktivitäten über einen längeren Zeitraum verfolgt haben, Zugriff auf Ihren MySQL-Server erhalten.

MariaDB [(none)]> USE mysql;
MariaDB [(none)]> UPDATE user SET password=PASSWORD('YourPasswordHere') WHERE User='root' AND Host = 'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;

12. Aktualisieren Sie das MySQL-Serverpaket regelmäßig

Es wird dringend empfohlen, die MySQL-/Mariadb-Pakete regelmäßig zu aktualisieren, um über Sicherheitsupdates und Fehlerbehebungen aus dem Repository des Anbieters auf dem Laufenden zu bleiben. Normalerweise sind Pakete in Standard-Betriebssystem-Repositorys veraltet.

yum update
apt update

Nachdem Sie Änderungen am MySQL/Mariadb-Server vorgenommen haben, starten Sie den Dienst immer neu.

systemctl restart mariadb		#RHEL/CentOS
systemctl restart mysql		#Debian/Ubuntu

Lesen Sie auch: 15 nützliche Tipps zur Leistungsoptimierung und -optimierung von MySQL/MariaDB

Das ist alles! Wir freuen uns, von Ihnen über das Kommentarformular unten zu hören. Teilen Sie uns bitte alle MySQL/MariaDB-Sicherheitstipps mit, die in der obigen Liste fehlen.