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