Man page - cgroup_namespaces(7)

Packages contains this manual

Available languages:

en fr sv ro de

Manual

cgroup_namespaces

NOM
DESCRIPTION
STANDARDS
NOTES
VOIR AUSSI
TRADUCTION

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 .