Inhaltsverzeichnis
MariaDB ArchLinux
Die MariaDB-Datenbank ist der freien Nachfolger von MySQL als Datenbank und bei den allermeisten Linux-Distributoren als Installationspaket enthalten. Viele OpenSource-Projekte setzen bereits die MariaDB-Datenbank ein.
Beschreibung | Externer Link |
---|---|
Homepage | https://mariadb.org |
Dokumentation | https://mariadb.org/documentation/ |
Download | https://mariadb.org/download |
Archlinux-Wiki | https://wiki.archlinux.org/title/MariaDB |
Hinweis - Die nachfolgenden Ausführungen erheben keinen Anspruch auf Vollständigkeit, sondern stellen eine „Basiskonfiguration“ eines MariaDB-Datenbank-Servers für ein kleines privates Netzwerk dar!!!
Ab hier werden zur Ausführung nachfolgender Befehle root
-Rechte benötigt. Um der Benutzer root
zu werden, melden Sie sich bitte als root
-Benutzer am System an, oder wechseln mit nachfolgendem Befehl zum Benutzer root
:
$ su - Password:
Installation
Um die MariaDB-Datenbank betreiben zu können, muss das Paket
installiert werden.
Mit nachfolgendem Befehl, wird das Pakete mariadb
installiert:
# pacman --noconfirm -S mariadb
HINWEIS - Nachfolgender Hinweis bei der Installation ist zu beachten:
:: You need to initialize the MariaDB data directory prior to starting the service. This can be done with mariadb-install-db command, e.g.: # mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket mariadb
installiert wurden:
# pacman -Qil mariadb
Dienst/Deamon-Start einrichten
Um eine MariaDB-Datenbank betreiben zu können, welche als Dienst/Deamon als Hintergrundprozess läuft und auch nach einem Neustart des Servers zur Verfügung zu haben, soll der Dienst/Daemon mit dem Server mit gestartet werden, was mit nachfolgendem Befehl realisiert werden kann:
# systemctl enable mariadb.service Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/system/mariadb.service.
Eine Überprüfung, ob beim Neustart des Server der mariadb
-Dienst/Deamon wirklich mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben:
# systemctl list-unit-files --type=service | grep -e ^mariadb.service mariadb.service enabled disabled
bzw.
# systemctl is-enabled mariadb.service enabled
iptables/ip6tables Regeln
Damit die MariaDB-Datenbank auch über das Netzwerk erreichbar ist und SQL-Queries vom Paketfilter iptables
und ip6tables
blockiert werden, muss nachfolgende Regel zum iptables
bzw. ip6tables
-Regelwerk hinzugefügt werden.
Um die aktuellen iptables
-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# iptables -nvL --line-numbers Chain INPUT (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 6 398 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 5 0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 5 prefix "REC-INP Defend " 6 0 0 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with tcp-reset 7 0 0 REJECT udp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 8 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-proto-unreachable Chain FORWARD (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 5 prefix "REC-FWD Defend " 2 0 0 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with tcp-reset 3 0 0 REJECT udp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 4 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-proto-unreachable Chain OUTPUT (policy ACCEPT 8 packets, 478 bytes) num pkts bytes target prot opt in out source destination
Nachfolgende Befehle, fügen folgende iptables
-Regeln dem iptables
-Regelwerk nach der Position 4 hinzu, ohne das der Paketfilter angehalten werden muss:
-A INPUT -p tcp --dport 3306 -j ACCEPT
und hier die Befehle:
# iptables -I INPUT 5 -p tcp --dport 3306 -j ACCEPT
Ein erneute Abfrage des iptables
-Regelwerts, sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:
# iptables -nvL --line-numbers Chain INPUT (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 29 15634 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 5 0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306 6 0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 5 prefix "REC-INP Defend " 7 0 0 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with tcp-reset 8 0 0 REJECT udp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 9 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-proto-unreachable Chain FORWARD (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 5 prefix "REC-FWD Defend " 2 0 0 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with tcp-reset 3 0 0 REJECT udp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 4 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-proto-unreachable Chain OUTPUT (policy ACCEPT 38 packets, 4765 bytes) num pkts bytes target prot opt in out source destination Die neue Zeile ist an **Position 5 (INPUT)** zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (**nur relevanter Ausschnitt**): <code> ... 5 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306 ...
Um diese iptables
-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im iptables
-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschließend noch ausgeführt werden:
# /usr/sbin/iptables-save > /etc/iptables/iptables.rules
Nachfolgender Befehl kann dazu verwendet werden, um zu überprüfen, ob das iptables
-Regelwerk auch korrekt gespeichert wurde:
# cat /etc/iptables/iptables.rules # Generated by iptables-save v1.8.7 on Mon Jul 12 16:38:03 2021 *mangle :PREROUTING ACCEPT [179:83438] :INPUT ACCEPT [179:83438] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [221:105831] :POSTROUTING ACCEPT [222:105904] COMMIT # Completed on Mon Jul 12 16:38:03 2021 # Generated by iptables-save v1.8.7 on Mon Jul 12 16:38:03 2021 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [221:105831] -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT -A INPUT -j LOG --log-prefix "REC-INP Defend " --log-level 5 -A INPUT -p tcp -j REJECT --reject-with tcp-reset -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable -A INPUT -j REJECT --reject-with icmp-proto-unreachable -A FORWARD -j LOG --log-prefix "REC-FWD Defend " --log-level 5 -A FORWARD -p tcp -j REJECT --reject-with tcp-reset -A FORWARD -p udp -j REJECT --reject-with icmp-port-unreachable -A FORWARD -j REJECT --reject-with icmp-proto-unreachable COMMIT # Completed on Mon Jul 12 16:38:03 2021 # Generated by iptables-save v1.8.7 on Mon Jul 12 16:38:03 2021 *nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [33:2171] :POSTROUTING ACCEPT [33:2171] COMMIT # Completed on Mon Jul 12 16:38:03 2021
Um die aktuellen ip6tables
-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# ip6tables -nvL --line-numbers Chain INPUT (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all * * ::/0 ::/0 ctstate RELATED,ESTABLISHED 2 0 0 ACCEPT icmp * * ::/0 ::/0 3 0 0 ACCEPT all lo * ::/0 ::/0 4 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:22 5 0 0 LOG all * * ::/0 ::/0 LOG flags 0 level 5 prefix "REC-INP Defend " 6 0 0 REJECT tcp * * ::/0 ::/0 reject-with tcp-reset 7 0 0 REJECT udp * * ::/0 ::/0 reject-with icmp6-port-unreachable 8 0 0 REJECT all * * ::/0 ::/0 reject-with icmp6-addr-unreachable Chain FORWARD (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 LOG all * * ::/0 ::/0 LOG flags 0 level 5 prefix "REC-FWD Defend " 2 0 0 REJECT tcp * * ::/0 ::/0 reject-with tcp-reset 3 0 0 REJECT udp * * ::/0 ::/0 reject-with icmp6-port-unreachable 4 0 0 REJECT all * * ::/0 ::/0 reject-with icmp6-addr-unreachable Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination
Nachfolgende Befehle, fügen folgende ip6tables
-Regeln dem ip6tables
-Regelwerk nach der Position 4 hinzu, ohne das der Paketfilter angehalten werden muss:
-A INPUT -p tcp --dport 3306 -j ACCEPT
und hier die Befehle:
# ip6tables -I INPUT 5 -p tcp --dport 3306 -j ACCEPT
Ein erneute Abfrage des ip6tables
-Regelwerts, sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:
# ip6tables -nvL --line-numbers Chain INPUT (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all * * ::/0 ::/0 ctstate RELATED,ESTABLISHED 2 0 0 ACCEPT icmp * * ::/0 ::/0 3 0 0 ACCEPT all lo * ::/0 ::/0 4 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:22 5 0 0 ACCEPT udp * * ::/0 ::/0 tcp dpt:3306 6 0 0 LOG all * * ::/0 ::/0 LOG flags 0 level 5 prefix "REC-INP Defend " 7 0 0 REJECT tcp * * ::/0 ::/0 reject-with tcp-reset 8 0 0 REJECT udp * * ::/0 ::/0 reject-with icmp6-port-unreachable 9 0 0 REJECT all * * ::/0 ::/0 reject-with icmp6-addr-unreachable Chain FORWARD (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 LOG all * * ::/0 ::/0 LOG flags 0 level 5 prefix "REC-FWD Defend " 2 0 0 REJECT tcp * * ::/0 ::/0 reject-with tcp-reset 3 0 0 REJECT udp * * ::/0 ::/0 reject-with icmp6-port-unreachable 4 0 0 REJECT all * * ::/0 ::/0 reject-with icmp6-addr-unreachable Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination
Die neuen Zeilen sind an Position 5 (INPUT) und Postition 6 (INTPUT) zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):
... 5 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:3306 ...
Um diese ip6tables
-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im ip6tables
-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschließend noch ausgeführt werden:
# /usr/sbin/ip6tables-save > /etc/iptables/ip6tables.rules
Nachfolgender Befehl kann dazu verwendet werden, um zu überprüfen, ob das ip6tables
-Regelwerk auch korrekt gespeichert wurde:
# cat /etc/iptables/ip6tables.rules # Generated by ip6tables-save v1.8.7 on Mon Jul 12 16:48:38 2021 *mangle :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] COMMIT # Completed on Mon Jul 12 16:48:38 2021 # Generated by ip6tables-save v1.8.7 on Mon Jul 12 16:48:38 2021 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT -A INPUT -j LOG --log-prefix "REC-INP Defend " --log-level 5 -A INPUT -p tcp -j REJECT --reject-with tcp-reset -A INPUT -p udp -j REJECT --reject-with icmp6-port-unreachable -A INPUT -j REJECT --reject-with icmp6-addr-unreachable -A FORWARD -j LOG --log-prefix "REC-FWD Defend " --log-level 5 -A FORWARD -p tcp -j REJECT --reject-with tcp-reset -A FORWARD -p udp -j REJECT --reject-with icmp6-port-unreachable -A FORWARD -j REJECT --reject-with icmp6-addr-unreachable COMMIT # Completed on Mon Jul 12 16:48:38 2021 # Generated by ip6tables-save v1.8.7 on Mon Jul 12 16:48:38 2021 *nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] COMMIT # Completed on Mon Jul 12 16:48:38 2021
Basis-Konfiguration
/usr/bin/mariadb-install-db
Bevor der erste Start des MariaDB-Servers durchgeführt wird, muss nachfolgende Einrichtung des MariaDB-Servers mit nachfolgendem Befehl durchgeführt werden:
# /usr/bin/mariadb-install-db --user=mysql --group=mysql --basedir=/usr --datadir=/var/lib/mysql/data
Nachfolgend die Anwendung des oben genannten Befehls:
# mariadb-install-db --user=mysql --group=mysql --basedir=/usr --datadir=/var/lib/mysql/data Installing MariaDB/MySQL system tables in '/var/lib/mysql/data' ... OK To start mariadbd at boot time you have to copy support-files/mariadb.service to the right place for your system Two all-privilege accounts were created. One is root@localhost, it has no password, but you need to be system 'root' user to connect. Use, for example, sudo mysql The second is mysql@localhost, it has no password either, but you need to be the system 'mysql' user to connect. After connecting you can set the password, if you would need to be able to connect as any of these users with a password and without sudo See the MariaDB Knowledgebase at https://mariadb.com/kb You can start the MariaDB daemon with: cd '/usr' ; /usr/bin/mariadb-safe --datadir='/var/lib/mysql/data' You can test the MariaDB daemon with mariadb-test-run.pl cd '/usr/mariadb-test' ; perl mariadb-test-run.pl Please report any problems at https://mariadb.org/jira The latest information about MariaDB is available at https://mariadb.org/. Consider joining MariaDB's strong and vibrant community: https://mariadb.org/get-involved/
Erklärung:
Parameter | Erklärung |
---|---|
–user=mysql | Der Login-Benutzername, der für die Ausführung von MariaDB verwendet wird. Dateien und Verzeichnisse, die von MariaDB erstellt werden, gehören diesem Benutzer |
–group=mysql | Die für die Ausführung von MariaDB zu verwendende Anmeldegruppe. Dateien und Verzeichnisse, die von MariaDB erstellt werden, gehören dieser Gruppe |
–basedir=/usr | Der Pfad zum MariaDB-Installationsverzeichnis |
–datadir=/var/lib/mysql/ data | Der Pfad zum MariaDB-Datenverzeichnis |
ACHTUNG - Es wurde ein anderer Pfad als in der empfohlenen Dokumentation verwendet!
/var/lib/mysql/
data
HINWEIS - Es würde noch weitere Optionen bei diesem Befehl geben, die hier jedoch bewusst nicht zur Anwendung kommen.
/ect/my.cnf
Bevor der Dienst/Daemon des MariaDB-Servers gestartet wird, können noch Anpassungen in der Konfigurationsdateien
/etc/my.cnf.d/client.cnf
/etc/my.cnf.d/enable_encryption.preset
/etc/my.cnf.d/hashicorp_key_management.cnf
/etc/my.cnf.d/mysql-clients.cnf
/etc/my.cnf.d/provider_bzip2.cnf
/etc/my.cnf.d/provider_lz4.cnf
/etc/my.cnf.d/provider_lzma.cnf
/etc/my.cnf.d/s3.cnf
/etc/my.cnf.d/server.cnf
/etc/my.cnf.d/spider.cnf
durchgeführt werden, welche durch einen Eintrag in der Konfigurationsdatei
/etc/my.cnf
geladen werden, welche nachfolgenden Inhalt halt (Standardeinstellungen - komplette Konfigurationsdatei):
#
# This group is read both by the client and the server
# use it for options that affect everything
#
[client-server]
#
# include *.cnf from the config directory
#
!includedir /etc/my.cnf.d
HINWEIS - Ein Liste der Möglichen Optionen ist unter nachfolgendem externen Link zu finden:
/etc/my.cnf.d/server.cnf
datadir
Da ein abweichender Pfad für das MariaDB-Datenverzeichnis in oben verwendeten Initialisierung des MariaDB-Servers verwendet wurde sind Anpassungen in der Konfigurationsdatei
/etc/my.cnf.d/server.cnf
erforderlich!
Die Anpassungen in der Konfigurationsdatei /etc/my.cnf.d/server.cnf
sind unter der Sektion mariadb
vorzunehmen und in diesem Beispiel, durch voranstellen eines Kommentars im Format:
# Tachtler
gekennzeichnet.
Hier eine mögliche Anpassung (Nur relevanter Ausschnitt):
[mariadb] # Tachtler # default: datadir=/var/lib/mysql datadir=/var/lib/mysql/data
UTF8MB4, collation_serverm, character_set_server
Um den MariaDB-Servers, welcher bereits selbst den Zeichensatz UTF8MB4 nutzt, auf den Standard-Zeichensatz UTF8MB4 für alle neu erstellten Tabellen zu setzen, sind nachfolgende Änderungen erforderlich.
HINWEIS - UTF8MB4 wird gegenüber UTF-8 empfohlen, da es volle Unicode-Unterstützung bietet.
WICHTIG - Eine Änderung des Zeichensatzes ändert nicht die bestehenden Tabellenformate, sondern nur neu erstellte Tabellen und die Protokollinteraktion, die Daten abruft.
Die Anpassungen in der Konfigurationsdatei /etc/my.cnf.d/server.cnf
sind unter der Sektion mariadb
vorzunehmen.
Hier eine mögliche Anpassung (Nur relevanter Ausschnitt):
[mariadb] # Tachtler # default: datadir=/var/lib/mysql datadir=/var/lib/mysql/data # Tachtler - NEW - collation_server = utf8mb4_unicode_ci character_set_server = utf8mb4
tmpdir
Verwendung eines vorhandenen tmpfs
für tmpdir
Das von MariaDB für die Speicherung temporärer Dateien verwendete Verzeichnis heisst tmpdir
. Es wird zum Beispiel verwendet, um grosse Sortierungen auf der Festplatte durchzuführen, sowie für interne und explizite temporäre Tabellen.
Hier soll mit nachfolgendem Befehl ermittelt werden, welche tmpfs
bereits vorhanden sind, was mit nachfolgendem Befehl durchgeführt werden kann:
# df -hT | grep -E ^tmpfs tmpfs tmpfs 977M 0 977M 0% /dev/shm tmpfs tmpfs 196M 4.0K 196M 1% /run/user/1000
HINWEIS - Nachfolgend kann hier
/dev/shm
zu verwenden, da dies nicht einem Benutzer gehört und durch systemd
beim Systemstart eingerichtet wird und die Hälfte des installierten RAM darstellt.
Die Anpassungen in der Konfigurationsdatei /etc/my.cnf.d/server.cnf
sind unter der Sektion mysqld
vorzunehmen
Hier eine mögliche Anpassung (Nur relevanter Ausschnitt):
[mysqld] # Tachtler - NEW - tmpdir = /dev/shm
ACHTUNG - Wenn ein höherer Sicherheitsbedarf gegeben ist, sollte nachfolgende Konfiguration verwendet werden!
Um einen eigenen Bereich im RAM für den von MariaDB für die Speicherung temporärer Dateien verwendete Verzeichnis tmpdir
zu verwenden, sind nachfolgende Schritte erforderlich:
Anlage eines Verzeichnisses, auf den der RAM gemountet werden kann, was mit nachfolgendem Befehl durchgeführt werden kann:
# mkdir -pv /var/lib/mysql/tmp mkdir: created directory '/var/lib/mysql/tmp'
Anschliessend sind noch die entsprechenden Besitz- und Dateirechte wie folgt mit nachfolgendem Befehl zu setzen:
# chown mysql:mysql /var/lib/mysql/tmp
# chmod -R 750 /var/lib/mysql/tmp
Um den RAM auf den zuvor neu erstellten Verzeichnisses als Mount-Punkt zur Verfügung stellen zu können und dies bereits beim Systemstart, ist eine Ergänzung in der Konfgurationsdatei
/etc/fstab
mit nachfolgendem Inhalt erforderlich:
Nur relevanter Ausschnitt
tmpfs /var/lib/mysql/tmp tmpfs rw,gid=mysql,uid=mysql,size=256M,mode=0750,noatime 0 0
Anschliessend kann der Mount-Punkt mit nachfolgenden Befehlen aktiviert werden:
# mount -a mount: (hint) your fstab has been modified, but systemd still uses the old version; use 'systemctl daemon-reload' to reload.
systemctl daemon-reload
Die Anpassungen in der Konfigurationsdatei /etc/my.cnf.d/server.cnf
sind unter der Sektion mysqld
vorzunehmen
Hier eine mögliche Anpassung (Nur relevanter Ausschnitt):
[mysqld] # Tachtler - NEW - tmpdir = /var/lib/mysql/tmp
/etc/my.cnf.d/client.cnf
UTF8MB4, collation_serverm, character_set_server
Um den MariaDB-Servers, welcher bereits selbst den Zeichensatz UTF8MB4 nutzt, auf den Standard-Zeichensatz UTF8MB4 für alle neu erstellten Tabellen zu setzen, sind nachfolgende Änderungen erforderlich.
HINWEIS - UTF8MB4 wird gegenüber UTF-8 empfohlen, da es volle Unicode-Unterstützung bietet.
WICHTIG - Eine Änderung des Zeichensatzes ändert nicht die bestehenden Tabellenformate, sondern nur neu erstellte Tabellen und die Protokollinteraktion, die Daten abruft.
Die Anpassungen in der Konfigurationsdatei /etc/my.cnf.d/client.cnf
sind unter den Sektionen client
und client-mariadb
vorzunehmen. und in diesem Beispiel, durch voranstellen eines Kommentars im Format:
# Tachtler
gekennzeichnet.
Hier eine mögliche Anpassung (Nur relevanter Ausschnitt):
[client] # Tachtler - NEW - default-character-set = utf8mb4
[client-mariadb] # Tachtler - NEW - default-character-set = utf8mb4
MariaDB-Server: Erster Start
Bevor weitere Konfigurationsschritte erfolgen, kann der ersten Start mit nachfolgendem Befehl durchgeführt werden:
# systemctl start mariadb.service
HINWEIS - Es erfolgen keine weiteren Ausgaben, wenn der Start erfolgreich war !
MariaDB-Server: Überprüfung
Ob der MariaDB-Server, sprich der mariadb
-Dienst/Deamon auch tatsächlich als Hintergrundprozess läuft, kann mit nachfolgendem Befehl überprüft werden:
# ps auxwf | grep -E ^mysql mysql 2386 0.0 7.3 654464 146532 ? Ssl 16:23 0:00 /usr/bin/mariadbd
und nachfolgender Befehl:
# ss -taubenp | grep mariadb tcp LISTEN 0 80 0.0.0.0:3306 0.0.0.0:* users: (("mariadbd",pid=2386,fd=21)) uid:969 ino:27342 sk:5 cgroup:/system.slice/mariadb.service <-> tcp LISTEN 0 80 [::]:3306 [::]:* users: (("mariadbd",pid=2386,fd=23)) uid:969 ino:27343 sk:d cgroup:/system.slice/mariadb.service v6only:1 <->
bzw. nachfolgender Befehl:
# systemctl status mariadb.service ● mariadb.service - MariaDB 11.1.2 database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; preset:> Active: active (running) since Fri 2023-10-06 16:23:29 CEST; 6s ago Docs: man:mariadbd(8) https://mariadb.com/kb/en/library/systemd/ Process: 2345 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_ST> Process: 2346 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && > Process: 2399 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_S> Main PID: 2386 (mariadbd) Status: "Taking your SQL requests now..." Tasks: 13 (limit: 2317) Memory: 125.8M CPU: 224ms CGroup: /system.slice/mariadb.service └─2386 /usr/bin/mariadbd Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] InnoDB: log> Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] InnoDB: Loa> Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] Plugin 'wsr> Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] Server sock> Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] Server sock> Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] InnoDB: Buf> Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] mariadbd: E>
Eine weitere Überprüfung, ob der erste Start erfolgreich war, kann durch Einsicht in die LOG-Ausgaben des systemd-journald
erfolgen:
Ausgabe der LOG-Datei des systemd-journald
kann mit nachfolgendem Befehl dargestellt werden:
# journalctl -u mariadb Oct 06 16:23:28 server systemd[1]: Starting MariaDB 11.1.2 database server... Oct 06 16:23:29 server (mariadbd)[2386]: mariadb.service: Referenced but unset > Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] Starting Ma> Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] InnoDB: Com> Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] InnoDB: Num> Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] InnoDB: Usi> Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] InnoDB: Usi> Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] InnoDB: Ini> Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] InnoDB: Com> Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] InnoDB: Fil> Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] InnoDB: End> Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] InnoDB: Ope> Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] InnoDB: 128> Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] InnoDB: Set> Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] InnoDB: Fil> Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 10:23:29 0 [Note] InnoDB: log> Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] InnoDB: Loa> Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] Plugin 'wsr> Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] Server sock> Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] Server sock> Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] InnoDB: Buf> Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] mariadbd: E> Oct 06 16:23:29 server mariadbd[2386]: 2023-10-06 16:23:29 0 [Note] /usr/bin/ma> Oct 06 16:23:29 server mariadbd[2386]: Version: '11.1.2-MariaDB' socket: '/run> Oct 06 16:23:29 server systemd[1]: Started MariaDB 11.1.2 database server.
Durch nachfolgenden Befehl, kann das Verzeichnis in dem die MariaDB-Datenbank standardmässig die Dateien der einzelnen Datenbanken ablegt, angezeigt werden. Die Ausgabe sollte in etwa wie nachfolgend gezeigt aussehen:
# ls -la /var/lib/mysql/data/ total 154044 drwx------ 6 mysql mysql 327 Oct 6 16:23 . drwx------ 3 mysql mysql 18 Oct 6 09:17 .. -rw-rw---- 1 mysql mysql 417792 Oct 6 09:17 aria_log.00000001 -rw-rw---- 1 mysql mysql 52 Oct 6 09:17 aria_log_control -rw-rw---- 1 mysql mysql 9 Oct 6 10:23 ddl_recovery.log -rw-rw---- 1 mysql mysql 803 Oct 6 09:17 ib_buffer_pool -rw-rw---- 1 mysql mysql 12582912 Oct 6 09:17 ibdata1 -rw-rw---- 1 mysql mysql 100663296 Oct 6 16:25 ib_logfile0 -rw-rw---- 1 mysql mysql 12582912 Oct 6 16:23 ibtmp1 -rw-r--r-- 1 root root 14 Oct 6 09:17 mariadb_upgrade_info -rw-rw---- 1 mysql mysql 0 Oct 6 16:23 multi-master.info drwx------ 2 mysql mysql 4096 Oct 6 09:17 mysql drwx------ 2 mysql mysql 20 Oct 6 09:17 performance_schema drwx------ 2 mysql mysql 8192 Oct 6 09:17 sys drwx------ 2 mysql mysql 20 Oct 6 09:17 test -rw-rw---- 1 mysql mysql 10485760 Oct 6 09:17 undo001 -rw-rw---- 1 mysql mysql 10485760 Oct 6 09:17 undo002 -rw-rw---- 1 mysql mysql 10485760 Oct 6 09:17 undo003 -rw-rw---- 1 mysql mysql 5 Oct 6 16:23 server.pid
MariaDB-Server: Admin Zugriff
Direkt nach der Installation und dem ersten Start des MariaDB-Servers, kann durch nachfolgenden Befehl, die korrekt Funktionsweise überprüft werden:
# /usr/bin/mariadb-admin version /usr/bin/mariadb-admin from 11.1.2-MariaDB, client 9.1 for Linux (x86_64) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Server version 11.1.2-MariaDB Protocol version 10 Connection Localhost via UNIX socket UNIX socket /run/mysqld/mysqld.sock Uptime: 44 min 51 sec Threads: 1 Questions: 4 Slow queries: 0 Opens: 17 Open tables: 10 Queries per second avg: 0.001
MariaDB-Server: Sicherheits-Konfiguration
/usr/bin/mariadb-secure-installation
Bevor der erste Start des MariaDB-Servers durchgeführt werden sollte, ist es ratsam nachfolgende Sicherheits-Konfiguration des MariaDB-Servers durchzuführen.
HINWEIS - Dies ist ein interaktiver Befehl, bei dem Fragen beantwortet werden müssen!
Nach der erfolgreicher Installation gibt es empfohlen, sicherheitsrelevante Einstellungen, welche gerade in produktiven MariaDB-Server Installationen durchgeführt werden sollten.
Um nachfolgende sicherheitsrelevanten Einstellungen zu realisieren,
- ✘ Benutzer
root
durch setzen eines Passwortes schützen (nur die Taste [Enter/RETURN] drücken)Enter current password for root (enter for none): OK, successfully used password, moving on...
- ✘ Wechseln zu
unix_socket authentication
und nur auf diesen lokalen ZugriffSwitch to unix_socket authentication [Y/n] n ... skipping.
- ✔ Das zuvor gesetzte
root
-Passwort ändern, (Passwort eingeben und Bestätigungseingabe durchführen)Change the root password? [Y/n] Y New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. ... Success!
- ✔ Anonyme Benutzerkonten entfernen
Remove anonymous users? [Y/n] Y ... Success!
- ✔ Deaktivieren des Zugriffs des Benutzers
root
via Remote/Entfernten-ZugriffDisallow root login remotely? [Y/n] Y ... Success!
- ✔ Nicht benötigte Datenbanken, wie z.B. die Datenbank
test
entfernenRemove test database and access to it? [Y/n] Y - Dropping test database... ... Success! - Removing privileges on test database... ... Success!
- ✔ Neu laden der
privilegierten (internen) Tabellen
Reload privilege tables now? [Y/n] Y ... Success!
um die Änderungen wirksam werden zu lassen, kann das Script,
/usr/bin/mariadb-secure-installation
genutzt, bzw. ausgeführt werden:
# /usr/bin/mariadb-secure-installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and haven't set the root password yet, you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password or using the unix_socket ensures that nobody can log into the MariaDB root user without the proper authorisation. You already have your root account protected, so you can safely answer 'n'. Switch to unix_socket authentication [Y/n] n ... skipping. You already have your root account protected, so you can safely answer 'n'. Change the root password? [Y/n] Y New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. ... Success! By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB 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? [Y/n] Y ... Success! 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? [Y/n] Y ... Success! By default, MariaDB 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? [Y/n] Y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] Y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
MariaDB-Monitor
Der MariaDB-Monitor ist eine Art shell
, welche Befehle gegen den MariaDB-Datenbank-Server ausführen kann.
HINWEIS - Das von
/usr/bin/mariadb-install-db
erstellte Benutzerkonto root@localhost
wird so erstellt, dass es zwei Authentifizierungs-Plugins verwenden kann!
- Zunächst wird es so konfiguriert, dass es versucht, das Authentifizierungs-Plugin
unix_socket
zu verwenden. Dies ermöglicht es dem Benutzerroot@localhost
, sich ohne Passwort über die lokale Unix-Socket-Datei anzumelden, die durch die Systemvariable socket definiert ist, solange die Anmeldung von einem Prozess aus versucht wird, der dem Root-Benutzerkonto des Betriebssystems gehört. - Zweitens, wenn die Authentifizierung mit dem unix_socket-Authentifizierungs-Plugin fehlschlägt, ist es so konfiguriert, dass es versucht, das mysql_native_password-Authentifizierungs-Plugin zu benutzen. Allerdings wird anfangs ein ungültiges Passwort gesetzt, so dass zur Authentifizierung auf diese Weise ein Passwort mit SET PASSWORD gesetzt werden muss.
Der MariaDB-Monitor erfordert eine Anmeldung, welche als z.B. Benutzer root
und ohne Passwort-Abfrage wie folgt aussehen kann:
# /usr/bin/mariadb -h localhost -u root Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 19 Server version: 11.1.2-MariaDB Arch Linux Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> quit Bye
Als NICHT - root
-Benutzer, kann nur mit der Angabe zur Aufforderung der Passwort-Eingabe und mit gesetztem root
-Passwort zugegriffen werden, hier z.B. mit dem Benutzer klaus
:
Zugriff, OHNE die Aufforderung zur Passwort-Eingabe:
$ /usr/bin/mariadb -h localhost -u root ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Zugriff, MIT der Aufforderung zur Passwort-Eingabe:
$ /usr/bin/mariadb -h localhost -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 21 Server version: 11.1.2-MariaDB Arch Linux Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> quit Bye
Beendet wird der MariaDB-Monitor durch nachfolgenden Befehl:
MariaDB [(none)]> quit Bye
MariaDB-Monitor: Anonyme Benutzerkonten und Remote Zugriff
HINWEIS - In MariaDB Version 10.4 und höher hat die Tabelle
mysql.global_priv
die Tabelle mysql.user
ersetzt, und mysql.user
sollte als veraltet betrachtet werden!
Bei mysql.user
handelt es sich jetzt um eine Ansicht in mysql.global_priv
, die aus Gründen der Kompatibilität mit älteren Anwendungen und Überwachungsskripten erstellt wurde. Neue Tools sollten INFORMATION_SCHEMA-Tabellen verwenden.
Ab MariaDB Version 10.4.13 wird der dedizierte Benutzer mariadb.sys
als Definierer der Ansicht erstellt. Zuvor war root
der Definierer, was zu Berechtigungsproblemen führte, wenn dieser Benutzername z.B. geändert wurde.
Eine Überprüfung, ob keine weiteren anonyme Benutzerkonten vorhanden sind und ob via Remote/Entfernten-Zugriff eine Verbindung zum MariaDB-Server aufgebaut werden kann, kann mit nachfolgendem Befehl überprüft werden und sollte keine weiteren Benutzer ausser dem Benutzer root
und die internen Benutzer mysql
und mariadb.sys
zur Anzeige bringen und keine anderen Einträge für Host
als localhost
zurück liefern:
# /usr/bin/mariadb -h localhost -u root -e "SELECT Host,User FROM mysql.global_priv;" +-----------+-------------+ | Host | User | +-----------+-------------+ | | PUBLIC | | localhost | mariadb.sys | | localhost | mysql | | localhost | root | +-----------+-------------+
Eine Vollständige Abfrage der Tabelle mysql.global_priv
und der einzelnen Inhalte kann mit nachfolgendem SQL-Statement analog zur Abfrage der Tabelle mysql.user
gegen den MariaDB-Server ausgeführt werden:
# /usr/bin/mariadb -h localhost -u root -e " SELECT Host, User, IF(JSON_VALUE(Priv, '$.plugin') IN ('mysql_native_password', 'mysql_old_password'), IFNULL(JSON_VALUE(Priv, '$.authentication_string'), ''), '') AS Password, IF(JSON_VALUE(Priv, '$.access') & 1, 'Y', 'N') AS Select_priv, IF(JSON_VALUE(Priv, '$.access') & 2, 'Y', 'N') AS Insert_priv, IF(JSON_VALUE(Priv, '$.access') & 4, 'Y', 'N') AS Update_priv, IF(JSON_VALUE(Priv, '$.access') & 8, 'Y', 'N') AS Delete_priv, IF(JSON_VALUE(Priv, '$.access') & 16, 'Y', 'N') AS Create_priv, IF(JSON_VALUE(Priv, '$.access') & 32, 'Y', 'N') AS Drop_priv, IF(JSON_VALUE(Priv, '$.access') & 64, 'Y', 'N') AS Reload_priv, IF(JSON_VALUE(Priv, '$.access') & 128, 'Y', 'N') AS Shutdown_priv, IF(JSON_VALUE(Priv, '$.access') & 256, 'Y', 'N') AS Process_priv, IF(JSON_VALUE(Priv, '$.access') & 512, 'Y', 'N') AS File_priv, IF(JSON_VALUE(Priv, '$.access') & 1024, 'Y', 'N') AS Grant_priv, IF(JSON_VALUE(Priv, '$.access') & 2048, 'Y', 'N') AS References_priv, IF(JSON_VALUE(Priv, '$.access') & 4096, 'Y', 'N') AS Index_priv, IF(JSON_VALUE(Priv, '$.access') & 8192, 'Y', 'N') AS Alter_priv, IF(JSON_VALUE(Priv, '$.access') & 16384, 'Y', 'N') AS Show_db_priv, IF(JSON_VALUE(Priv, '$.access') & 32768, 'Y', 'N') AS Super_priv, IF(JSON_VALUE(Priv, '$.access') & 65536, 'Y', 'N') AS Create_tmp_table_priv, IF(JSON_VALUE(Priv, '$.access') & 131072, 'Y', 'N') AS Lock_tables_priv, IF(JSON_VALUE(Priv, '$.access') & 262144, 'Y', 'N') AS Execute_priv, IF(JSON_VALUE(Priv, '$.access') & 524288, 'Y', 'N') AS Repl_slave_priv, IF(JSON_VALUE(Priv, '$.access') & 1048576, 'Y', 'N') AS Repl_client_priv, IF(JSON_VALUE(Priv, '$.access') & 2097152, 'Y', 'N') AS Create_view_priv, IF(JSON_VALUE(Priv, '$.access') & 4194304, 'Y', 'N') AS Show_view_priv, IF(JSON_VALUE(Priv, '$.access') & 8388608, 'Y', 'N') AS Create_routine_priv, IF(JSON_VALUE(Priv, '$.access') & 16777216, 'Y', 'N') AS Alter_routine_priv, IF(JSON_VALUE(Priv, '$.access') & 33554432, 'Y', 'N') AS Create_user_priv, IF(JSON_VALUE(Priv, '$.access') & 67108864, 'Y', 'N') AS Event_priv, IF(JSON_VALUE(Priv, '$.access') & 134217728, 'Y', 'N') AS Trigger_priv, IF(JSON_VALUE(Priv, '$.access') & 268435456, 'Y', 'N') AS Create_tablespace_priv, IF(JSON_VALUE(Priv, '$.access') & 536870912, 'Y', 'N') AS Delete_history_priv, ELT(IFNULL(JSON_VALUE(Priv, '$.ssl_type'), 0) + 1, '', 'ANY','X509', 'SPECIFIED') AS ssl_type, IFNULL(JSON_VALUE(Priv, '$.ssl_cipher'), '') AS ssl_cipher, IFNULL(JSON_VALUE(Priv, '$.x509_issuer'), '') AS x509_issuer, IFNULL(JSON_VALUE(Priv, '$.x509_subject'), '') AS x509_subject, CAST(IFNULL(JSON_VALUE(Priv, '$.max_questions'), 0) AS UNSIGNED) AS max_questions, CAST(IFNULL(JSON_VALUE(Priv, '$.max_updates'), 0) AS UNSIGNED) AS max_updates, CAST(IFNULL(JSON_VALUE(Priv, '$.max_connections'), 0) AS UNSIGNED) AS max_connections, CAST(IFNULL(JSON_VALUE(Priv, '$.max_user_connections'), 0) AS SIGNED) AS max_user_connections, IFNULL(JSON_VALUE(Priv, '$.plugin'), '') AS plugin, IFNULL(JSON_VALUE(Priv, '$.authentication_string'), '') AS authentication_string, 'N' AS password_expired, ELT(IFNULL(JSON_VALUE(Priv, '$.is_role'), 0) + 1, 'N', 'Y') AS is_role, IFNULL(JSON_VALUE(Priv, '$.default_role'), '') AS default_role, CAST(IFNULL(JSON_VALUE(Priv, '$.max_statement_time'), 0.0) AS DECIMAL(12,6)) AS max_statement_time FROM mysql.global_priv;"
MariaDB-Monitor: Test-Datenbanken
Eine Überprüfung, ob keine Test-Datenbanken auf dem MariaDB-Server vorhanden sind, kann mit nachfolgendem Befehl überprüft werden und sollte nachfolgende Ausgabe zur Anzeige bringen:
# /usr/bin/mariadb -h localhost -u root -e "show databases;" +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+
MariaDB: SSL-Konfiguration
Nachfolgende Konfiguration ermöglicht eine SSL-Verschlüsselte Verbindung zu einem MariaDB-Server aufbauen zu können.
HINWEIS - Es sollen
self-signed-certifiacte
aus einer eigenen CA
erstellt werden!
Die Konfiguration beinhaltet
- Erstellen einer eignen CA -
MariaDB CA
- Erstellen eines
self-signed
-Zertifikats für den Server -db.idmz.tachtler.net
- Erstellen eines
self-signed
-Zertifikats für den Client -MariaDB Client
MariaDB: SSL - Eigene CA erstellen
Nachfolgende Konfiguration erstellt eine eigene CA, aus der das ROOT-Zertifikat der CA erstellt wird, welche wiederum das MariaDB Server
-Zertifikate und das MariaDB Client
-Zertifikat hervorbringt.
Dazu sollen mit nachfolgenden Befehl in nachfolgendem Verzeichnis
/etc/my.cnf.d
das nachfolgende Verzeichniss erstellt werden
/etc/my.cnf.d/certificates
# mkdir /etc/my.cnf.d/certificates
Anschliessend sind die nachfolgenden Besitz- und Dateirechte wie folgt mit nachfolgendem Befehl zu setzen:
# chown -R mysql:mysql /etc/my.cnf.d/certificates
Ob die Verzeichnisse korrekt erstellt wurden, kann mit nachfolgendem Befehl überprüft werden:
# ls -lad /etc/my.cnf.d/certificates drwxr-xr-x 1 mysql mysql 200 Oct 7 09:19 /etc/my.cnf.d/certificates
Jetzt müssen jeweils ein
/etc/my.cnf.d/certificates/ca-key.pem
- Zertifikats-Schlüssel (Certificate-Key)/etc/my.cnf.d/certificates/ca.pem
- ROOT-Zertifikat (Certificate)
mit nachfolgenden Befehlen erstellt werden:
1. Schritt: Erstellung eines Schlüssel für die eigene CA, mit nachfolgendem Befehl:
# openssl genrsa 2048 > /etc/my.cnf.d/certificates/ca-key.pem
2. Schritt: Erstellung eines ROOT-Zertifikats für die eigene CA, mit nachfolgendem Befehl:
# openssl req -new -x509 -nodes -days 3650 -key /etc/my.cnf.d/certificates/ca-key.pem -out /etc/my.cnf.d/certificates/ca.pem You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:DE State or Province Name (full name) [Some-State]:Bayern (Bavaria) Locality Name (eg, city) []:Muenchen (Munich) Organization Name (eg, company) [Internet Widgits Pty Ltd]:Klaus Tachtler Organizational Unit Name (eg, section) []:. Common Name (e.g. server FQDN or YOUR name) []:MariaDB CA Email Address []:hostmaster@tachtler.net
Mit nachfolgendem Befehl kann nun überprüft werden, ob der Schlüssel und das ROOT-Zertifikat für die eigene CA erstellt wurden:
# ls -la /etc/my.cnf.d/certificates/* -rw-r--r-- 1 mysql mysql 1704 Oct 7 09:02 /etc/my.cnf.d/certificates/ca-key.pem -rw-r--r-- 1 mysql mysql 1480 Oct 7 09:03 /etc/my.cnf.d/certificates/ca.pem
Mit nachfolgendem Befehl kann das soeben erstellt ROOT-Zertifikat ausgegeben und damit auch überprüft werden:
# openssl x509 -noout -text -in /etc/my.cnf.d/certificates/ca.pem Certificate: Data: Version: 3 (0x2) Serial Number: 53:aa:8f:4f:30:82:e6:fd:11:29:59:e8:10:2a:2b:90:03:ec:57:17 Signature Algorithm: sha256WithRSAEncryption Issuer: C = DE, ST = Bayern (Bavaria), L = Muenchen (Munich), O = Klaus Tachtler, CN = MariaDB CA, emailAddress = hostmaster@tachtler.net Validity Not Before: Oct 7 07:03:54 2023 GMT Not After : Oct 4 07:03:54 2033 GMT Subject: C = DE, ST = Bayern (Bavaria), L = Muenchen (Munich), O = Klaus Tachtler, CN = MariaDB CA, emailAddress = hostmaster@tachtler.net Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b5:a3:29:c6:a8:53:6c:de:62:cb:12:82:eb:ad: d0:40:9f:f8:8c:27:1f:63:53:22:dd:48:dc:28:5b: 17:cc:c5:14:33:2d:b3:1e:5f:db:1d:b9:9a:1d:cd: ec:f6:fa:3e:7f:b2:c8:56:73:2f:38:6d:bb:8e:40: 04:85:66:b9:0c:6f:98:87:b6:94:70:49:7c:ad:22: 17:b8:24:9e:1f:6c:75:32:a7:b9:4f:b3:40:6f:eb: d8:b6:87:b9:5f:81:75:32:c7:8a:75:5a:17:91:70: c2:aa:34:5e:74:e7:c4:e4:bc:68:1f:22:7e:01:69: 6f:f5:c2:74:fe:3c:17:ea:8a:af:66:05:98:af:38: 72:8e:72:bf:fd:52:e7:13:35:ca:05:91:5a:f5:c8: c5:c4:56:3f:d2:3f:65:a8:01:9f:35:6c:a5:32:04: ca:7e:3d:e2:b1:6b:d6:16:cd:da:4d:fa:ea:da:4a: 62:1c:47:0d:52:1d:b1:ac:1f:b4:d8:2a:4c:64:e7: dc:ac:c2:98:4e:fd:c5:04:16:d4:6e:7a:48:21:98: 62:98:a1:6a:16:ab:22:c5:7e:3c:6d:0c:f6:43:e9: eb:4b:07:5e:b3:10:7b:46:59:c3:71:93:63:ae:93: 3f:99:96:b5:1f:d7:31:3b:05:30:52:74:2f:df:bb: e9:67 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: F1:11:B6:92:5F:1F:17:BB:31:9C:F0:3F:89:A3:23:B2:17:BF:26:C7 X509v3 Authority Key Identifier: F1:11:B6:92:5F:1F:17:BB:31:9C:F0:3F:89:A3:23:B2:17:BF:26:C7 X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: sha256WithRSAEncryption Signature Value: 32:45:92:da:1d:bd:e7:2e:49:8a:4e:4b:5e:02:24:ae:4f:5c: 84:9d:6c:f0:51:6e:3f:c3:db:75:a1:9d:c8:23:9d:7c:e3:da: bb:22:8d:ac:40:b5:84:2e:a4:06:8e:67:62:97:24:49:17:86: 05:8d:82:ad:77:4a:32:c8:49:09:9a:08:0d:8e:0e:0b:5d:28: e5:6b:71:46:40:9e:2b:31:b6:5a:0b:65:49:80:a9:3c:cc:21: 9c:80:93:77:17:26:38:a1:6a:4a:3c:45:cb:82:2b:f8:3e:c7: 9a:66:1a:8d:42:47:8e:22:29:27:c4:0a:5d:73:d8:0a:c9:97: 44:30:2c:12:38:18:4d:5e:0f:13:77:86:02:b8:52:70:0b:fc: 27:c6:0a:a1:27:14:33:a5:dc:e5:4d:b8:85:d6:7c:8c:8d:19: 49:c3:c5:84:c7:73:b2:e7:56:ba:8f:ff:6b:89:fc:8b:b3:6c: a6:4b:c7:81:fb:79:bc:8c:01:e7:56:40:0a:d9:56:7a:1a:21: be:9e:c5:2d:3b:49:a7:90:af:c8:46:91:a0:13:a4:6a:e7:65: 41:9f:1e:0b:0b:51:2f:56:d7:37:f3:8f:1e:18:96:30:5c:20: d6:e6:88:cf:0b:ba:d6:a5:ff:9e:27:14:d8:7d:cd:09:8d:f6: 46:fc:57:f3
MariaDB: SSL - Server-Zertifikat erstellen
Nachfolgende Befehle erstellen ein MariaDB Server
-Zertifikate aus der eigenen CA.
1. Schritt: Zuerst müssen jeweils ein
/etc/my.cnf.d/certificates/server-key.pem
- Zertifikats-Schlüssel (Certificate-Key)/etc/my.cnf.d/certificates/server-csr.pem
- Zertifikats-Antrag (Certificate-Request/CSR)
mit nachfolgendem Befehl erstellt werden:
# openssl req -newkey rsa:2048 -days 3649 -nodes -keyout /etc/my.cnf.d/certificates/server-key.pem -out /etc/my.cnf.d/certificates/server-csr.pem Ignoring -days without -x509; not generating a certificate ..+.+......+........+...+...+....+++++++++++++++++++++++++++++++++++++++*.+++++++++++++++++++++++++++++ ++++++++++*......+...+....+..+.+............+.....+...............+.+..+.........+.+...+...........+.+. .+......+....+..+...+......+....+...........+....+..+..........+.........+..+...+.......+.........+...+ ...+.........+.....+...+...+...+....+..+.+..+.......+.........+..+...................+........+.+.....+ .+...........+............+.+......+........+......+............+...+......+.+...+..+.............+.... ...........+..+.......+...............+......+......+.....+...+.+..+.......+...+.........+.....+....... ......+...+...+......+...+..+.........+.........+.......+...+............+...........+...+.+.....+.+..+ ...+.........................+..+...+............+...............+.+.....+.+...+......+.....+.......... +..+....+........+......+.......+.....+...+............+.......++++++ ...+++++++++++++++++++++++++++++++++++++++*.+..+...+......+.......+...+......+.....+...+......+.+...+.. +++++++++++++++++++++++++++++++++++++++*.......+.+..+.........................+..+...+..........+.....+ ...+......+....+..+..........+...+...........+...+................+.....+......................+..+...+ ...+.+.....+.............+..+.+........+....+..+...+.......+........+......+.........+.+.....+.+...+..+ .+...+......+.....+.+............+.....+.......+...+...+...+.....+.........+.+....................+.... ........+.......+..+.........+.......+...............+..+......+...................+........+.........+ ......+.......+......+......+.....+.+........+.+.....+.............+..+.+........+.+.....+.........+... .+..+....+.................+.......+..................+..+......+......+.........+......+...+.......... +.................+.+..+............+....+..+....+...++++++ ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:DE State or Province Name (full name) [Some-State]:Bayern (Bavaria) Locality Name (eg, city) []:Muenchen (Munich) Organization Name (eg, company) [Internet Widgits Pty Ltd]:Klaus Tachtler Organizational Unit Name (eg, section) []:. Common Name (e.g. server FQDN or YOUR name) []:db.idmz.tachtler.net Email Address []:hostmaster@tachtler.net Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:.
Mit nachfolgendem Befehl kann nun überprüft werden, ob der MariaDB Server Schlüssel und der MariaDB Server Zertifikatsantrag erstellt wurden:
# ls -la /etc/my.cnf.d/certificates/* -rw-r--r-- 1 mysql mysql 1704 Oct 7 09:02 /etc/my.cnf.d/certificates/ca-key.pem -rw-r--r-- 1 mysql mysql 1480 Oct 7 09:03 /etc/my.cnf.d/certificates/ca.pem -rw-r--r-- 1 mysql mysql 1086 Oct 7 09:08 /etc/my.cnf.d/certificates/server-csr.pem -rw------- 1 mysql mysql 1704 Oct 7 09:07 /etc/my.cnf.d/certificates/server-key.pem
2. Schritt: Anschliessend muss der soeben erstellte MariaDB Server Schlüssel noch in einen RSA kompatiblen Schlüssel umgewandelt werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# openssl rsa -in /etc/my.cnf.d/certificates/server-key.pem -out /etc/my.cnf.d/certificates/server-key.pem writing RSA key
3. Schritt: Abschliessend wird nun der MariaDB Server Zertifikatsantrag durch signieren durch das ROOT-Zertifikat, ein MariaDB Server Zertifikat erstellt, was mit nachfolgendem Befehl durchgeführt werden kann:
# openssl x509 -req -in /etc/my.cnf.d/certificates/server-csr.pem -days 3649 -CA /etc/my.cnf.d/certificates/ca.pem -CAkey /etc/my.cnf.d/certificates/ca-key.pem -set_serial 01 -out /etc/my.cnf.d/certificates/server-crt.pem Certificate request self-signature ok subject=C = DE, ST = Bayern (Bavaria), L = Muenchen (Munich), O = Klaus Tachtler, CN = db.idmz.tachtler.net, emailAddress = hostmaster@tachtler.net
Mit nachfolgendem Befehl kann überprüft werden, ob das MariaDB Server Zertifikat erstellt wurde:
# ls -la /etc/my.cnf.d/certificates/* -rw-r--r-- 1 mysql mysql 1704 Oct 7 09:02 //etc/my.cnf.d/certificates/ca-key.pem -rw-r--r-- 1 mysql mysql 1480 Oct 7 09:03 //etc/my.cnf.d/certificates/ca.pem -rw-r--r-- 1 mysql mysql 1346 Oct 7 09:09 //etc/my.cnf.d/certificates/server-crt.pem -rw-r--r-- 1 mysql mysql 1086 Oct 7 09:08 //etc/my.cnf.d/certificates/server-csr.pem -rw------- 1 mysql mysql 1704 Oct 7 09:09 //etc/my.cnf.d/certificates/server-key.pem
Mit nachfolgendem Befehl kann das soeben erstellt MariaDB Server
-Zertifikate ausgegeben und damit auch überprüft werden:
# openssl x509 -noout -text -in /etc/my.cnf.d/certificates/server-crt.pem Certificate: Data: Version: 1 (0x0) Serial Number: 1 (0x1) Signature Algorithm: sha256WithRSAEncryption Issuer: C = DE, ST = Bayern (Bavaria), L = Muenchen (Munich), O = Klaus Tachtler, CN = MariaDB CA, emailAddress = hostmaster@tachtler.net Validity Not Before: Oct 7 07:09:42 2023 GMT Not After : Oct 3 07:09:42 2033 GMT Subject: C = DE, ST = Bayern (Bavaria), L = Muenchen (Munich), O = Klaus Tachtler, CN = db.idmz.tachtler.net, emailAddress = hostmaster@tachtler.net Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:e4:e2:88:9c:e0:ec:33:47:71:d7:1e:7e:23:67: 0f:45:90:24:59:04:86:57:a9:5b:dd:44:dc:63:e1: 87:a4:f2:a7:f9:3d:d4:a8:fa:5d:a4:69:70:b2:54: c3:5b:5f:37:8d:4a:27:8c:c2:46:5b:c2:9f:19:21: 30:33:86:48:e7:90:bc:49:d8:ee:5d:1b:e2:5a:4a: d6:4c:a4:f2:65:d3:8d:ca:73:04:8a:2a:d3:cf:a1: e3:ea:53:86:f9:d5:0b:b9:f9:d1:94:0a:2e:33:b5: 00:85:f0:3e:72:d5:de:99:92:24:ce:31:d8:70:04: 5c:8b:4d:41:ec:da:41:02:c8:5b:fd:71:9e:a4:28: 5b:e2:e3:8a:48:78:eb:7d:77:34:5f:4f:f0:20:ed: 3e:5a:ca:31:8e:eb:9b:b7:e8:7c:f7:55:cf:50:f3: b7:57:2f:01:50:0d:69:cc:f1:6e:1c:6f:6a:33:67: 09:05:07:27:18:c3:be:49:6e:01:a1:f1:df:b1:3d: aa:7f:9e:d7:95:30:51:6c:01:17:e1:e8:14:51:37: 6a:66:7f:fb:a5:38:39:42:c8:12:de:e1:25:f4:21: 7b:6c:43:d6:25:e9:b3:f0:1a:3f:e9:0a:c4:4c:f0: ac:e6:b7:be:d6:82:70:c6:2d:75:15:08:bb:ee:f6: 4a:a1 Exponent: 65537 (0x10001) Signature Algorithm: sha256WithRSAEncryption Signature Value: 11:b4:0f:60:bb:a9:5e:97:b0:bb:b6:8f:86:92:60:d9:6b:49: e2:c5:28:e3:a2:d2:83:97:78:b8:07:4a:26:29:26:e4:32:79: 53:5a:9f:86:12:aa:43:6d:eb:9d:b1:f7:1e:e3:58:20:c6:5c: 11:2b:6e:e1:6f:46:68:8d:4c:46:14:3c:b7:2e:2a:ce:cf:a5: 8a:b3:e5:f0:5d:0b:60:63:9c:99:c2:b6:43:40:35:82:3a:e7: b5:5c:27:0e:25:d6:e7:88:07:53:53:8b:d9:fa:20:7b:53:ba: df:d7:e1:6f:69:eb:cc:91:29:c7:df:20:ba:8f:a6:bb:24:89: 75:35:0f:9c:a1:de:c5:a7:18:53:63:a5:1b:94:7d:a9:43:db: 47:22:95:4d:a9:5b:ff:bf:f1:03:5c:13:5a:69:61:e8:52:e9: 1b:24:b9:c7:2b:ed:b5:5d:fb:19:e9:54:10:a4:59:31:a1:50: b0:14:1b:16:d9:bc:f4:de:65:e6:ca:99:e3:2c:b1:61:79:03: 8b:71:d8:b3:3e:f0:54:35:fc:5b:be:8b:25:5d:01:02:40:bc: 65:6e:29:63:4f:d6:a7:90:27:19:bb:ec:3b:37:5e:71:9b:73: 3d:49:1b:85:3a:3f:e5:78:ff:ca:66:f7:c4:9c:66:96:d7:26: b6:cd:88:b7
MariaDB: SSL - Client-Zertifikat erstellen
Nachfolgende Befehle erstellen ein MariaDB Client
-Zertifikate aus der eigenen CA.
HINWEIS - Dies kann in Client wie z.B.
eingebunden werden.
1. Schritt: Zuerst müssen jeweils ein
/etc/my.cnf.d/certificates/client-key.pem
- Zertifikats-Schlüssel (Certificate-Key)/etc/my.cnf.d/certificates/client-csr.pem
- Zertifikats-Antrag (Certificate-Request/CSR)
mit nachfolgendem Befehl erstellt werden:
# openssl req -newkey rsa:2048 -days 3649 -nodes -keyout /etc/my.cnf.d/certificates/client-key.pem -out /etc/my.cnf.d/certificates/client-csr.pem Ignoring -days without -x509; not generating a certificate .....+.........+...+...+......+.+..............+++++++++++++++++++++++++++++++++++++++*................. +.......+......+...+..+....+......+..+............+..........+.....+.........+.+...........+...+......+. .....+....+...+++++++++++++++++++++++++++++++++++++++*..+........+....+.....+......+....+...+......+.... .+....+...........+.+...........+.......+..+.............+..+.+...+.....+......+.+.....+.............+.. .......+...+...+..+...+.+....................+...............+......+.......+......+.....+....+...+...+. ................+.......+.....+...+...+....+..+....+.....+..........+..+.........+.+..+.............+... ...........+...+.......+...+.....+.+....................+.......+...+..............+...+.......+...+.... ...................+.........+.+.........+..+................+..+.............+..+.+.....+.+.....+...+.+ .....+....+..+.+........+.+...+........+...............+....+.....+...+......+.......+.........+......+. .................+......+.....+.+.....+......................+............+...+.....+..........+........ +.......++++++ .........+.........+....+...+.........+...+..+......+.........+....+..+.........................+...+... ......+..+..........+.....+.+...+......+...+..+...+......+.+.....+++++++++++++++++++++++++++++++++++++++ *......+++++++++++++++++++++++++++++++++++++++*..+...+...++++++ ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:DE State or Province Name (full name) [Some-State]:Bayern (Bavaria) Locality Name (eg, city) []:Muenchen (Munich) Organization Name (eg, company) [Internet Widgits Pty Ltd]:Klaus Tachtler Organizational Unit Name (eg, section) []:. Common Name (e.g. server FQDN or YOUR name) []:db.idmz.tachtler.net Email Address []:hostname@tachtler.net Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:.
Mit nachfolgendem Befehl kann nun überprüft werden, ob der MariaDB Client Schlüssel und der MariaDB Client Zertifikatsantrag erstellt wurden:
# ls -la /etc/my.cnf.d/certificates/* -rw-r--r-- 1 mysql mysql 1704 Oct 7 09:02 /etc/my.cnf.d/certificates/ca-key.pem -rw-r--r-- 1 mysql mysql 1480 Oct 7 09:03 /etc/my.cnf.d/certificates/ca.pem -rw-r--r-- 1 mysql mysql 1078 Oct 7 09:17 /etc/my.cnf.d/certificates/client-csr.pem -rw------- 1 mysql mysql 1704 Oct 7 09:16 /etc/my.cnf.d/certificates/client-key.pem -rw-r--r-- 1 mysql mysql 1346 Oct 7 09:09 /etc/my.cnf.d/certificates/server-crt.pem -rw-r--r-- 1 mysql mysql 1086 Oct 7 09:08 /etc/my.cnf.d/certificates/server-csr.pem -rw------- 1 mysql mysql 1704 Oct 7 09:09 /etc/my.cnf.d/certificates/server-key.pem
2. Schritt: Anschliessend muss der soeben erstellte MariaDB Client Schlüssel noch in einen RSA kompatiblen Schlüssel umgewandelt werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# openssl rsa -in /etc/my.cnf.d/certificates/client-key.pem -out /etc/my.cnf.d/certificates/client-key.pem writing RSA key
3. Schritt: Abschliessend wird nun der MariaDB Client Zertifikatsantrag durch signieren durch das ROOT-Zertifikat, ein MariaDB Client Zertifikat erstellt, was mit nachfolgendem Befehl durchführt werden kann:
# openssl x509 -req -in /etc/my.cnf.d/certificates/server-csr.pem -days 3649 -CA /etc/my.cnf.d/certificates/ca.pem -CAkey /etc/my.cnf.d/certificates/ca-key.pem -set_serial 02 -out /etc/my.cnf.d/certificates/client-crt.pem Certificate request self-signature ok subject=C = DE, ST = Bayern (Bavaria), L = Muenchen (Munich), O = Klaus Tachtler, CN = db.idmz.tachtler.net, emailAddress = hostmaster@tachtler.net
Mit nachfolgendem Befehl kann überprüft werden, ob das MariaDB Server Zertifikat erstellt wurde:
# ls -la /etc/my.cnf.d/certificates/* -rw-r--r-- 1 mysql mysql 1704 Oct 7 09:02 /etc/my.cnf.d/certificates/ca-key.pem -rw-r--r-- 1 mysql mysql 1480 Oct 7 09:03 /etc/my.cnf.d/certificates/ca.pem -rw-r--r-- 1 mysql mysql 1346 Oct 7 09:19 /etc/my.cnf.d/certificates/client-crt.pem -rw-r--r-- 1 mysql mysql 1078 Oct 7 09:17 /etc/my.cnf.d/certificates/client-csr.pem -rw------- 1 mysql mysql 1704 Oct 7 09:18 /etc/my.cnf.d/certificates/client-key.pem -rw-r--r-- 1 mysql mysql 1346 Oct 7 09:09 /etc/my.cnf.d/certificates/server-crt.pem -rw-r--r-- 1 mysql mysql 1086 Oct 7 09:08 /etc/my.cnf.d/certificates/server-csr.pem -rw------- 1 mysql mysql 1704 Oct 7 09:09 /etc/my.cnf.d/certificates/server-key.pem
HIWNEIS - Damit der Client auch die Datei
/etc/my.cnf.d/certificates/client-key.pem
lesen kann, muss mit nachfolgendem Befehl dieses Dateirecht wie folgt gesetzt werden:
# chmod 644 /etc/my.cnf.d/certificates/client-key.pem
Mit nachfolgendem Befehl kann überprüft werden, ob für das MariaDB Server Client-Zertifikat die Dateirechte richtig gesetzt wurden:
# ls -la /etc/my.cnf.d/certificates/* -rw-r--r-- 1 mysql mysql 1704 Oct 7 09:02 /etc/my.cnf.d/certificates/ca-key.pem -rw-r--r-- 1 mysql mysql 1480 Oct 7 09:03 /etc/my.cnf.d/certificates/ca.pem -rw-r--r-- 1 mysql mysql 1346 Oct 7 09:19 /etc/my.cnf.d/certificates/client-crt.pem -rw-r--r-- 1 mysql mysql 1078 Oct 7 09:17 /etc/my.cnf.d/certificates/client-csr.pem -rw-r--r-- 1 mysql mysql 1704 Oct 7 09:18 /etc/my.cnf.d/certificates/client-key.pem -rw-r--r-- 1 mysql mysql 1346 Oct 7 09:09 /etc/my.cnf.d/certificates/server-crt.pem -rw-r--r-- 1 mysql mysql 1086 Oct 7 09:08 /etc/my.cnf.d/certificates/server-csr.pem -rw------- 1 mysql mysql 1704 Oct 7 09:09 /etc/my.cnf.d/certificates/server-key.pem
Mit nachfolgendem Befehl kann das soeben erstellt MariaDB Client
-Zertifikate ausgegeben und damit auch überprüft werden:
# openssl x509 -noout -text -in /etc/my.cnf.d/certificates/client-crt.pem Certificate: Data: Version: 1 (0x0) Serial Number: 2 (0x2) Signature Algorithm: sha256WithRSAEncryption Issuer: C = DE, ST = Bayern (Bavaria), L = Muenchen (Munich), O = Klaus Tachtler, CN = MariaDB CA, emailAddress = hostmaster@tachtler.net Validity Not Before: Oct 7 07:19:20 2023 GMT Not After : Oct 3 07:19:20 2033 GMT Subject: C = DE, ST = Bayern (Bavaria), L = Muenchen (Munich), O = Klaus Tachtler, CN = db.idmz.tachtler.net, emailAddress = hostmaster@tachtler.net Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:e4:e2:88:9c:e0:ec:33:47:71:d7:1e:7e:23:67: 0f:45:90:24:59:04:86:57:a9:5b:dd:44:dc:63:e1: 87:a4:f2:a7:f9:3d:d4:a8:fa:5d:a4:69:70:b2:54: c3:5b:5f:37:8d:4a:27:8c:c2:46:5b:c2:9f:19:21: 30:33:86:48:e7:90:bc:49:d8:ee:5d:1b:e2:5a:4a: d6:4c:a4:f2:65:d3:8d:ca:73:04:8a:2a:d3:cf:a1: e3:ea:53:86:f9:d5:0b:b9:f9:d1:94:0a:2e:33:b5: 00:85:f0:3e:72:d5:de:99:92:24:ce:31:d8:70:04: 5c:8b:4d:41:ec:da:41:02:c8:5b:fd:71:9e:a4:28: 5b:e2:e3:8a:48:78:eb:7d:77:34:5f:4f:f0:20:ed: 3e:5a:ca:31:8e:eb:9b:b7:e8:7c:f7:55:cf:50:f3: b7:57:2f:01:50:0d:69:cc:f1:6e:1c:6f:6a:33:67: 09:05:07:27:18:c3:be:49:6e:01:a1:f1:df:b1:3d: aa:7f:9e:d7:95:30:51:6c:01:17:e1:e8:14:51:37: 6a:66:7f:fb:a5:38:39:42:c8:12:de:e1:25:f4:21: 7b:6c:43:d6:25:e9:b3:f0:1a:3f:e9:0a:c4:4c:f0: ac:e6:b7:be:d6:82:70:c6:2d:75:15:08:bb:ee:f6: 4a:a1 Exponent: 65537 (0x10001) Signature Algorithm: sha256WithRSAEncryption Signature Value: 46:c7:5b:79:6c:80:cf:9e:14:0a:00:02:e3:2c:2c:3a:b4:7d: 70:3e:d0:cc:a8:e3:9a:c0:55:8e:c8:c9:7d:0b:b2:75:fa:1d: 9c:be:34:05:b4:9e:0d:2c:7b:ca:32:f5:cf:73:f7:74:c1:54: f3:33:cd:0c:35:c8:21:5b:63:9e:76:74:18:1d:b4:c7:a9:ae: a9:b7:1d:1d:bc:64:4c:3b:70:cc:8c:51:52:48:db:f3:cc:33: 82:e3:4a:47:fd:50:33:4e:60:39:35:c6:cf:ce:ee:20:ed:fe: e7:d7:8b:8d:8f:83:dc:e4:85:6c:8e:58:ee:38:f0:87:1b:3a: 07:29:37:db:83:35:42:75:d2:c8:cf:a8:b8:78:64:e2:b1:70: 6c:98:47:57:a6:af:4f:b9:a1:fd:18:6f:43:5f:78:e2:14:bd: 0e:f9:35:04:ab:10:58:42:ab:e2:e0:7b:12:f0:20:31:55:21: 06:ad:62:5c:ec:68:08:2d:24:da:96:d8:28:3f:1b:81:e2:a9: 1f:cf:a1:94:43:de:31:7b:a0:e7:50:89:31:49:f1:42:e8:97: 34:44:6c:82:d0:45:d9:cf:d3:60:40:e8:4c:9c:3d:e4:b0:00: 00:43:42:05:fd:a2:0c:78:aa:0d:68:f1:2a:8f:a3:63:17:05: 85:64:82:c7
/etc/my.cnf.d/server.cnf
Um den MariaDB-Datenbank-Server mit SSL-Verschlüsselung nutzen zu können, ist es erforderlich das
- ROOT-Zertifikat aus der eigenen CA und das
MariaDB Server
-ZertifikateMariaDB Server
-Schlüssel
in den mit einzubinden.
Die Anpassungen sind in der Konfigurationsdatei /etc/my.cnf.d/server.cnf
vorzunehmen und in diesem Beispiel, durch voranstellen eines Kommentars im Format:
# Tachtler
gekennzeichnet.
Hier eine mögliche Anpassung (komplette Konfigurationsdatei/nur SSL-Verschlüsselung):
[mariadb] # Tachtler # default: datadir=/var/lib/mysql datadir=/var/lib/mysql/data # Tachtler - NEW - collation_server = utf8mb4_unicode_ci character_set_server = utf8mb4 # Tachtler - NEW - ssl_cert = /etc/my.cnf.d/certificates/server-crt.pem ssl_key = /etc/my.cnf.d/certificates/server-key.pem ssl_ca = /etc/my.cnf.d/certificates/ca.pem
Falls nicht bereits geschehen, sollten die Besitz- und Dateirechte mit nachfolgendem Befehl wie folgt gesetzt werden:
# chown -R mysql:mysql /etc/my.cnf.d/certificates
Nun muss ein Neustart mit nachfolgendem Befehl durchgeführt werden:
# systemctl restart mariadb.service
HINWEIS - Es erfolgen keine weiteren Ausgaben, wenn der Start erfolgreich war !
Um überprüfen zu können, ob eine SSL-Verschlüsselung nun im MariaDB-Datenbank-Server aktiv ist, ist eine Anmeldung am MariaDB-Datenbank-Server erforderlich und nachfolgende Befehle, welche den Status in Bezug auf die SSL-Verschlüsselung zeigen:
# /usr/bin/mariadb -h localhost -u root Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 7 Server version: 11.1.2-MariaDB Arch Linux Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
Anschließend zeigt nachfolgender SQL-Befehl die SSL-Verschlüsselungseinstellungen an:
MariaDB [(none)]> SHOW VARIABLES LIKE '%ssl%'; +---------------------+-------------------------------------------+ | Variable_name | Value | +---------------------+-------------------------------------------+ | have_openssl | YES | | have_ssl | YES | | ssl_ca | /etc/my.cnf.d/certificates/ca.pem | | ssl_capath | | | ssl_cert | /etc/my.cnf.d/certificates/server-crt.pem | | ssl_cipher | | | ssl_crl | | | ssl_crlpath | | | ssl_key | /etc/my.cnf.d/certificates/server-key.pem | | version_ssl_library | OpenSSL 3.1.3 19 Sep 2023 | +---------------------+-------------------------------------------+ 10 rows in set (0.002 sec) MariaDB [(none)]>
Nachfolgender SQL-Befehl zeigt die SSL-Verschlüsselte Verbindung zum MariaDB-Server an, ob eine SSL-Verschlüsselte Verbindungen durchgeführt wurde:
MariaDB [(none)]> SHOW SESSION STATUS LIKE 'Ssl_cipher'; +---------------+------------------------+ | Variable_name | Value | +---------------+------------------------+ | Ssl_cipher | TLS_AES_256_GCM_SHA384 | +---------------+------------------------+ 1 row in set (0.001 sec) MariaDB [(none)]>
Um die Verbindung zum MariaDB-Datenbank-Server zu beenden, kann nachfolgender Befehl verwendet werden:
MariaDB [(none)]> quit Bye
Nachfolgender Befehl baut eine SSL-Verschlüsselte Verbindung zum MariaDB-Server auf und zeigt, ob SSL-Verschlüsselte Verbindungen möglich sind:
# openssl s_client -connect db.idmz.tachtler.net:636 -showcerts -state
/etc/my.cnf.d/client.cnf
Um den MariaDB-Datenbank-Client mit SSL-Verschlüsselung nutzen zu können, ist es erforderlich das
- ROOT-Zertifikat aus der eigenen CA und das
MariaDB Client
-ZertifikateMariaDB Client
-Schlüssel
in den mit einzubinden.
Die Anpassungen sind in der Konfigurationsdatei /etc/my.cnf.d/client.cnf
vorzunehmen und in diesem Beispiel, durch voranstellen eines Kommentars im Format:
# Tachtler
gekennzeichnet.
Hier eine mögliche Anpassung (komplette Konfigurationsdatei/nur SSL-Verschlüsselung):
[client-mariadb] # Tachtler - NEW - default-character-set = utf8mb4 # Tachtler - NEW - ssl_cert = /etc/my.cnf.d/certificates/client-crt.pem ssl_key = /etc/my.cnf.d/certificates/client-key.pem ssl_ca = /etc/my.cnf.d/certificates/ca.pem ssl-verify-server-cert