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

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

MySQL ist das weltweit beliebteste Open-Source-Datenbanksystem und MariaDB (ein Fork 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.

Dies wird zur Härtung und Erhöhung der allgemeinen Sicherheit von Linux-Servern beitragen, da Angreifer immer Schwachstellen in jedem Teil eines Systems scannen und Datenbanken in der Vergangenheit wichtige Zielgebiete waren. Ein gängiges Beispiel ist das Brute-Force des Root-Passworts für die MySQL-Datenbank.

In diesem Leitfaden erklären wir nützliche MySQL/MariaDB bewährte Sicherheitsverfahren für Linux.

1. Sichere MySQL-Installation

Dies ist der erste empfohlene Schritt nach der Installation des MySQL-Servers, um den Datenbankserver zu sichern. Dieses Skript erleichtert die Verbesserung der Sicherheit Ihres MySQL-Servers, indem es Sie auffordert:

  • Legen Sie ein Passwort für das Root-Konto fest, wenn 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.
  • Anonyme Benutzerkonten und Testdatenbank entfernen, auf die standardmäßig alle Benutzer zugreifen können, sogar anonyme Benutzer.
# mysql_secure_installation

Legen Sie nach dem Ausführen das Root-Passwort fest und beantworten Sie die Reihe von Fragen, indem Sie [Yes/Y eingeben ] und drücken Sie [Enter] .

2. Datenbankserver an Loopback-Adresse binden

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

# 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 unter [mysqld] hinzu Abschnitt.

bind-address = 127.0.0.1

3. Deaktivieren Sie LOCAL INFILE in MySQL

Als Teil der Sicherheitshärtung müssen Sie local_infile deaktivieren um den Zugriff auf das zugrunde liegende Dateisystem von MySQL aus zu verhindern, indem Sie die folgende Direktive unter [mysqld] verwenden Abschnitt.

local-infile=0

4. Ändern Sie den MYSQL-Standardport

Der Hafen Die Variable legt die MySQL-Portnummer fest, die zum Abhören von TCP/IP-Verbindungen verwendet wird. Die Standardportnummer ist 3306 aber Sie können es unter [mysqld] ändern Abschnitt wie abgebildet.

Port=5000

5. MySQL-Protokollierung aktivieren

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

log=/var/log/mysql.log

6. Legen Sie die entsprechende Berechtigung für MySQL-Dateien fest

Stellen Sie sicher, dass Sie die entsprechenden Berechtigungen für alle MySQL-Serverdateien und Datenverzeichnisse festgelegt haben. Die /etc/my.conf Datei sollte nur für root beschreibbar sein. Dadurch werden andere Benutzer daran gehindert, Datenbankserverkonfigurationen zu ä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 auf dem Terminal eingeben, je nach verwendeter Shell in einer Verlaufsdatei gespeichert (z. B. ~/.bash_history für Bash). Ein Angreifer, dem es gelingt, Zugriff auf diese Verlaufsdatei zu erhalten, kann leicht alle dort aufgezeichneten Passwörter sehen.

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. Anwendungsspezifische Datenbankbenutzer definieren

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

# mysql -u root -p
MariaDB [(none)]> CREATE DATABASE osclass_db;
MariaDB [(none)]> CREATE USER 'osclassdmin'@'localhost' IDENTIFIED BY '[email protected]%!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, sich mit dem MySQL-Server zu verbinden, Passwortvalidierung und sichere Speicherung sensibler 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 eine allgemeine Information/Anwendungs-/Systemsicherheitsberatung. Wie oft Sie dies tun, hängt ganz von Ihrer internen Sicherheitsrichtlinie ab. Es kann jedoch "Schnüffler", die Ihre Aktivitäten über einen langen Zeitraum verfolgt haben, daran hindern, Zugriff auf Ihren MySQL-Server zu 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 Server-Paket regelmäßig

Es wird dringend empfohlen, mysql/mariadb-Pakete regelmäßig zu aktualisieren, um mit Sicherheitsupdates und Fehlerbehebungen aus dem Repository des Anbieters Schritt zu halten. Normalerweise sind Pakete in standardmäßigen Betriebssystem-Repositories 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

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