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

Datenbanksicherheit 101:Sicherheit in Open-Source-Datenbanken

Datensicherheit ist einer der wichtigsten Aspekte bei der Verwaltung einer Datenbank. Wenn Sie die Produktionsdatenbank verwalten, müssen Sie sie je nach Organisationsstruktur auf unbefugten Zugriff und Nutzung überwachen. Dies gilt auch für den zugrunde liegenden Host. In diesem Blog erklären wir die Sicherheit in Open-Source-Datenbanken.

Allgemeine Sicherheit

Nach der Installation der Datenbanksoftware müssen wir einige Vorabprüfungen durchführen, um die häufigsten Sicherheitsfehler zu vermeiden.

Die allgemeinen Richtlinien lauten wie folgt:

  • Geben Sie niemals irgendjemandem Root-/Admin-Zugriff auf andere! Dies ist von entscheidender Bedeutung.

  • Erfahren Sie, wie das Datenbankzugriffsberechtigungssystem funktioniert. Gewähren Sie nicht mehr Berechtigungen als nötig. Gewähren Sie niemals allen Hosts Privilegien.

  • Speichern Sie keine Klartext-Passwörter in Ihrer Datenbank. Anstatt SHA2() oder eine andere Einweg-Hashing-Funktion zu verwenden und den Hashwert zu speichern.

  • Verwenden Sie keine Standardports und stellen Sie sicher, dass der gewählte Port nicht von einem nicht vertrauenswürdigen Host aus zugänglich ist.

  • Stellen Sie die Open-Source-Datenbank hinter eine Firewall. Dies schützt Sie vor mindestens 50 % aller Arten von Exploits in jeder Software.

Zugriffskontrolle und Kontoverwaltung

Eine der Hauptfunktionen der Datenbank besteht darin, einen Benutzer zu authentifizieren, der sich von einem bestimmten Host aus verbindet, und diesem Benutzer Berechtigungen für eine Datenbank zuzuweisen. Um zu steuern, welche Benutzer eine Verbindung herstellen können, können jedem Konto Authentifizierungsdaten wie ein Kennwort zugewiesen werden.
 

Nutzerrollen 

Eine Datenbankrolle ist eine Sammlung beliebig vieler Berechtigungen, die einem oder mehreren Benutzern zugewiesen werden können. In modernen Open-Source-Datenbanken kommen die meisten Benutzer mit vordefinierten Rollen.

Passwortverwaltung 

Für den Zugriff auf die Datenbank müssen sich die Benutzer mit einem Benutzernamen und einem Passwort authentifizieren. Die Datenbank wendet dieselbe Hash-Funktion auf das Passwort an, das der Benutzer eingegeben hat, und vergleicht es mit dem in der Datenbank gespeicherten Hash. Wenn beide übereinstimmen, wird die Erlaubnis erteilt. Der Kennwortablauf ist für alle Datenbankbenutzer erforderlich, um Kennwörter regelmäßig zu ändern. Und eine zufällige Passwortgenerierung ist für explizit vom Administrator angegebene wörtliche Passwörter erforderlich. Eine wichtige Sache, die überwacht werden muss, ist die Nachverfolgung von falschen Passwörtern/Authentifizierungsfehlern. Es wird empfohlen, die vorübergehende Kontosperrung nach zu vielen aufeinanderfolgenden Anmeldefehlern mit falschem Passwort zu aktivieren.

Umgang mit abgelaufenen Passwörtern

Sobald das Passwort abgelaufen ist, trennt der Datenbankserver eine Client-Verbindung mit abgelaufenem Passwort.

Beispiel 
[[email protected] vagrant]# mysql -u severalnies -p
Password: ******
ERROR 1862 (HY000): Your password has expired. To log in you must
change it using a client that supports expired passwords.

 

Einschränkung der Ressourcen 

Schränken Sie die Verwendung von Datenbankserverressourcen durch einen Client ein, indem Sie die Anzahl gleichzeitiger Verbindungen begrenzen, die von einem beliebigen Benutzerkonto hergestellt werden können. Beispielsweise können wir die Anzahl der Abfragen einschränken, die ein Benutzer pro Stunde ausführen kann, oder die Anzahl der Male, die ein Benutzer pro Stunde eine Verbindung zum Server herstellen kann.

