Co je kontext SELinux
Když je v systému vynucen SELinux, kontroluje pravidla, který proces může přistupovat ke kterým souborům, adresářům a portům. Každý soubor, proces, adresář a port má speciální bezpečnostní štítek známý jako kontext SELinux, což je název používaný k určení, zda má proces přístup k souboru, adresáři nebo portu. Ve výchozím nastavení zásada nepovoluje žádnou interakci, pokud explicitní pravidlo neudělí přístup.
Štítky SELinux mají různé kontexty:uživatel, role, typ a citlivost. Většina příkazů Linuxu má volbu -Z pro zobrazení kontextů SELinux. Například ps, ls, cp a mkdir všechny používají volbu -Z k zobrazení nebo nastavení kontextů SELinux souboru, adresáře, procesu nebo portu.
Server MySQL čte z různých souborů a zapisuje do nich, pokud u těchto souborů není správně nastaven kontext SELinux, proces mysqld může být zablokován v přístupu k souborům. V některých případech to může zabránit mysqld v protokolování chyb.
Jak vypsat aktuální kontext MySQL
Aktuální kontexty můžete vypsat pomocí:
# semanage fcontext -l | grep -i mysql
Jak nastavit kontext datového adresáře
Výchozí umístění datového adresáře je /var/lib/mysql/ , použitý kontext SELinux je mysqld_db_t . Pokud upravíte konfigurační soubor tak, aby používal jiné umístění pro datový adresář nebo kterýkoli ze souborů běžně v datovém adresáři (např. binární protokoly), možná budete muset nastavit kontext pro nové umístění pomocí
# 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
Jak nastavit kontext souboru protokolu chyb
Výchozí umístění pro RedHat RPM je /var/log/mysqld.log , použitý kontext SELinux je mysqld_log_t . Pokud upravíte konfigurační soubor tak, aby používal jiné umístění, možná budete muset nastavit kontext pro nové umístění pomocí:
# semanage fcontext -a -t mysqld_log_t "/path/to/my/custom/error.log" # restorecon -Rv /path/to/my/custom/error.log
Jak nastavit kontext souboru PID
Výchozí umístění souboru PID je /var/run/mysqld/mysqld.pid , použitý kontext SELinux je mysqld_var_run_t . Pokud upravíte konfigurační soubor tak, aby používal jiné umístění, možná budete muset nastavit kontext pro nové umístění pomocí:
# semanage fcontext -a -t mysqld_var_run_t "/path/to/my/custom/pidfile/directory/.*?" # restorecon -Rv /path/to/my/custom/pidfile/directory
Jak nastavit kontext soketu unixové domény
Výchozí umístění pro soket domény unix je /var/lib/mysql/mysql.sock , použitý kontext SELinux je mysqld_var_run_t . Pokud upravíte konfigurační soubor tak, aby používal jiné umístění, možná budete muset nastavit kontext pro nové umístění pomocí:
# semanage fcontext -a -t mysqld_var_run_t "/path/to/my/custom/mysql.sock" # restorecon -Rv /path/to/my/custom/mysql.sock
Jak nastavit kontext portu TCP
Výchozí port TCP je 3306 , použitý kontext SELinux je mysqld_port_t . Pokud upravíte konfigurační soubor tak, aby používal jiný port TCP, nebo povolíte replikaci skupiny, která používá další port (obvykle port 13306), možná budete muset nastavit kontext pro nový port pomocí:
# semanage port -a -t mysqld_port_t -p tcp 13306 # restorecon
Jak nastavit kontext adresáře secure_file_priv
Pro verze MySQL od 5.5.53, 5.6.34 a 5.7.16. Instalace RPM serveru vytvoří adresář /var/lib/mysql-files/, ale nenastaví kontext SELinux na tento adresář. Tento adresář je určen k použití pro operace, jako je „SELECT … INTO OUTFILE ‘. Pokud povolíte používání tohoto adresáře nastavením secure_file_priv, možná budete muset nastavit kontext pomocí:
# semanage fcontext -a -t mysqld_db_t "/var/lib/mysql-files/(/.*)?" # restorecon -Rv /var/lib/mysql-files
Pokud toto nastavíte na nové umístění, budete muset upravit cestu. Další informace o této proměnné najdete na https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv. Z bezpečnostních důvodů by tento adresář nikdy neměl být v datovém adresáři.
Požadované nástroje
Binární soubor semanage je součástí balíčku policycoreutils-python:
# yum install policycoreutils-python
Chcete-li používat semanage s dřívějšími verzemi RHEL 6 s pythonem 2.6, možná budete muset nainstalovat backport modulu CollectionedDict python pomocí python-pip z úložiště EPEL.
Nainstalujte úložiště EPEL:
# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/$(uname -m)/epel-release-6-8.noarch.rpm
Nainstalujte python-pip:
# yum install python-pip
Pokud instalace python-pip vrátí tuto chybu:
Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
možná budete muset aktualizovat své certifikáty SSL CA pomocí:
# yum --disablerepo=epel -y update ca-certificates