Qu'est-ce que le contexte SELinux
Lorsque SELinux est appliqué dans le système, il vérifie les règles indiquant quel processus peut accéder à quels fichiers, répertoires et ports. Chaque fichier, processus, répertoire et port possède une étiquette de sécurité spéciale connue sous le nom de contexte SELinux, qui est un nom utilisé pour déterminer si un processus peut accéder à un fichier, un répertoire ou un port. Par défaut, la stratégie n'autorise aucune interaction à moins qu'une règle explicite n'accorde l'accès.
Les étiquettes SELinux ont des contextes différents :utilisateur, rôle, type et sensibilité. La plupart des commandes Linux ont l'option -Z pour afficher les contextes SELinux. Par exemple, ps, ls, cp et mkdir utilisent tous l'option -Z pour afficher ou définir les contextes SELinux d'un fichier, d'un répertoire, d'un processus ou d'un port.
Le serveur MySQL lit et écrit dans divers fichiers si le contexte SELinux n'est pas défini correctement sur ces fichiers, le processus mysqld peut être bloqué pour accéder aux fichiers. Dans certains cas, cela peut empêcher mysqld de consigner les erreurs.
Comment répertorier les contextes MySQL actuels
Vous pouvez lister les contextes actuels en utilisant :
# semanage fcontext -l | grep -i mysql
Comment définir le contexte du répertoire de données
L'emplacement par défaut du répertoire de données est /var/lib/mysql/ , le contexte SELinux utilisé est mysqld_db_t . Si vous modifiez le fichier de configuration pour utiliser un emplacement différent pour le répertoire de données, ou l'un des fichiers normalement dans le répertoire de données (par exemple, les journaux binaires), vous devrez peut-être définir le contexte du nouvel emplacement à l'aide de
# 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
Comment définir le contexte du fichier journal des erreurs
L'emplacement par défaut des RPM RedHat est /var/log/mysqld.log , le contexte SELinux utilisé est mysqld_log_t . Si vous modifiez le fichier de configuration pour utiliser un emplacement différent, vous devrez peut-être définir le contexte du nouvel emplacement à l'aide :
# semanage fcontext -a -t mysqld_log_t "/path/to/my/custom/error.log" # restorecon -Rv /path/to/my/custom/error.log
Comment définir le contexte du fichier PID
L'emplacement par défaut du fichier PID est /var/run/mysqld/mysqld.pid , le contexte SELinux utilisé est mysqld_var_run_t . Si vous modifiez le fichier de configuration pour utiliser un emplacement différent, vous devrez peut-être définir le contexte du nouvel emplacement à l'aide :
# semanage fcontext -a -t mysqld_var_run_t "/path/to/my/custom/pidfile/directory/.*?" # restorecon -Rv /path/to/my/custom/pidfile/directory
Comment définir le contexte de socket de domaine unix
L'emplacement par défaut du socket de domaine unix est /var/lib/mysql/mysql.sock , le contexte SELinux utilisé est mysqld_var_run_t . Si vous modifiez le fichier de configuration pour utiliser un emplacement différent, vous devrez peut-être définir le contexte du nouvel emplacement à l'aide :
# semanage fcontext -a -t mysqld_var_run_t "/path/to/my/custom/mysql.sock" # restorecon -Rv /path/to/my/custom/mysql.sock
Comment définir le contexte du port TCP
Le port TCP par défaut est 3306 , le contexte SELinux utilisé est mysqld_port_t . Si vous modifiez le fichier de configuration pour utiliser un port TCP différent, ou si vous activez la réplication de groupe qui utilise un port supplémentaire (généralement le port 13306), vous devrez peut-être définir le contexte du nouveau port en utilisant :
# semanage port -a -t mysqld_port_t -p tcp 13306 # restorecon
Comment définir le contexte du répertoire secure_file_priv
Pour les versions de MySQL depuis 5.5.53, 5.6.34 et 5.7.16. L'installation du serveur RPM crée un répertoire /var/lib/mysql-files/, mais ne définit pas le contexte SELinux sur ce répertoire. Ce répertoire est destiné à être utilisé pour des opérations telles que 'SELECT … INTO OUTFILE ‘. Si vous activez l'utilisation de ce répertoire en définissant secure_file_priv, vous devrez peut-être définir le contexte à l'aide de :
# semanage fcontext -a -t mysqld_db_t "/var/lib/mysql-files/(/.*)?" # restorecon -Rv /var/lib/mysql-files
Si vous le définissez sur un nouvel emplacement, vous devrez modifier le chemin. Pour plus d'informations sur cette variable, veuillez consulter https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv. Pour des raisons de sécurité, ce répertoire ne doit jamais se trouver dans le répertoire de données.
Outils requis
Le binaire semanage fait partie du package policycoreutils-python :
# yum install policycoreutils-python
Pour utiliser semanage avec les premières versions de RHEL 6 avec python 2.6, vous devrez peut-être installer un rétroportage du module de collecte python OrderedDict à l'aide de python-pip à partir du référentiel EPEL.
Installez le référentiel EPEL :
# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/$(uname -m)/epel-release-6-8.noarch.rpm
Installez python-pip :
# yum install python-pip
Si l'installation de python-pip renvoie cette erreur :
Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
vous devrez peut-être mettre à jour vos certificats SSL CA en utilisant :
# yum --disablerepo=epel -y update ca-certificates