Provided by: manpages-fr_4.21.0-2_all bug

NOM

       cgroup_namespaces – Aperçu des espaces de noms cgroup de Linux

DESCRIPTION

       Pour une présentation générale des espaces de noms, consultez namespaces(7).

       Les  espaces  de  noms  cgroup  virtualisent  la  vue  des cgroups de processus (consulter
       cgroups(7)) telle qu’aperçue à l’aide de /proc/pid/cgroup et /proc/pid/mountinfo.

       Chaque espace de noms cgroup a son propre ensemble de répertoires racines de  cgroup.  Ces
       répertoires  racines  sont les points de base pour les emplacements relatifs affichés dans
       les enregistrements correspondants dans le fichier /proc/pid/cgroup.  Quand  un  processus
       crée  un  nouvel espace de noms cgroup en utilisant clone(2) ou unshare(2) avec le drapeau
       CLONE_NEWCGROUP, ses répertoires de cgroups actuels deviennent les répertoires racines  de
       cgroup  dans  le  nouvel  espace  de  noms  (cela  s’applique pour les hiérarchies cgroups
       version 1 et la hiérarchie unifiée cgroups version 2).

       Lors de la lecture des appartenances à un cgroup d’un  processus  « cible »  à  partir  de
       /proc/pid/cgroup,  le chemin affiché dans le troisième champ de chaque enregistrement sera
       relatif au répertoire racine du processus lisant  pour  la  hiérarchie  correspondante  de
       cgroup.  Si  le  répertoire  de  cgroup  du processus cible réside en dehors du répertoire
       racine de l’espace de noms cgroup du processus lisant, alors le chemin affiche les entrées
       ../ pour chaque niveau ancêtre dans la hiérarchie de cgroup.

       La  session d’interpréteur suivante montre les effets de la création d’un nouvel espace de
       noms cgroup.

       D’abord, (en tant que superutilisateur) dans un interpréteur dans l’espace de noms  cgroup
       initial,  nous  créons un cgroup enfant dans la hiérarchie freezer et plaçons un processus
       dans ce cgroup que nous utiliserons comme partie de la démonstration suivante :

           # mkdir -p /sys/fs/cgroup/freezer/sub2
           # sleep 10000 &     # Création d’un processus qui vit pendant un certain temps
           [1] 20124
           # echo 20124 > /sys/fs/cgroup/freezer/sub2/cgroup.procs

       Puis  créons  un  nouveau  cgroup  enfant  dans  la  hiérarchie   freezer   et   intégrons
       l’interpréteur dans ce cgroup :

           # mkdir -p /sys/fs/cgroup/freezer/sub
           # echo $$                      # Affichage du PID de l’interpréteur
           30655
           # echo 30655 > /sys/fs/cgroup/freezer/sub/cgroup.procs
           # cat /proc/self/cgroup | grep freezer
           7:freezer:/sub

       Ensuite,   nous   utilisons  unshare(1)  pour  créer  un  processus  exécutant  un  nouvel
       interpréteur dans les nouveaux espaces de noms cgroup et montage :

           # PS1="sh2# " unshare -Cm bash

       À partir du nouvel interpréteur démarré par unshare(1), nous inspectons alors les fichiers
       /proc/pid/cgroup  de,  respectivement,  le  nouvel interpréteur, un processus qui est dans
       l’espace de noms cgroup initial (init, avec PID 1) et le processus dans  le  cgroup  frère
       (sub2) :

           sh2# cat /proc/self/cgroup | grep freezer
           7:freezer:/
           sh2# cat /proc/1/cgroup | grep freezer
           7:freezer:/..
           sh2# cat /proc/20124/cgroup | grep freezer
           7:freezer:/../sub2

       Dans  la  sortie de la première commande, nous voyons que l’appartenance au cgroup freezer
       du nouvel interpréteur (qui est dans  le  même  cgroup  que  l’interpréteur  initial)  est
       affichée  comme  définie  relativement  au  répertoire  racine du cgroup freezer qui a été
       établi quand le nouvel espace de noms cgroup a été créé (en absolu, le nouvel interpréteur
       est dans la hiérarchie du cgroup freezer /sub, et le répertoire racine de la hiérarchie du
       cgroup freezer dans le nouvel espace de  noms  cgroup  est  aussi  /sub.  Par  conséquent,
       l’appartenance à un cgroup du nouvel interpréteur est affichée sous forme « / »).

       Cependant,  quand  nous  regardons  dans  /proc/self/mountinfo, nous constatons l’anomalie
       suivante :

           sh2# cat /proc/self/mountinfo | grep freezer
           155 145 0:32 /.. /sys/fs/cgroup/freezer ...

       Le quatrième champ de cette ligne (/..) devrait montrer le répertoire dans le  système  de
       fichiers  de  cgroup  qui  forme  la  racine  de  ce  montage.  Étant donné que suivant la
       définition des espaces de noms cgroup, le répertoire actuel du cgroup freezer du processus
       devient le répertoire racine du cgroup freezer, nous devrions voir « / » dans ce champ. Le
       problème ici est que nous voyons une entrée de montage pour le système de fichiers cgroup,
       correspondant  à  l’espace de noms cgroup initial (dont le système de fichiers cgroup a en
       fait sa racine dans le répertoire parent de sub). Pour corriger ce problème,  nous  devons
       remonter  le  système  de  fichiers  du  cgroup  freezer  à  partir du nouvel interpréteur
       (c’est-à-dire réaliser le montage à partir d’un processus qui est dans le nouvel espace de
       noms cgroup) ; après quoi, nous verrons les résultats attendus :

           sh2# mount --make-rslave /     # Ne pas propager les évènements de
                                          # montage aux autres espaces de noms
           sh2# umount /sys/fs/cgroup/freezer
           sh2# mount -t cgroup -o freezer freezer /sys/fs/cgroup/freezer
           sh2# cat /proc/self/mountinfo | grep freezer
           155 145 0:32 / /sys/fs/cgroup/freezer rw,relatime ...

