Security-Enhanced Linux with MariaDB

Security-Enhanced Linux (SELinux) ist ein Linux-Kernelmodul, das einen Rahmen für die Konfiguration eines MAC-Systems (Mandatory Access Control) für viele Ressourcen auf dem System bietet. Es ist standardmäßig auf einigen Linux-Distributionen aktiviert, einschließlich RHEL, CentOS, Fedora und anderen ähnlichen Linux-Distributionen. SELinux verhindert, dass Programme auf Dateien, Verzeichnisse oder Ports zugreifen, es sei denn, es ist für den Zugriff auf diese Ressourcen konfiguriert.

Überprüfen, ob SELinux aktiviert ist

Um zu überprüfen, ob SELinux aktiviert ist, führen Sie den Befehl getenforce aus. Zum Beispiel:

getenforce

mysqld vorübergehend in den permissiven Modus versetzen

Wenn Sie Probleme beheben, die SELinux Ihrer Meinung nach verursachen könnte, kann es hilfreich sein, mysqld_t vorübergehend in den permissiven Modus zu versetzen. Dies kann durch Ausführen des Befehls semanage erfolgen. Beispielsweise:

sudo semanage permissive -a mysqld_t

Wenn dies das Problem gelöst hat, bedeutet dies, dass die aktuelle SELinux-Richtlinie der Schuldige ist. Sie müssen die SELinux-Richtlinie oder die Labels für MariaDB anpassen.

SELinux-Richtlinie des Servers erstellen und laden

MariaDB Server enthält eine SELinux-Richtlinie, die nicht standardmäßig erstellt oder geladen wird. Auf vielen Systemen wird die Richtlinie auf /usr/share/mysql/policy/selinux/mariadb-server.fc installiert. Um es zu erstellen und zu laden, führen Sie Folgendes aus:

Dateikontexte festlegen

SELinux verwendet Dateikontexte, um zu bestimmen, wer auf diese Datei zugreifen kann.

Dateikontexte werden mit den Befehlen semanage fcontext und restorecon verwaltet.

Auf vielen Systemen wird das Dienstprogramm semanage vom Paket policycoreutils-python und das Dienstprogramm restorecon vom Paket policycoreutils installiert. Sie können diese mit folgendem Befehl installieren:

sudo yum install policycoreutils policycoreutils-python

Der aktuelle Kontext einer Datei oder eines Verzeichnisses kann überprüft werden, indem Sie ls mit den Optionen --context oder --scontext ausführen.

Dateikontext für das Datenverzeichnis festlegen

Wenn Sie ein benutzerdefiniertes Verzeichnis für datadirverwenden, müssen Sie möglicherweise den Dateikontext für dieses Verzeichnis festlegen. Der SELinux-Dateikontext für MariaDB-Datendateien lautet mysqld_db_t. Sie können feststellen, ob dieser Dateikontext auf Ihrem System vorhanden ist und welchen Dateien oder Verzeichnissen er zugeordnet ist, indem Sie den folgenden Befehl ausführen:

sudo semanage fcontext --list | grep mysqld_db_t

Wenn Sie den Dateikontext für Ihr benutzerdefiniertes Verzeichnis für Ihre datadir festlegen möchten, können Sie dies tun, indem Sie die Befehle semanage fcontext und restorecon ausführen. Beispiel:

sudo semanage fcontext -a -t mysqld_db_t "/mariadb/data(/.*)?"sudo restorecon -Rv /mariadb/data

Wenn Sie den aktuellen Dateikontext überprüfen möchten, können Sie dies tun, indem Sie ls mit den Optionen --context oder --scontext ausführen. Beispielsweise:

ls --directory --scontext /mariadb/data

Festlegen des Dateikontexts für Protokolldateien

Wenn Sie ein benutzerdefiniertes Verzeichnis für Protokolldateien verwenden, müssen Sie möglicherweise den Dateikontext für dieses Verzeichnis festlegen. Der SELinux-Dateikontext für MariaDB-Protokolldateien lautet mysqld_log_t. Sie können feststellen, ob dieser Dateikontext auf Ihrem System vorhanden ist und welchen Dateien oder Verzeichnissen er zugeordnet ist, indem Sie den folgenden Befehl ausführen:

sudo semanage fcontext --list | grep mysqld_log_t

Wenn Sie den Dateikontext für Ihr benutzerdefiniertes Verzeichnis für Protokolldateien festlegen möchten, können Sie dies tun, indem Sie die Befehle semanage fcontext und restorecon ausführen. Beispiel:

sudo semanage fcontext -a -t mysqld_log_t "/var/log/mysql(/.*)?"sudo restorecon -Rv /var/log/mysql

Wenn Sie den aktuellen Dateikontext überprüfen möchten, können Sie dies tun, indem Sie ls mit den Optionen --context oder --scontext ausführen. Beispielsweise:

ls --directory --scontext /var/log/mysql

Dateikontext für Optionsdateien festlegen

Wenn Sie ein benutzerdefiniertes Verzeichnis für Optionsdateien verwenden, müssen Sie möglicherweise den Dateikontext für dieses Verzeichnis festlegen. Der SELinux-Dateikontext für MariaDB-Optionsdateien lautet mysqld_etc_t. Sie können feststellen, ob dieser Dateikontext auf Ihrem System vorhanden ist und welchen Dateien oder Verzeichnissen er zugeordnet ist, indem Sie den folgenden Befehl ausführen:

