9.2. Création et utilisation d'une politique SELinux pour un conteneur personnalisé


Pour générer une politique de sécurité SELinux pour un conteneur personnalisé, suivez les étapes de cette procédure.

Conditions préalables

  • L'outil podman de gestion des conteneurs est installé. Si ce n'est pas le cas, utilisez la commande dnf install podman.
  • Un conteneur Linux personnalisé - ubi8 dans cet exemple.

Procédure

  1. Installez le paquetage udica:

    # dnf install -y udica

    Vous pouvez également installer le module container-tools, qui fournit un ensemble de logiciels de conteneurs, dont udica:

    # dnf module install -y container-tools
  2. Démarrez le conteneur ubi8 qui monte le répertoire /home avec des autorisations de lecture seule et le répertoire /var/spool avec des autorisations de lecture et d'écriture. Le conteneur expose le port 21.

    # podman run --env container=podman -v /home:/home:ro -v /var/spool:/var/spool:rw -p 21:21 -it ubi8 bash

    Notez que le conteneur fonctionne maintenant avec le type SELinux container_t. Ce type est un domaine générique pour tous les conteneurs dans la politique SELinux et il peut être trop strict ou trop lâche pour votre scénario.

  3. Ouvrez un nouveau terminal et entrez la commande podman ps pour obtenir l'ID du conteneur :

    # podman ps
    CONTAINER ID   IMAGE                                   COMMAND   CREATED          STATUS              PORTS   NAMES
    37a3635afb8f   registry.access.redhat.com/ubi8:latest  bash      15 minutes ago   Up 15 minutes ago           heuristic_lewin
  4. Créez un fichier JSON de conteneur et utilisez udica pour créer un module de politique basé sur les informations contenues dans le fichier JSON :

    # podman inspect 37a3635afb8f > container.json
    # udica -j container.json my_container
    Policy my_container with container id 37a3635afb8f created!
    [...]

    Alternativement :

    # podman inspect 37a3635afb8f | udica my_container
    Policy my_container with container id 37a3635afb8f created!
    
    Please load these modules using:
    # semodule -i my_container.cil /usr/share/udica/templates/{base_container.cil,net_container.cil,home_container.cil}
    
    Restart the container with: "--security-opt label=type:my_container.process" parameter
  5. Comme le suggère la sortie de udica à l'étape précédente, chargez le module de politique :

    # semodule -i my_container.cil /usr/share/udica/templates/{base_container.cil,net_container.cil,home_container.cil}
  6. Arrêtez le conteneur et redémarrez-le avec l'option --security-opt label=type:my_container.process:

    # podman stop 37a3635afb8f
    # podman run --security-opt label=type:my_container.process -v /home:/home:ro -v /var/spool:/var/spool:rw -p 21:21 -it ubi8 bash

Vérification

  1. Vérifiez que le conteneur fonctionne avec le type my_container.process:

    # ps -efZ | grep my_container.process
    unconfined_u:system_r:container_runtime_t:s0-s0:c0.c1023 root 2275 434  1 13:49 pts/1 00:00:00 podman run --security-opt label=type:my_container.process -v /home:/home:ro -v /var/spool:/var/spool:rw -p 21:21 -it ubi8 bash
    system_u:system_r:my_container.process:s0:c270,c963 root 2317 2305  0 13:49 pts/0 00:00:00 bash
  2. Vérifiez que SELinux autorise désormais l'accès aux points de montage /home et /var/spool:

    [root@37a3635afb8f /]# cd /home
    [root@37a3635afb8f home]# ls
    username
    [root@37a3635afb8f ~]# cd /var/spool/
    [root@37a3635afb8f spool]# touch test
    [root@37a3635afb8f spool]#
  3. Vérifiez que SELinux n'autorise que la connexion au port 21 :

    [root@37a3635afb8f /]# dnf install nmap-ncat
    [root@37a3635afb8f /]# nc -lvp 21
    ...
    Ncat: Listening on :::21
    Ncat: Listening on 0.0.0.0:21
    ^C
    [root@37a3635afb8f /]# nc -lvp 80
    ...
    Ncat: bind to :::80: Permission denied. QUITTING.

Ressources supplémentaires

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.