Verschlüsselte Verbindungen 

Datenbanken unterstützen normalerweise verschlüsselte Verbindungen zwischen Clients und dem Server unter Verwendung einiger Sicherheitsprotokolle. Mit SSL werden die Verbindungen zwischen Clients und dem Server verschlüsselt. Dadurch werden die Daten über die Netzwerkschicht in ein unlesbares Format umgewandelt und das Abhören des Netzwerks vermieden. Sobald wir SSL in der Datenbank aktivieren, werden verschlüsselte Verbindungen unterstützt und unverschlüsselte Verbindungen werden nicht zugelassen.

Sicherheitskomponenten und Plugins

Sicherheitskomponenten lassen sich einfach in die Datenbank integrieren. Beispielsweise enthält mysql mehrere Komponenten und Plugins, die Sicherheitsfunktionen implementieren.

Authentifizierungs-Plugins - Diese Plugins authentifizieren Versuche von Clients, sich mit dem MySQL-Server zu verbinden. Wir können uns einfach in unseren Datenbankserver integrieren.

Passwort-Plugin - Dieses Plugin prüft, ob das aktuelle Passwort stark ist, und weist alle als schwach eingestuften Passwörter zurück.

Keyring-Plugin - Dieses Plugin verschlüsselt Tablespaces. Diese Verschlüsselungstechnik arbeitet auf Basis rotierender Schlüsseldateien. Hier ist ein Beispiel zur Verschlüsselung von MySQL 8.0.

Audit-Protokoll - Auditing ist der Prozess der Überwachung und Aufzeichnung der Aktivitäten, die auf dem Datenbankserver stattfinden. Es wird verwendet, um zu protokollieren, wer was tut, z. Datenbankoperationen durch Benutzer, Verbindungen oder fehlgeschlagene Anmeldeversuche. Wenn Sie einen Load Balancer für den Zugriff auf die Datenbank verwenden, müssen Sie dies ebenfalls überwachen. Standardmäßig werden die Audit-Log-Dateien im mysql-Datenverzeichnis gespeichert.

Beispielprotokolle 
20210306 02:30:06,centos14,root,localhost,519,1832,QUERY,,'select sleep(5)',0
20210306 02:30:08,centos14,s9smysqlchk,localhost,571,0,DISCONNECT,,,0
20210306 02:30:09,centos14,root,localhost,519,1867,QUERY,,'show schemas',0

Wenn Sie die Audit-Log-Dateien an verschiedenen Orten speichern möchten, können Sie diesen Parameter in Ihrer Konfigurationsdatei „server_audit_file_path“ hinzufügen.

Protokollüberwachung - Die Protokollüberwachung bietet dem Operations-Team einen besseren Einblick in die Datenbankumgebung, die aus den Datenbankinstanzen, aber auch den Load Balancern besteht. Es hilft, Anomalien zu identifizieren, wann diese Anomalien auftreten und mit welcher Häufigkeit sie auftreten.

Passwort-Validierungs-Plugin

Das Passwort ist wie eine Zeichenfolge aus Wörtern, Zahlen und Zeichen. Auf Datenbank- und Serverseite wurden Benutzername und Passwort für bestimmte Zugriffe benötigt. Wenn das Passwort beispielsweise als Klartextwert bereitgestellt wird, überprüft das validate_password-Plugin das Passwort anhand der aktuellen Passwortrichtlinie und lehnt das Passwort ab, wenn es schwach ist.

Die validate_password_policy hat drei Werte LOW, MEDIUM oder STRONG. Der Wert von LOW prüft nur die Passwortlänge, die MEDIUM-Richtlinie fügt einige Bedingungen hinzu und die STRONG-Richtlinie fügt die Bedingung hinzu, dass Passwortteilzeichenfolgen, die aus 4 oder mehr Zeichen bestehen, nicht mit Wörtern in einer Wörterbuchdatei übereinstimmen dürfen, die durch Ändern der Variable validate_password_dictionary_file angegeben werden kann.

LDAP-Plugin

