1 Absicherung von MySQL/MariaDB
Überblick
Dieser Abschnitt enthält Best Practices für die Absicherung einer MySQL-/MariaDB-Datenbank.
Für eine grundlegende Einrichtung siehe die standardmäßigen Anweisungen zur Erstellung einer MySQL-/MariaDB-Datenbank, die auch die Erstellung des Benutzers „zabbix“ mit vollständigen Berechtigungen für die Zabbix-Datenbank umfassen. Dieser Benutzer ist der Eigentümer der Datenbank und verfügt außerdem über die erforderlichen Berechtigungen, um bei einem Upgrade von Zabbix die Datenbankstruktur zu ändern.
Zur Verbesserung der Sicherheit wird empfohlen, zusätzliche Datenbankrollen und Benutzer mit minimalen Berechtigungen zu erstellen. Diese Rollen und Benutzer sollten gemäß dem Prinzip der geringsten Privilegien konfiguriert werden, das heißt, sie sollten nur über die Berechtigungen verfügen, die für die Ausführung der vorgesehenen Funktionen unbedingt erforderlich sind.
Erstellen von Benutzerrollen
Erstellen Sie die folgenden Rollen mit den entsprechenden Berechtigungen:
- zbx_srv - Rolle zum Ausführen von Zabbix Server und Proxy:
CREATE ROLE 'zbx_srv';
GRANT DELETE, INSERT, SELECT, UPDATE ON zabbix.* TO 'zbx_srv';
FLUSH PRIVILEGES;
- zbx_web - Rolle zum Ausführen von Zabbix Frontend und API:
CREATE ROLE 'zbx_web';
GRANT DELETE, INSERT, SELECT, UPDATE ON zabbix.* TO 'zbx_web';
FLUSH PRIVILEGES;
- zbx_bckp - Rolle für die Tabellensicherung:
CREATE ROLE 'zbx_bckp';
GRANT LOCK TABLES, TRIGGER, SELECT ON zabbix.* TO 'zbx_bckp';
GRANT process ON *.* TO 'zbx_bckp';
FLUSH PRIVILEGES;
Die Wiederherstellung und Aktualisierung von Tabellen sollte vom Eigentümer der Datenbank durchgeführt werden.
- zbx_part - Rolle mit einem reduzierten Satz an Berechtigungen für die Datenbankpartitionierung; beachten Sie, dass diese Rolle erst nach dem Erstellen der Datenbank angelegt werden kann, da sie Berechtigungen für bestimmte Datenbanktabellen vergibt:
CREATE ROLE 'zbx_part';
GRANT SELECT, ALTER, DROP ON zabbix.history TO 'zbx_part';
GRANT SELECT, ALTER, DROP ON zabbix.history_uint TO 'zbx_part';
GRANT SELECT, ALTER, DROP ON zabbix.history_str TO 'zbx_part';
GRANT SELECT, ALTER, DROP ON zabbix.history_text TO 'zbx_part';
GRANT SELECT, ALTER, DROP ON zabbix.history_log TO 'zbx_part';
GRANT SELECT, ALTER, DROP ON zabbix.trends TO 'zbx_part';
GRANT SELECT, ALTER, DROP ON zabbix.trends_uint TO 'zbx_part';
-- Für MariaDB: die nächste Zeile überspringen (GRANT session_variables_admin ON *.* TO 'zbx_part';)
GRANT session_variables_admin ON *.* TO 'zbx_part';
GRANT SELECT ON zabbix.dbversion TO 'zbx_part';
GRANT SELECT, DELETE ON zabbix.housekeeper TO 'zbx_part';
FLUSH PRIVILEGES;
Nach dem Erstellen der Rollen können diese Benutzern zugewiesen werden.
Zuweisen von Benutzerrollen
Um die erstellten Benutzerrollen zuzuweisen, erstellen Sie Benutzer und weisen Sie ihnen die entsprechenden Rollen zu.
Ersetzen Sie <user>, <host>, <role> und <password> nach Bedarf.
CREATE USER '<user>'@'<host>' IDENTIFIED BY '<password>';
GRANT '<role>' TO '<user>'@'<host>';
SET DEFAULT ROLE '<role>' TO '<user>'@'<host>';
-- For MariaDB: SET DEFAULT ROLE '<role>' FOR '<user>'@'<host>'
FLUSH PRIVILEGES;
Zum Beispiel, um die Rolle für den Betrieb von Zabbix Server und Proxy zu erstellen und zuzuweisen:
CREATE USER 'usr_srv'@'localhost' IDENTIFIED BY 'password';
GRANT 'zbx_srv' TO 'usr_srv'@'localhost';
SET DEFAULT ROLE ALL TO 'usr_srv'@'localhost';
FLUSH PRIVILEGES;