Man page - namespaces(7)

Packages contains this manual

Available languages:

en fr pl sv ja ru de

Manual

namespaces

NOM
DESCRIPTION
Types d’espaces de noms
API des espaces de noms
Le répertoire /proc/pid/ns/
Répertoire /proc/sys/user
Durée de vie des espaces de noms
EXEMPLES
VOIR AUSSI
TRADUCTION

NOM

espaces de noms – PrĂ©sentation des espaces de noms sous Linux

DESCRIPTION

Un espace de noms transforme une ressource globale du systĂšme en une abstraction qui la prĂ©sente aux processus dans cet espace de noms comme une instance indĂ©pendante de la ressource globale. Seuls les processus qui appartiennent Ă  l’espace de noms peuvent voir les changements apportĂ©s Ă  la ressource globale. Les espaces de noms sont notamment utilisĂ©s mettre en Ɠuvre les conteneurs.

Cette page présente les différents espaces de noms, leurs fichiers /proc respectifs, et récapitule les API qui permettent de travailler avec ces espaces de noms.

Types d’espaces de noms

La table suivante prĂ©sente les types d’espace de noms disponibles dans Linux. La seconde colonne prĂ©sente la valeur de l’indicateur utilisĂ© pour indiquer le type d’espace de noms dans les diverses API. La troisiĂšme colonne indique la page de manuel qui fournit des dĂ©tails sur le type d’espace de noms. La derniĂšre colonne est un rĂ©sumĂ© des ressources qui sont isolĂ©es par le type d’espace de noms.

Image grohtml-3849152-1.png

API des espaces de noms

En plus des divers fichiers /proc dĂ©crits plus bas, l’API des espaces de noms comprend les appels systĂšmes suivants :
clone
(2)

L’appel systĂšme clone (2) crĂ©e un nouveau processus. Si lors de l’appel, l’argument flags prĂ©cise un ou plusieurs des indicateurs CLONE_NEW* dĂ©crits ci-dessus, un nouvel espace de noms sera créé pour chaque indicateur et le processus enfant sera membre de ces espaces de noms. Cet appel systĂšme implĂ©mente Ă©galement plusieurs fonctionnalitĂ©s sans lien avec les espaces de noms.

setns (2)

L’appel systĂšme setns (2) permet Ă  un processus appelant de rejoindre un espace de noms existant. Cet espace de noms est prĂ©cisĂ© au moyen d’un descripteur de fichier qui renvoie vers l’un des fichiers /proc/ pid /ns dĂ©crits ci-dessous.

unshare (2)

L’appel systĂšme unshare (2) dĂ©place le processus appelant dans un nouvel espace de noms. Si lors de l’appel, son argument flags prĂ©cise un ou plusieurs des indicateurs CLONE_NEW* dĂ©crits ci-dessus, un nouvel espace de noms sera créé pour chaque indicateur et le processus appelant sera membre de ces espaces de noms. Cet appel systĂšme implĂ©mente Ă©galement plusieurs fonctionnalitĂ©s sans lien avec les espaces de noms.

ioctl (2)

Diverses opĂ©rations ioctl (2) peuvent ĂȘtre utilisĂ©es pour connaĂźtre des informations Ă  propos des espaces de noms. Ces opĂ©rations sont dĂ©crites dans ioctl_nsfs (2).

Dans la plupart des cas, la crĂ©ation de nouveaux espaces de noms en utilisant clone (2) ou unshare (2) nĂ©cessite de disposer de la capacitĂ© CAP_SYS_ADMIN , puisque, dans le nouvel espace de noms, le crĂ©ateur aura le pouvoir de changer les ressources globales qui sont visibles aux autres processus qui y sont créés ultĂ©rieurement ou de joindre l’espace de noms. Les espaces de noms utilisateur forment une exception : Ă  partir de Linux 3.8, la crĂ©ation d’un espace de noms utilisateur ne nĂ©cessite pas de privilĂšge particulier.

Le répertoire /proc/pid/ns/

Chaque processus a un sous-répertoire /proc/ pid /ns/ contenant une entrée pour chaque espace de noms qui prend en charge sa manipulation par setns (2) :

$ ls -l /proc/$$/ns | awk '{print $1, $9, $10, $11}'
total 0
lrwxrwxrwx. cgroup -> cgroup:[4026531835]
lrwxrwxrwx. ipc -> ipc:[4026531839]
lrwxrwxrwx. mnt -> mnt:[4026531840]
lrwxrwxrwx. net -> net:[4026531969]
lrwxrwxrwx. pid -> pid:[4026531836]
lrwxrwxrwx. pid_for_children -> pid:[4026531834]
lrwxrwxrwx. time -> time:[4026531834]
lrwxrwxrwx. time_for_children -> time:[4026531834]
lrwxrwxrwx. user -> user:[4026531837]
lrwxrwxrwx. uts -> uts:[4026531838]

Lier le montage (consulter mount (2)) d’un des fichiers de ce rĂ©pertoire dans un autre emplacement du systĂšme de fichiers maintient l’espace de noms du processus dĂ©signĂ© par pid en fonctionnement, mĂȘme si tous les processus de l’espace de noms sont terminĂ©s.