STANDARDS

       Les espaces de noms sont propres à Linux.

NOTES

       L’utilisation  des  espaces  de  noms  cgroup  requiert  un  noyau configuré avec l’option
       CONFIG_CGROUPS.

       La virtualisation offerte par les espaces de noms cgroup poursuit plusieurs buts :

       -  elle prévient une fuite d’informations par laquelle des chemins de répertoire de cgroup
          en  dehors  d’un  conteneur  seraient  visibles par les processus dans le conteneur. De
          telles fuites pourraient, par exemple, révéler des informations à propos  du  cadriciel
          utilisé pour mettre en conteneur les applications ;

       -  elle  facilite  des  tâches  telles  que  la  migration de conteneur. La virtualisation
          offerte par les espaces de noms cgroup permet aux  conteneurs  d’être  protégés  de  la
          connaissance  des  noms  de chemin de cgroups ancêtres. Sans cette protection, tous les
          noms de chemin de cgroup (affichés dans /proc/self/cgroups)  devraient  être  répliqués
          sur  le système cible lors de la migration d’un conteneur. Ces noms de chemin devraient
          aussi être uniques, de façon à ne pas entrer en conflit avec d’autres  noms  de  chemin
          dans le système cible ;

       -  elle  permet  un  meilleur  confinement  des processus mis en conteneur parce qu’il est
          possible de monter le système de fichiers de cgroup du conteneur de telle façon que les
          processus du conteneur puissent accéder aux répertoires du cgroup ancêtre. Considérons,
          par exemple, le scénario suivant :

          -  nous avons un répertoire de cgroup, /cg/1 dont  le  propriétaire  est  l’utilisateur
             d’ID 9000,

          -  nous  avons un processus, X, dont le propriétaire est aussi l’utilisateur d’ID 9000,
             qui est mis dans l’espace de noms sous le cgroup /cg/1/2 (c’est-à-dire X a été placé
             dans  un  nouvel  espace  de  noms cgroup à l’aide de clone(2) ou unshare(2) avec le
             drapeau CLONE_NEWCGROUP).

          Si le cgroup n’est pas mis dans un espace de noms, comme le répertoire de cgroup  /cg/1
          a  pour  propriétaire  l’UID 9000  (qui  peut  l'éditer) et le processus X a aussi pour
          propriétaire l’utilisateur d’ID 9000, le processus X pourrait modifier le  contenu  des
          fichiers  de  cgroup (c’est-à-dire modifier les réglages de cgroup), non seulement dans
          /cg/1/2, mais aussi dans le répertoire ancêtre de cgroup /cg/1. La mise  en  espace  de
          noms  du  processus X  sous  le  répertoire  de cgroup /cg/1/2, en combinaison avec les
          opérations adaptées de montage pour le système de  fichiers  de  cgroup  (comme  montré
          ci-dessus), empêche le processus de modifier les fichiers dans /cg/1, puisqu’il ne peut
          même pas voir le contenu de ce  répertoire  (ou  des  répertoires  ancêtres  de  cgroup
          supprimés  ultérieurement).  Combiné  avec  une  application  correcte  des  limites de
          hiérarchie, cela empêche le processus X de sortir des limites imposées par les  cgroups
          ancêtres.

VOIR AUSSI

       unshare(1),   clone(2),   setns(2),   unshare(2),   proc(5),  cgroups(7),  credentials(7),
       namespaces(7), user_namespaces(7)

TRADUCTION

       La traduction française de cette  page  de  manuel  a  été  créée  par  Christophe  Blaess
       <https://www.blaess.fr/christophe/>,  Stéphan  Rafin  <stephan.rafin@laposte.net>, Thierry
       Vignaud <tvignaud@mandriva.com>, François Micaux, Alain  Portal  <aportal@univ-montp2.fr>,
       Jean-Philippe    Guérard   <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-
       luc.coulon@wanadoo.fr>,   Julien    Cristau    <jcristau@debian.org>,    Thomas    Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin
       Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,  Denis
       Barbier  <barbier@debian.org>,  David  Prévot <david@tilapin.org> et Jean-Paul Guillonneau
       <guillonneau.jeanpaul@free.fr>

       Cette traduction est une documentation libre ; veuillez vous reporter  à  la  GNU  General
       Public   License   version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  concernant  les
       conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un
       message à ⟨debian-l10n-french@lists.debian.org⟩.