cgroup_namespaces(7) Miscellaneous Information Manual cgroup_namespaces(7) NOM cgroup_namespaces - Apercu des espaces de noms cgroup de Linux DESCRIPTION Pour une presentation generale des espaces de noms, consultez namespaces(7). Les espaces de noms cgroup virtualisent la vue des cgroups de processus (consulter cgroups(7)) telle qu'apercue a l'aide de /proc/pid/cgroup et /proc/pid/mountinfo. Chaque espace de noms cgroup a son propre ensemble de repertoires racines de cgroup. Ces repertoires racines sont les points de base pour les emplacements relatifs affiches dans les enregistrements correspondants dans le fichier /proc/pid/cgroup. Quand un processus cree un nouvel espace de noms cgroup en utilisant clone(2) ou unshare(2) avec le drapeau CLONE_NEWCGROUP, ses repertoires de cgroups actuels deviennent les repertoires racines de cgroup dans le nouvel espace de noms (cela s'applique pour les hierarchies cgroups version 1 et la hierarchie unifiee cgroups version 2). Lors de la lecture des appartenances a un cgroup d'un processus << cible >> a partir de /proc/pid/cgroup, le chemin affiche dans le troisieme champ de chaque enregistrement sera relatif au repertoire racine du processus lisant pour la hierarchie correspondante de cgroup. Si le repertoire de cgroup du processus cible reside en dehors du repertoire racine de l'espace de noms cgroup du processus lisant, alors le chemin affiche les entrees ../ pour chaque niveau ancetre dans la hierarchie de cgroup. La session d'interpreteur suivante montre les effets de la creation d'un nouvel espace de noms cgroup. D'abord, (en tant que superutilisateur) dans un interpreteur dans l'espace de noms cgroup initial, nous creons un cgroup enfant dans la hierarchie freezer et placons un processus dans ce cgroup que nous utiliserons comme partie de la demonstration suivante : # mkdir -p /sys/fs/cgroup/freezer/sub2 # sleep 10000 & # Creation d'un processus qui vit pendant un certain temps [1] 20124 # echo 20124 > /sys/fs/cgroup/freezer/sub2/cgroup.procs Puis creons un nouveau cgroup enfant dans la hierarchie freezer et integrons l'interpreteur dans ce cgroup : # mkdir -p /sys/fs/cgroup/freezer/sub # echo $$ # Affichage du PID de l'interpreteur 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 creer un processus executant un nouvel interpreteur dans les nouveaux espaces de noms cgroup et montage : # PS1="sh2# " unshare -Cm bash A partir du nouvel interpreteur demarre par unshare(1), nous inspectons alors les fichiers /proc/pid/cgroup de, respectivement, le nouvel interpreteur, un processus qui est dans l'espace de noms cgroup initial (init, avec PID 1) et le processus dans le cgroup frere (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 premiere commande, nous voyons que l'appartenance au cgroup freezer du nouvel interpreteur (qui est dans le meme cgroup que l'interpreteur initial) est affichee comme definie relativement au repertoire racine du cgroup freezer qui a ete etabli quand le nouvel espace de noms cgroup a ete cree (en absolu, le nouvel interpreteur est dans la hierarchie du cgroup freezer /sub, et le repertoire racine de la hierarchie du cgroup freezer dans le nouvel espace de noms cgroup est aussi /sub. Par consequent, l'appartenance a un cgroup du nouvel interpreteur est affichee 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 quatrieme champ de cette ligne (/..) devrait montrer le repertoire dans le systeme de fichiers de cgroup qui forme la racine de ce montage. Etant donne que suivant la definition des espaces de noms cgroup, le repertoire actuel du cgroup freezer du processus devient le repertoire racine du cgroup freezer, nous devrions voir << / >> dans ce champ. Le probleme ici est que nous voyons une entree de montage pour le systeme de fichiers cgroup, correspondant a l'espace de noms cgroup initial (dont le systeme de fichiers cgroup a en fait sa racine dans le repertoire parent de sub). Pour corriger ce probleme, nous devons remonter le systeme de fichiers du cgroup freezer a partir du nouvel interpreteur (c'est-a-dire realiser le montage a partir d'un processus qui est dans le nouvel espace de noms cgroup) ; apres quoi, nous verrons les resultats attendus : sh2# mount --make-rslave / # Ne pas propager les evenements 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 configure avec l'option CONFIG_CGROUPS. La virtualisation offerte par les espaces de noms cgroup poursuit plusieurs buts : - elle previent une fuite d'informations par laquelle des chemins de repertoire de cgroup en dehors d'un conteneur seraient visibles par les processus dans le conteneur. De telles fuites pourraient, par exemple, reveler des informations a propos du cadriciel utilise pour mettre en conteneur les applications ; - elle facilite des taches telles que la migration de conteneur. La virtualisation offerte par les espaces de noms cgroup permet aux conteneurs d'etre proteges de la connaissance des noms de chemin de cgroups ancetres. Sans cette protection, tous les noms de chemin de cgroup (affiches dans /proc/self/cgroups) devraient etre repliques sur le systeme cible lors de la migration d'un conteneur. Ces noms de chemin devraient aussi etre uniques, de facon a ne pas entrer en conflit avec d'autres noms de chemin dans le systeme cible ; - elle permet un meilleur confinement des processus mis en conteneur parce qu'il est possible de monter le systeme de fichiers de cgroup du conteneur de telle facon que les processus du conteneur puissent acceder aux repertoires du cgroup ancetre. Considerons, par exemple, le scenario suivant : - nous avons un repertoire de cgroup, /cg/1 dont le proprietaire est l'utilisateur d'ID 9000, - nous avons un processus, X, dont le proprietaire est aussi l'utilisateur d'ID 9000, qui est mis dans l'espace de noms sous le cgroup /cg/1/2 (c'est-a-dire X a ete place dans un nouvel espace de noms cgroup a 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 repertoire de cgroup /cg/1 a pour proprietaire l'UID 9000 (qui peut l'editer) et le processus X a aussi pour proprietaire l'utilisateur d'ID 9000, le processus X pourrait modifier le contenu des fichiers de cgroup (c'est-a-dire modifier les reglages de cgroup), non seulement dans /cg/1/2, mais aussi dans le repertoire ancetre de cgroup /cg/1. La mise en espace de noms du processus X sous le repertoire de cgroup /cg/1/2, en combinaison avec les operations adaptees de montage pour le systeme de fichiers de cgroup (comme montre ci-dessus), empeche le processus de modifier les fichiers dans /cg/1, puisqu'il ne peut meme pas voir le contenu de ce repertoire (ou des repertoires ancetres de cgroup supprimes ulterieurement). Combine avec une application correcte des limites de hierarchie, cela empeche le processus X de sortir des limites imposees par les cgroups ancetres. VOIR AUSSI unshare(1), clone(2), setns(2), unshare(2), proc(5), cgroups(7), credentials(7), namespaces(7), user_namespaces(7) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Paul Guillonneau Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 cgroup_namespaces(7)