L’ouverture d’un des fichiers de ce rĂ©pertoire (ou d’un fichier qui est un montage bind de l’un de ces fichiers) renvoie un gestionnaire de fichier pour l’espace de noms correspondant au processus dĂ©signĂ© par pid . Tant que ce descripteur de fichier est ouvert, l’espace de noms reste opĂ©rationnel, mĂȘme si tous les processus de l’espace de noms sont terminĂ©s. Le descripteur de fichier peut ĂȘtre transmis au moyen de setns (2).

Jusqu’à la version 3.7 de Linux (incluse), ces fichiers apparaissaient comme des liens physiques. À partir de Linux 3.8, ils apparaissent comme des liens symboliques. Si deux processus sont dans le mĂȘme espace de noms, alors ils auront les mĂȘmes identifiants de pĂ©riphĂ©rique et leurs numĂ©ros d’inƓud pour leurs liens symboliques /proc/ pid /ns/ xxx seront les mĂȘmes. Une application peut consulter cette information grĂące aux champs stat.st_dev et stat.st_ino renvoyĂ©s par stat (2). Le contenu de ce lien symbolique est une chaĂźne de caractĂšres contenant le type de l’espace de noms et le numĂ©ro d’inƓud, comme dans l’exemple suivant :

$ readlink /proc/$$/ns/uts
uts:[4026531838]

Les liens symboliques dans ce sous-répertoire sont les suivants :
/proc/
pid /ns/cgroup (depuis Linux 4.6)

Ce fichier est un descripteur pour l’espace de noms cgroup du processus.

/proc/ pid /ns/ipc (depuis Linux 3.0)

Ce fichier est un descripteur pour l’espace de noms IPC du processus.

/proc/ pid /ns/mnt (depuis Linux 3.8)

Ce fichier est un descripteur pour l’espace de noms montage du processus.

/proc/ pid /ns/net (depuis Linux 3.0)

Ce fichier est un descripteur pour l’espace de noms rĂ©seau du processus.

/proc/ pid /ns/pid (depuis Linux 3.8)

Ce fichier est un descripteur pour l’espace de noms PID du processus. Ce descripteur est permanent pour toute la durĂ©e de vie du processus (c’est-Ă -dire que l’appartenance de l’espace de noms PID ne change jamais).

/proc/ pid /ns/pid_for_children (depuis Linux 4.12)

Ce fichier est un descripteur pour l’espace de noms PID des processus enfant créés par ce processus. Cela peut changer comme consĂ©quence des appels Ă  unshare (2) et setns (2) (consultez pid_namespaces (7)), aussi le fichier peut diffĂ©rer de /proc/ pid /ns/pid . Le lien symbolique obtient une valeur seulement aprĂšs que le premier processus enfant soit créé dans cet espace de noms. Auparavant, readlink (2) sur le lien symbolique renvoyait un tampon vide.

/proc/ pid /ns/time (depuis Linux 5.6)

Ce fichier est un descripteur pour l’espace de noms temps du processus.

/proc/ pid /ns/time_for_children (depuis Linux 5.6)

Ce fichier est un descripteur pour l’espace de noms temps des processus enfant créés par ce processus. Cela peut changer comme consĂ©quence des appels Ă  unshare (2) et setns (2) (consultez time_namespaces (7)), aussi le fichier peut diffĂ©rer de /proc/ pid /ns/time .

/proc/ pid /ns/user (depuis Linux 3.8)

Ce fichier est un descripteur pour l’espace de noms utilisateur du processus.

/proc/ pid /ns/uts (depuis Linux 3.0)

Ce fichier est un descripteur pour l’espace de noms UTS du processus.

La permission de dĂ©rĂ©fĂ©rencer ou lire ( readlink (2)) ces liens symboliques est contrĂŽlĂ©e par une vĂ©rification PTRACE_MODE_READ_FSCREDS du mode d’accĂšs ptrace. Consultez ptrace (2).

Répertoire /proc/sys/user

Les fichiers dans le rĂ©pertoire /proc/sys/user (qui existe depuis Linux 4.9) expose les limites du nombre d’espaces de noms des divers types pouvant ĂȘtre créés. Ces fichiers sont les suivants :
max_cgroup_namespaces

Cette valeur dans le fichier dĂ©finit une limite par utilisateur du nombre d’espaces de noms cgroup pouvant ĂȘtre créés dans l’espace de noms utilisateur.

max_ipc_namespaces

Cette valeur dans le fichier dĂ©finit une limite par utilisateur du nombre d’espaces de noms IPC pouvant ĂȘtre créés dans l’espace de noms utilisateur.

max_mnt_namespaces

Cette valeur dans le fichier dĂ©finit une limite par utilisateur du nombre d’espaces de noms montage pouvant ĂȘtre créés dans l’espace de noms utilisateur.

max_net_namespaces

Cette valeur dans le fichier dĂ©finit une limite par utilisateur du nombre d’espaces de noms rĂ©seau pouvant ĂȘtre créés dans l’espace de noms utilisateur.

