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.12 2 mai 2024 cgroup_namespaces(7)