GNU/Linux >> LINUX-Kenntnisse >  >> Cent OS

Anleitung zum Auflisten und Festlegen des SELinux-Kontexts für MySQL Server

Was ist SELinux-Kontext

Wenn SELinux im System erzwungen wird, prüft es auf Regeln, welcher Prozess auf welche Dateien, Verzeichnisse und Ports zugreifen kann. Jede Datei, jeder Prozess, jedes Verzeichnis und jeder Port hat ein spezielles Sicherheitslabel, das als SELinux-Kontext bezeichnet wird. Dies ist ein Name, der verwendet wird, um zu bestimmen, ob ein Prozess auf eine Datei, ein Verzeichnis oder einen Port zugreifen kann. Standardmäßig lässt die Richtlinie keine Interaktion zu, es sei denn, eine explizite Regel gewährt Zugriff.

SELinux-Labels haben unterschiedliche Kontexte:Benutzer, Rolle, Typ und Empfindlichkeit. Die meisten Linux-Befehle haben die Option -Z, um SELinux-Kontexte anzuzeigen. Beispielsweise verwenden ps, ls, cp und mkdir alle die Option -Z, um SELinux-Kontexte einer Datei, eines Verzeichnisses, eines Prozesses oder eines Ports anzuzeigen oder festzulegen.

Der MySQL-Server liest aus und schreibt in verschiedene Dateien, wenn der SELinux-Kontext für diese Dateien nicht richtig eingestellt ist, kann der mysqld-Prozess daran gehindert werden, auf die Dateien zuzugreifen. In einigen Fällen kann dies mysqld daran hindern, Fehler zu protokollieren.

Wie man die aktuellen MySQL-Kontexte auflistet

Sie können die aktuellen Kontexte auflisten mit:

# semanage fcontext -l | grep -i mysql

So legen Sie den Datenverzeichniskontext fest

Der Standardspeicherort für das Datenverzeichnis ist /var/lib/mysql/ , ist der verwendete SELinux-Kontext mysqld_db_t . Wenn Sie die Konfigurationsdatei bearbeiten, um einen anderen Speicherort für das Datenverzeichnis oder eine der Dateien zu verwenden, die sich normalerweise im Datenverzeichnis befinden (z. B. die Binärlogs), müssen Sie möglicherweise den Kontext für den neuen Speicherort mithilfe von

festlegen
# semanage fcontext -a -t mysqld_db_t "/path/to/my/custom/datadir(/.*)?"
# restorecon -Rv /path/to/my/custom/datadir
# semanage fcontext -a -t mysqld_db_t "/path/to/my/custom/logdir(/.*)?"
# restorecon -Rv /path/to/my/custom/logdir

So legen Sie den Kontext der Fehlerprotokolldatei fest

Der Standardspeicherort für RedHat-RPMs ist /var/log/mysqld.log , der verwendete SELinux-Kontext ist mysqld_log_t . Wenn Sie die Konfigurationsdatei bearbeiten, um einen anderen Speicherort zu verwenden, müssen Sie möglicherweise den Kontext für den neuen Speicherort festlegen mit:

# semanage fcontext -a -t mysqld_log_t "/path/to/my/custom/error.log"
# restorecon -Rv /path/to/my/custom/error.log

So stellen Sie den Kontext der PID-Datei ein

Der Standardspeicherort für die PID-Datei ist /var/run/mysqld/mysqld.pid , ist der verwendete SELinux-Kontext mysqld_var_run_t . Wenn Sie die Konfigurationsdatei bearbeiten, um einen anderen Speicherort zu verwenden, müssen Sie möglicherweise den Kontext für den neuen Speicherort festlegen mit:

# semanage fcontext -a -t mysqld_var_run_t "/path/to/my/custom/pidfile/directory/.*?"
# restorecon -Rv /path/to/my/custom/pidfile/directory

So setzen Sie den Unix-Domain-Socket-Kontext