max_pid_namespaces

Cette valeur dans le fichier dĂ©finit une limite par utilisateur du nombre d’espaces de noms PID pouvant ĂȘtre créés dans l’espace de noms utilisateur.

max_time_namespaces (depuis Linux 5.7)

Cette valeur dans le fichier dĂ©finit une limite par utilisateur du nombre d’espaces de noms temps pouvant ĂȘtre créés dans l’espace de noms utilisateur.

max_user_namespaces

Cette valeur dans le fichier dĂ©finit une limite par utilisateur du nombre d’espaces de noms utilisateur pouvant ĂȘtre créés dans l’espace de noms utilisateur.

max_uts_namespaces

Cette valeur dans le fichier dĂ©finit une limite par utilisateur du nombre d’espaces de noms UTS pouvant ĂȘtre créés dans l’espace de noms utilisateur.

Remarquez les points suivants concernant ces fichiers :

-

Les valeurs dans ces fichiers sont modifiables par les processus privilégiés.

-

Les valeurs indiquĂ©es par ces fichiers sont les limites pour l’espace de noms utilisateur dans lequel le processus ouvert rĂ©side.

-

Les limites sont pour chaque utilisateur. Chaque utilisateur dans le mĂȘme espace de noms peut crĂ©er des espaces de noms jusqu’à la limite dĂ©finie.

-

Les limites s’appliquent à tous les utilisateurs, incluant l’UID 0.

-

Ces limites s’appliquent en plus de n’importe quelles autres limites par espace de noms (tels que les espaces de noms PID ou utilisateur) qui peuvent ĂȘtre imposĂ©es.

-

En cas de dĂ©passement de ces limites, clone (2) et unshare (2) Ă©chouent avec l’erreur ENOSPC .

-

Pour l’espace de noms utilisateur de dĂ©part, la valeur par dĂ©faut dans chacun de ces fichiers est la moitiĂ© de la limite du nombre de threads pouvant ĂȘtre créés ( /proc/sys/kernel/threads-max ). Dans tous les espaces de noms de la descendance, la valeur par dĂ©faut dans chaque fichier est MAXINT .

-

Quand un espace de noms est créé, l’objet est aussi comptabilisĂ© dans les espaces de noms ancĂȘtre. Plus prĂ©cisĂ©ment :

-

Chaque espace de noms utilisateur à un UID créateur.

-

Quand un espace de noms est créé, il est comptabilisĂ© dans les UID crĂ©ateurs dans chacun des espaces de noms ancĂȘtre et le noyau assure que la limite de l’espace de noms correspondant pour l’UID crĂ©ateur dans l’espace de noms ancĂȘtre ne soit pas dĂ©passĂ©e.

-

Le point ci-dessus assure que la crĂ©ation d’un nouvel espace de noms utilisateur ne peut pas ĂȘtre utilisĂ©e pour se soustraire aux limites en vigueur dans l’espace de noms utilisateur actuel.

Durée de vie des espaces de noms

En l’absence d’autres facteurs, un espace de noms est automatiquement dĂ©truit quand le dernier processus de l’espace de noms se termine ou le quitte. Cependant, il existe un certain nombre d’autres facteurs qui peuvent obliger l’existence de l’espace de noms mĂȘme s’il n’a plus de processus membre, dont les facteurs suivants :

-

Un descripteur de fichier ouvert ou un montage bind existe pour le fichier correspondant /proc/ pid /ns/* .

-

L’espace de noms est hiĂ©rarchique (c’est-Ă -dire un espace de noms PID ou utilisateur) et possĂšde un espace de noms enfant.

-

C’est un espace de noms utilisateur qui possùde un ou plusieurs espaces de noms non utilisateur.

-

C’est un espace de noms PID et il existe un processus qui se rĂ©fĂšre Ă  lui Ă  l’aide d’un lien symbolique /proc/ pid /ns/pid_for_children .

-

C’est un espace de noms temps et il existe un processus qui se rĂ©fĂšre Ă  lui Ă  l’aide d’un lien symbolique /proc/ pid /ns/time_for_children .

-

C’est un espace de noms IPC et un montage correspondant d’un systĂšme de fichiers mqueue (file d’attente de message — consultez mq_overview (7)) se rĂ©fĂšre Ă  cet espace de noms.

-

C’est un espace de noms PID et un montage correspondant d’un systĂšme de fichiers proc (5) se rĂ©fĂšre Ă  cet espace de noms.

EXEMPLES

Consultez clone (2) et user_namespaces (7).

VOIR AUSSI

nsenter (1), readlink (1), unshare (1), clone (2), ioctl_nsfs (2), setns (2), unshare (2), proc (5), capabilities (7), cgroup_namespaces (7), cgroups (7), credentials (7), ipc_namespaces (7), network_namespaces (7), pid_namespaces (7), user_namespaces (7), uts_namespaces (7), lsns (8), switch_root (8)

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>, Cédric Boutillier <cedric.boutillier@gmail.com>, Frédéric Hantrais <fhantrais@gmail.com> 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 .