Linux amélioré par la sécurité avec MariaDB

Linux amélioré par la sécurité (SELinux) est un module du noyau Linux qui fournit un cadre pour configurer le système de contrôle d’accès obligatoire (MAC) pour de nombreuses ressources sur le système. Il est activé par défaut sur certaines distributions Linux, y compris RHEL, CentOS, Fedora et d’autres distributions Linux similaires. SELinux empêche les programmes d’accéder aux fichiers, répertoires ou ports à moins qu’ils ne soient configurés pour accéder à ces ressources.

Vérifier Si SELinux Est Activé

Pour vérifier si SELinux est activé, exécutez la commande getenforce. Par exemple :

getenforce

Mettre temporairement mysqld En Mode Permissif

Lorsque vous résolvez des problèmes que SELinux pourrait causer, il peut être utile de mettre temporairement mysqld_t en mode permissif. Cela peut être fait en exécutant la commande semanage. Exemple:

sudo semanage permissive -a mysqld_t

Si cela a résolu le problème, cela signifie que la stratégie SELinux actuelle est le coupable. Vous devez ajuster la stratégie ou les étiquettes SELinux pour MariaDB.

Création et chargement de la Stratégie SELinux du serveur

Le serveur MariaDB est livré avec une stratégie SELinux qui n’est pas générée ou chargée par défaut. Sur de nombreux systèmes, la stratégie est installée sur /usr/share/mysql/policy/selinux/mariadb-server.fc. Pour le construire et le charger, exécutez les opérations suivantes :

Définition des contextes de fichiers

SELinux utilise des contextes de fichiers pour déterminer qui doit pouvoir accéder à ce fichier.

Les contextes de fichiers sont gérés avec les commandes semanage fcontext et restorecon.

Sur de nombreux systèmes, l’utilitaire semanage est installé par le package policycoreutils-python, et l’utilitaire restorecon est installé par le package policycoreutils. Vous pouvez les installer avec la commande suivante :

sudo yum install policycoreutils policycoreutils-python

Le contexte actuel d’un fichier ou d’un répertoire peut être vérifié en exécutant ls avec les options --context ou --scontext.

Définition du Contexte du fichier pour le répertoire de données

Si vous utilisez un répertoire personnalisé pour datadir, vous devrez peut-être définir le contexte du fichier pour ce répertoire. Le contexte du fichier SELinux pour les fichiers de données MariaDB est mysqld_db_t. Vous pouvez déterminer si ce contexte de fichier est présent sur votre système et à quels fichiers ou répertoires il est associé en exécutant la commande suivante:

sudo semanage fcontext --list | grep mysqld_db_t

Si vous souhaitez définir le contexte du fichier pour votre répertoire personnalisé pour votre datadir, cela peut être fait en exécutant les commandes semanage fcontext et restorecon. Par exemple :

sudo semanage fcontext -a -t mysqld_db_t "/mariadb/data(/.*)?"sudo restorecon -Rv /mariadb/data

Si vous souhaitez vérifier le contexte du fichier actuel, vous pouvez le faire en exécutant ls avec les options --context ou --scontext. Exemple:

ls --directory --scontext /mariadb/data

Définition du contexte du fichier pour les fichiers journaux

Si vous utilisez un répertoire personnalisé pour les fichiers journaux, vous devrez peut-être définir le contexte du fichier pour ce répertoire. Le contexte de fichier SELinux pour les fichiers journaux MariaDB est mysqld_log_t. Vous pouvez déterminer si ce contexte de fichier est présent sur votre système et à quels fichiers ou répertoires il est associé en exécutant la commande suivante:

sudo semanage fcontext --list | grep mysqld_log_t

Si vous souhaitez définir le contexte du fichier pour votre répertoire personnalisé pour les fichiers journaux, cela peut être fait en exécutant les commandes semanage fcontext et restorecon. Par exemple :

sudo semanage fcontext -a -t mysqld_log_t "/var/log/mysql(/.*)?"sudo restorecon -Rv /var/log/mysql

Si vous souhaitez vérifier le contexte du fichier actuel, vous pouvez le faire en exécutant ls avec les options --context ou --scontext. Exemple:

ls --directory --scontext /var/log/mysql

Définition du contexte de fichier pour les fichiers d’options

Si vous utilisez un répertoire personnalisé pour les fichiers d’options, vous devrez peut-être définir le contexte de fichier pour ce répertoire. Le contexte de fichier SELinux pour les fichiers d’options MariaDB est mysqld_etc_t. Vous pouvez déterminer si ce contexte de fichier est présent sur votre système et à quels fichiers ou répertoires il est associé en exécutant la commande suivante:

sudo semanage fcontext --list | grep mysqld_etc_t

Si vous souhaitez définir le contexte du fichier pour votre répertoire personnalisé pour les fichiers d’options, cela peut être fait en exécutant les commandes semanage fcontext et restorecon. Par exemple :

sudo semanage fcontext -a -t mysqld_etc_t "/etc/mariadb(/.*)?"sudo restorecon -Rv /etc/mariadb

Si vous souhaitez vérifier le contexte du fichier actuel, vous pouvez le faire en exécutant ls avec les options --context ou --scontext. Exemple:

ls --directory --scontext /etc/mariadb

Permettant d’accéder au contexte du fichier Tmpfs

Si vous vouliez monter votre tmpdir sur un système de fichiers tmpfs ou si vous vouliez utiliser un tmpfs div> système de fichiers sur /run/shm, vous devrez peut-être autoriser mysqld_t à avoir accès à quelques contextes de fichiers liés à tmpfs. Par exemple :

Dépannage des problèmes SELinux

Vous devrez peut-être résoudre les problèmes liés à SELinux dans des cas tels que :

  • MariaDB utilise un port non par défaut.
  • MariaDB lit ou écrit dans certains fichiers (datadir, fichiers journaux, fichiers d’options, etc.) situé à des chemins non par défaut.
  • MariaDB utilise un plugin qui nécessite l’accès à des ressources que les installations par défaut n’utilisent pas.

Erreurs d’autorisation du système de fichiers

Si les autorisations du système de fichiers pour certains répertoires MariaDB semblent correctes, mais que le journal des erreurs MariaDB contient toujours des erreurs similaires à ce qui suit :

Alors vérifiez /var/log/audit/audit.log de SELinux pour les entrées de journal qui ressemblent aux suivantes:

Si vous voyez des entrées similaires à celle-ci, vous devrez probablement ajuster les contextes de fichiers pour certains fichiers ou répertoires. Voir Définition de contextes de fichiers pour plus d’informations sur la façon de procéder.

SELinux et MariaDB Sur un port différent

Les ports TCP et UDP sont également activés pour l’autorisation de se lier. Si vous utilisez un port différent ou certains ports Galera, configurez SELinux pour pouvoir utiliser ces ports :

sudo semanage port -a -t mysqld_port_t -p tcp 3307 

Génération de stratégies SELinux avec audit2allow

Dans certains cas, un système MariaDB peut avoir besoin de stratégies non standard. Il est possible de créer ces stratégies à partir du journal d’audit SELinux à l’aide de l’utilitaire audit2allow. Les utilitaires semanage et semodule seront également nécessaires.

Sur de nombreux systèmes, les utilitaires audit2allow et semanage sont installés par le package policycoreutils-python, et l’utilitaire semodule est installé par le policycoreutils paquet. Vous pouvez les installer avec la commande suivante:

sudo yum install policycoreutils policycoreutils-python

Le processus suivant peut être utilisé pour générer une stratégie à partir du journal d’audit :

  • Supprimez les dontaudits de la stratégie :
sudo semodule -DB
  • Mettez temporairement mysqld_t dans mode permissif. Par exemple :
sudo semanage permissive -a mysqld_t
  • Démarrer MariaDB.
  • Faites tout ce qui causait des erreurs SELinux.
  • Utilisez le journal d’audit généré pour créer une stratégie :
sudo grep mysqld /var/log/audit/audit.log | audit2allow -M mariadb_localsudo semodule -i mariadb_local.pp
  • Tirez mysqld_t hors du mode permissif. Exemple:
sudo semanage permissive -d mysqld_t
  • Restaurer les dontaudits pour la stratégie :
sudo setmodule -B

La même procédure peut être utilisée si MariaDB démarre mais que SELinux l’empêche de fonctionner correctement. Par exemple, SELinux peut empêcher le plugin PAM d’authentifier les utilisateurs. La solution est la même : activez l’audit, passez à permissif, faites, tout ce que SELinux ne vous a pas permis de faire, créez une stratégie à partir du journal d’audit.

Lorsque vous découvrez les autorisations SELinux nécessaires, veuillez les signaler au suivi des bogues de votre système d’exploitation afin que tous les utilisateurs puissent bénéficier de votre travail (par exemple Red Hat Bugzilla https://bugzilla.redhat.com/).

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.