Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:mariadb_archlinux

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.

:!: 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

  • mariadb - ist im extra-Repository von ArchLinux enthalten

installiert werden.

Mit nachfolgendem Befehl, wird das Pakete mariadb installiert:

# pacman --noconfirm -S mariadb

Installationsverlauf

:!: 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

Installierte Dateien

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 Zugriff
    Switch 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-Zugriff
    Disallow root login remotely? [Y/n] Y
     ... Success!
  • Nicht benötigte Datenbanken, wie z.B. die Datenbank test entfernen
    Remove 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!

  1. Zunächst wird es so konfiguriert, dass es versucht, das Authentifizierungs-Plugin unix_socket zu verwenden. Dies ermöglicht es dem Benutzer root@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.
  2. 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

  1. Erstellen einer eignen CA - MariaDB CA
  2. Erstellen eines self-signed-Zertifikats für den Server - db.idmz.tachtler.net
  3. 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-Zertifikate
  • MariaDB 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-Zertifikate
  • MariaDB 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
Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
tachtler/mariadb_archlinux.txt · Zuletzt geändert: 2023/11/17 10:55 von klaus