sudo semanage fcontext --list | grep mysqld_etc_t

Wenn Sie den Dateikontext für Ihr benutzerdefiniertes Verzeichnis für Optionsdateien festlegen möchten, können Sie dies tun, indem Sie die Befehle semanage fcontext und restorecon ausführen. Beispiel:

sudo semanage fcontext -a -t mysqld_etc_t "/etc/mariadb(/.*)?"sudo restorecon -Rv /etc/mariadb

Wenn Sie den aktuellen Dateikontext überprüfen möchten, können Sie dies tun, indem Sie ls mit den Optionen --context oder --scontext ausführen. Beispielsweise:

ls --directory --scontext /etc/mariadb

Zugriff auf den Tmpfs-Dateikontext erlauben

Wenn Sie Ihr tmpdir auf einem tmpfs Dateisystem mounten oder ein tmpfs Dateisystem auf /run/shm, dann müssen Sie möglicherweise zulassen, dass mysqld_t Zugriff auf einige tmpfs-bezogene Dateikontexte hat. Beispiel:

Fehlerbehebung bei SELinux-Problemen

Möglicherweise müssen Sie SELinux-bezogene Probleme in folgenden Fällen beheben:

  • MariaDB verwendet einen nicht standardmäßigen Port.
  • MariaDB liest oder schreibt in einige Dateien (datadir, Protokolldateien, Optionsdateien usw.), die sich auf nicht standardmäßigen Pfaden befinden.
  • MariaDB verwendet ein Plugin, das Zugriff auf Ressourcen erfordert, die Standardinstallationen nicht verwenden.

Dateisystemberechtigungsfehler

Wenn die Dateisystemberechtigungen für ein MariaDB-Verzeichnis gut aussehen, das MariaDB-Fehlerprotokoll jedoch immer noch Fehler aufweist, die folgendermaßen aussehen:

Dann überprüfen Sie SELinux’s /var/log/audit/audit.log für Protokolleinträge, die folgendermaßen aussehen:

Wenn Sie Einträge sehen, die ähnlich aussehen, müssen Sie höchstwahrscheinlich die Dateikontexte für einige Dateien oder Verzeichnisse anpassen. Weitere Informationen dazu finden Sie unter Festlegen von Dateikontexten.

SELinux und MariaDB auf einem anderen Port

TCP- und UDP-Ports sind ebenfalls für die Berechtigung zum Binden aktiviert. Wenn Sie einen anderen Port oder einige Galera-Ports verwenden, konfigurieren Sie SELinux, um diese Ports verwenden zu können:

sudo semanage port -a -t mysqld_port_t -p tcp 3307 

Generieren von SELinux-Richtlinien mit audit2allow

In einigen Fällen benötigt ein MariaDB-System möglicherweise nicht standardmäßige Richtlinien. Es ist möglich, diese Richtlinien mit dem Dienstprogramm audit2allow aus dem SELinux-Überwachungsprotokoll zu erstellen. Die Dienstprogramme semanage und semodule werden ebenfalls benötigt.

Auf vielen Systemen werden die Dienstprogramme audit2allow und semanage vom Paket policycoreutils-python und das Dienstprogramm semodule vom Paket policycoreutils paket. Sie können diese mit dem folgenden Befehl installieren:

sudo yum install policycoreutils policycoreutils-python

Der folgende Prozess kann verwendet werden, um eine Richtlinie aus dem Überwachungsprotokoll zu generieren:

  • Dontaudits aus der Richtlinie entfernen:
sudo semodule -DB
  • Versetzen Sie mysqld_tvorübergehend in den permissiven Modus. Beispiel:
sudo semanage permissive -a mysqld_t
  • Starten Sie MariaDB.
  • Tun Sie, was auch immer SELinux-Fehler verursacht hat.
  • Verwenden Sie das generierte Überwachungsprotokoll, um eine Richtlinie zu erstellen:
sudo grep mysqld /var/log/audit/audit.log | audit2allow -M mariadb_localsudo semodule -i mariadb_local.pp
  • Ziehen Sie mysqld_t aus dem permissiven Modus. Beispielsweise:
sudo semanage permissive -d mysqld_t
  • Dontaudits für die Richtlinie wiederherstellen:
sudo setmodule -B

Das gleiche Verfahren kann verwendet werden, wenn MariaDB gestartet wird, SELinux jedoch verhindert, dass es ordnungsgemäß funktioniert. Zum Beispiel kann SELinux verhindern, dass das PAM-Plugin Benutzer authentifiziert. Die Lösung ist dieselbe: Aktivieren Sie die Überwachung, wechseln Sie zu permissiv, erstellen Sie eine Richtlinie aus dem Überwachungsprotokoll, was auch immer SELinux Ihnen nicht erlaubt hat.

Wenn Sie benötigte SELinux-Berechtigungen entdecken, melden Sie bitte die benötigten Berechtigungen Ihrem Betriebssystem Bug Tracking, damit alle Benutzer von Ihrer Arbeit profitieren können (z.B. Red Hat Bugzilla https://bugzilla.redhat.com/).

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.