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
- mysqld vorübergehend in den permissiven Modus versetzen
- SELinux-Richtlinie des Servers erstellen und laden
- Dateikontexte festlegen
- Dateikontext für das Datenverzeichnis festlegen
- Festlegen des Dateikontexts für Protokolldateien
- Dateikontext für Optionsdateien festlegen
- Zugriff auf den Tmpfs-Dateikontext erlauben
- Fehlerbehebung bei SELinux-Problemen
- Dateisystemberechtigungsfehler
- SELinux und MariaDB auf einem anderen Port
- Generieren von SELinux-Richtlinien mit audit2allow
Ü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 datadir
verwenden, 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_t
vorü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/).