8.3. Création d'un module local de politique SELinux


L'ajout de modules de politique SELinux spécifiques à une politique SELinux active peut résoudre certains problèmes avec la politique SELinux. Vous pouvez utiliser cette procédure pour corriger un problème connu spécifique décrit dans les notes de mise à jour de Red Hat, ou pour mettre en œuvre une solution Red Hat spécifique.

Avertissement

Utilisez uniquement les règles fournies par Red Hat. Red Hat ne prend pas en charge la création de modules de politiques SELinux avec des règles personnalisées, car cela sort de la portée de la couverture de l'assistance à la production. Si vous n'êtes pas un expert, contactez votre représentant commercial Red Hat et demandez des services de conseil.

Conditions préalables

  • Les paquets setools-console et audit pour vérification.

Procédure

  1. Ouvrez un nouveau fichier .cil avec un éditeur de texte, par exemple :

    # vim <local_module>.cil

    Pour mieux organiser vos modules locaux, utilisez le préfixe local_ dans les noms des modules de politique SELinux locaux.

  2. Insérez les règles personnalisées à partir d'un problème connu ou d'une solution Red Hat.

    Important

    N'écrivez pas vos propres règles. Utilisez uniquement les règles fournies dans un problème connu spécifique ou une solution Red Hat.

    Par exemple, pour mettre en œuvre la solution SELinux denies cups-lpd read access to cups.sock in RHEL, insérez la règle suivante :

    Note

    L'exemple de solution a été corrigé de manière permanente pour RHEL dans RHBA-2021:4420. Par conséquent, les parties de cette procédure spécifiques à cette solution n'ont aucun effet sur les systèmes RHEL 8 et 9 mis à jour, et ne sont incluses qu'à titre d'exemples de syntaxe.

    (allow cupsd_lpd_t cupsd_var_run_t (sock_file (read)))

    Notez que vous pouvez utiliser l'une ou l'autre des deux syntaxes de règles SELinux, Common Intermediate Language (CIL) et m4. Par exemple, (allow cupsd_lpd_t cupsd_var_run_t (sock_file (read))) en CIL est équivalent à ce qui suit en m4 :

    module local_cupslpd-read-cupssock 1.0;
    
    require {
        type cupsd_var_run_t;
        type cupsd_lpd_t;
        class sock_file read;
    }
    
    #============= cupsd_lpd_t ==============
    allow cupsd_lpd_t cupsd_var_run_t:sock_file read;
  3. Enregistrez et fermez le fichier.
  4. Installer le module de politique :

    # semodule -i <local_module>.cil
    Note

    Pour supprimer un module de politique locale créé à l'aide de semodule -i, il convient de se référer au nom du module sans le suffixe .cil. Pour supprimer un module de politique locale, utilisez semodule -r <local_module>.

  5. Redémarrer tous les services liés aux règles :

    # systemctl restart <service-name>

Vérification

  1. Liste des modules locaux installés dans votre politique SELinux :

    # semodule -lfull | grep "local_"
    400 local_module  cil
    Note

    Les modules locaux ayant la priorité 400, vous pouvez également les filtrer de la liste en utilisant cette valeur, par exemple en utilisant la commande semodule -lfull | grep -v ^100.

  2. Recherchez les règles d'autorisation pertinentes dans la politique SELinux :

    # sesearch -A --source=<SOURCENAME> --target=<TARGETNAME> --class=<CLASSNAME> --perm=<P1>,<P2>

    <SOURCENAME> est le type SELinux source, <TARGETNAME> est le type SELinux cible, <CLASSNAME> est le nom de la classe de sécurité ou de la classe d'objets, et <P1> et <P2> sont les autorisations spécifiques de la règle.

    Par exemple, pour la solution RHEL, SELinux refuse à cups-lpd l'accès en lecture à cups.sock :

    # sesearch -A --source=cupsd_lpd_t --target=cupsd_var_run_t --class=sock_file --perm=read
    allow cupsd_lpd_t cupsd_var_run_t:sock_file { append getattr open read write };

    La dernière ligne doit maintenant inclure l'opération read.

  3. Vérifiez que le service concerné fonctionne dans le cadre de SELinux :

    1. Identifier le processus lié au service concerné :

      $ systemctl status <service-name>
    2. Vérifiez le contexte SELinux du processus répertorié dans la sortie de la commande précédente :

      $ ps -efZ | grep <process-name>
  4. Vérifier que le service ne provoque pas de déni SELinux :

    # ausearch -m AVC -ts recent
    <no matches>
Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.