Das LDAP-Plug-in ermöglicht dem Datenbankserver, Verbindungen von Benutzern zu akzeptieren, die in LDAP-Verzeichnissen definiert sind. Bei der LDAP-Authentifizierung kommunizieren die clientseitigen und serverseitigen Plugins das Passwort als Klartext. Eine sichere Verbindung zwischen dem Client und dem Server wird empfohlen, um die Offenlegung von Passwörtern zu verhindern. Wenn der Client-Benutzername und der Hostname nicht übereinstimmen, lehnt die Datenbank die Verbindung ab.

 Die LDAP-Konfiguration in ClusterControl ist sehr einfach. In diesem Beitrag haben wir die Konfigurationsschritte mit ClusterControl erklärt.

Datenbanksicherungen sichern 

Datensicherungen sind wichtig, wenn es um den Schutz Ihrer Daten geht. Es ist sogar noch wichtiger sicherzustellen, dass Ihre Backups sicher aufbewahrt werden und für eine schnellere Wiederherstellung verfügbar sind. ClusterControl bietet umfassende Unterstützung für den Backup-Verwaltungsprozess, einschließlich der Verschlüsselung der Backup-Dateien mit dem AES-256-Verschlüsselungsalgorithmus, bevor sie extern versendet werden.

VPN-Zugriff auf das Jump-Host-Netzwerk 

Um von lokal auf die Open-Source-Datenbank des privaten Netzwerks zuzugreifen, ist die beste Methode die Verwendung von VPN. VPN bietet Benutzern Privatsphäre und Sicherheit, um eine private Netzwerkverbindung über ein öffentliches Netzwerk aufzubauen. Ein Jump-Host ist ein zwischengeschalteter Host oder ein SSH-Gateway für den Zugriff auf entfernte Netzwerkserver. Der Jump-Server fungiert als Mittelsmann, um beide Enden zu verbinden, wodurch er zu einem „Jump“-Host für den Zugriff auf die andere Seite wird. Dies ist eine der beliebtesten Methoden, um den Server von der Außenwelt abzusichern. Wir können SSH-Tunneling verwenden, um auf sichere Weise auf ein entferntes Netzwerk zuzugreifen, was weniger Aufwand erfordert als die Konfiguration eines VPN-Servers.

Datenbankzugriffsverwaltung über Jump-Host

Für einen sichereren Zugriff auf Produktionsdatenbankserver ist ein dedizierter Jump-Server erforderlich. Dieser dedizierte Jump-Server ermöglicht den Zugriff auf ein privates Netzwerk von einem externen oder öffentlichen Netzwerk wie dem Internet. Es bietet einen abgestuften Ansatz für jeden Benutzer, um Ihr privates Netzwerk zu erreichen, und minimiert die Wahrscheinlichkeit eines potenziellen Serverangriffs.

Wie können wir das erreichen?

Am besten richten Sie einen Jump-Server ein, um von einem Linux-Rechner aus eine Verbindung zu Ihren Datenbanken herzustellen, auch wenn sich die DB-Instance in einem privaten Netzwerk befindet. Befolgen Sie nach dem Erstellen des Jump-Hosts die folgenden Richtlinien,

  • Beschränken Sie den öffentlichen Zugriff auf Ihre Datenbanken mit privaten Subnetzen.

  • Beschränken Sie das Internet-Gateway in Routing-Tabellen.

  • Erstellen Sie eine neue VPC oder fügen Sie Ihren Jump-Host derselben VPC wie Ihre Datenbankinstanz hinzu. Fügen Sie dann Ihrem Jump-Server mit öffentlichen Subnetzen ein Internet-Gateway hinzu.

  • Erlaube nur bestimmte Datenbankports zu erforderlichen IPs.

Dann können wir SSH-Tunneling erstellen, um auf sichere Weise auf einen Datenbankserver zuzugreifen.

SELinux

SELinux ist eine Reihe von Kernel-Modifikationen und User-Space-Tools und hat einige Policy-Module. Die Richtlinienmodule sind SELinux-Kontexte zum Definieren von Regeln dafür, wie Prozesse, Dateien, Ports und andere Systemobjekte miteinander interagieren. Die Interaktion zwischen Systemobjekten ist nur zulässig, wenn eine Richtlinienregel dies zulässt.

Systembenutzer werden SELinux weitgehend nicht kennen. Nur Systemadministratoren müssen überlegen, wie streng eine Richtlinie für ihre Serverumgebung implementiert werden soll. Dieses Detail gibt dem SELinux-Kernel vollständige, granulare Kontrolle über das gesamte System.