Der Standardspeicherort für den Unix-Domain-Socket ist /var/lib/mysql/mysql.sock , ist der verwendete SELinux-Kontext mysqld_var_run_t . Wenn Sie die Konfigurationsdatei bearbeiten, um einen anderen Speicherort zu verwenden, müssen Sie möglicherweise den Kontext für den neuen Speicherort festlegen mit:

# semanage fcontext -a -t mysqld_var_run_t "/path/to/my/custom/mysql.sock"
# restorecon -Rv /path/to/my/custom/mysql.sock

So stellen Sie den TCP-Port-Kontext ein

Der Standard-TCP-Port ist 3306 , ist der verwendete SELinux-Kontext mysqld_port_t . Wenn Sie die Konfigurationsdatei bearbeiten, um einen anderen TCP-Port zu verwenden, oder wenn Sie die Gruppenreplikation aktivieren, die einen zusätzlichen Port (normalerweise Port 13306) verwendet, müssen Sie möglicherweise den Kontext für den neuen Port festlegen, indem Sie Folgendes verwenden:

# semanage port -a -t mysqld_port_t -p tcp 13306
# restorecon

So legen Sie den Kontext des Verzeichnisses secure_file_priv fest

Für MySQL-Versionen ab 5.5.53, 5.6.34 und 5.7.16. Die Installation des Server-RPM erstellt ein Verzeichnis /var/lib/mysql-files/, legt aber nicht den SELinux-Kontext für dieses Verzeichnis fest. Dieses Verzeichnis soll für Operationen wie „SELECT … INTO OUTFILE verwendet werden ‘. Wenn Sie die Verwendung dieses Verzeichnisses aktivieren, indem Sie secure_file_priv festlegen, müssen Sie möglicherweise den Kontext festlegen mit:

# semanage fcontext -a -t mysqld_db_t "/var/lib/mysql-files/(/.*)?"
# restorecon -Rv /var/lib/mysql-files

Wenn Sie dies auf einen neuen Speicherort festlegen, müssen Sie den Pfad bearbeiten. Weitere Informationen zu dieser Variable finden Sie unter https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv. Aus Sicherheitsgründen sollte dieses Verzeichnis niemals innerhalb des Datenverzeichnisses liegen.

Erforderliche Werkzeuge

Die Semanage-Binärdatei ist Teil des Pakets policycoreutils-python:

# yum install policycoreutils-python

Um Semanage mit frühen Versionen von RHEL 6 mit Python 2.6 zu verwenden, müssen Sie möglicherweise eine Rückportierung des OrderedDict-Python-Erfassungsmoduls mit python-pip aus dem EPEL-Repository installieren.

Installieren Sie das EPEL-Repository:

# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/$(uname -m)/epel-release-6-8.noarch.rpm

Installieren Sie python-pip:

# yum install python-pip

Wenn die Installation von python-pip diesen Fehler zurückgibt:

Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again

Möglicherweise müssen Sie Ihre SSL-CA-Zertifikate aktualisieren mit:

# yum --disablerepo=epel -y update ca-certificates


Cent OS
  1. Wie setzt man das MySQL-Root-Passwort für Plain-Server, cPanel-Server und Plesk-Server zurück?

  2. So richten Sie einen Ubuntu/Debian LAMP-Server ein

  3. DHCP-Server auf CentOS 8 einrichten – wie geht das?

  4. Wie installiere und konfiguriere ich NTP für die Zeitsynchronisierung in CentOS?

  5. Was sind SELinux-Modi und wie werden sie eingestellt?

So installieren Sie MySQL 8 unter CentOS 8

So richten Sie NTP-Server und -Client unter Debian 11 ein

So richten Sie einen OpenVPN-Server unter Ubuntu 22.04 ein und konfigurieren ihn

So installieren und konfigurieren Sie Gitlab CE Server auf Centos 8

So richten Sie einen DHCP-Server unter CentOS 8 ein

So richten Sie NFS-Server und -Client unter CentOS 8 ein