Provided by: manpages-fr_4.26.0-1_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

       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 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.

Pages du manuel de Linux 6.9.1                     2 mai 2024                               cgroup_namespaces(7)