namespaces(7) Miscellaneous Information Manual namespaces(7)
NOM
espaces de noms - Presentation des espaces de noms sous Linux
DESCRIPTION
Un espace de noms transforme une ressource globale du systeme en une
abstraction qui la presente aux processus dans cet espace de noms comme
une instance independante de la ressource globale. Seuls les processus
qui appartiennent a l'espace de noms peuvent voir les changements
apportes a la ressource globale. Les espaces de noms sont notamment
utilises mettre en oeuvre les conteneurs.
Cette page presente les differents espaces de noms, leurs fichiers
/proc respectifs, et recapitule les API qui permettent de travailler
avec ces espaces de noms.
Types d'espaces de noms
La table suivante presente les types d'espace de noms disponibles dans
Linux. La seconde colonne presente la valeur de l'indicateur utilise
pour indiquer le type d'espace de noms dans les diverses API. La
troisieme colonne indique la page de manuel qui fournit des details sur
le type d'espace de noms. La derniere colonne est un resume des
ressources qui sont isolees par le type d'espace de noms.
Espaces de noms Indicateur Page Isolation
------------------------------------------------------------------------
Cgroup CLONE_NEWCGROUP cgroup_namespaces(7) Repertoire
racine
cgroup
IPC CLONE_NEWIPC ipc_namespaces(7) IPC System
V, files de
messages
POSIX
Reseau CLONE_NEWNET network_namespaces(7) Peripheriques
reseau,
piles,
ports, etc.
Montage CLONE_NEWNS mount_namespaces(7) Points de
montage
PID CLONE_NEWPID pid_namespaces(7) Identifiants
de
processus
(PID)
Temps CLONE_NEWTIME time_namespaces(7) Horloges de
demarrage
et
monotones
Utilisateur CLONE_NEWUSER user_namespaces(7) ID
utilisateur
et groupe
UTS CLONE_NEWUTS uts_namespaces(7) Nom d'hote
et nom de
domaine NIS
API des espaces de noms
En plus des divers fichiers /proc decrits plus bas, l'API des espaces
de noms comprend les appels systemes suivants :
clone(2)
L'appel systeme clone(2) cree un nouveau processus. Si lors de
l'appel, l'argument flags precise un ou plusieurs des
indicateurs CLONE_NEW* decrits ci-dessus, un nouvel espace de
noms sera cree pour chaque indicateur et le processus enfant
sera membre de ces espaces de noms. Cet appel systeme implemente
egalement plusieurs fonctionnalites sans lien avec les espaces
de noms.
setns(2)
L'appel systeme setns(2) permet a un processus appelant de
rejoindre un espace de noms existant. Cet espace de noms est
precise au moyen d'un descripteur de fichier qui renvoie vers
l'un des fichiers /proc/pid/ns decrits ci-dessous.
unshare(2)
L'appel systeme unshare(2) deplace le processus appelant dans un
nouvel espace de noms. Si lors de l'appel, son argument flags
precise un ou plusieurs des indicateurs CLONE_NEW* decrits
ci-dessus, un nouvel espace de noms sera cree pour chaque
indicateur et le processus appelant sera membre de ces espaces
de noms. Cet appel systeme implemente egalement plusieurs
fonctionnalites sans lien avec les espaces de noms.
ioctl(2)
Diverses operations ioctl(2) peuvent etre utilisees pour
connaitre des informations a propos des espaces de noms. Ces
operations sont decrites dans ioctl_nsfs(2).
Dans la plupart des cas, la creation de nouveaux espaces de noms en
utilisant clone(2) ou unshare(2) necessite de disposer de la capacite
CAP_SYS_ADMIN, puisque, dans le nouvel espace de noms, le createur aura
le pouvoir de changer les ressources globales qui sont visibles aux
autres processus qui y sont crees ulterieurement ou de joindre l'espace
de noms. Les espaces de noms utilisateur forment une exception : a
partir de Linux 3.8, la creation d'un espace de noms utilisateur ne
necessite pas de privilege particulier.
Le repertoire /proc/pid/ns/
Chaque processus a un sous-repertoire /proc/pid/ns/ contenant une
entree 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 repertoire
dans un autre emplacement du systeme de fichiers maintient l'espace de
noms du processus designe par pid en fonctionnement, meme si tous les
processus de l'espace de noms sont termines.
L'ouverture d'un des fichiers de ce repertoire (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 designe par
pid. Tant que ce descripteur de fichier est ouvert, l'espace de noms
reste operationnel, meme si tous les processus de l'espace de noms sont
termines. Le descripteur de fichier peut etre transmis au moyen de
setns(2).
Jusqu'a la version 3.7 de Linux (incluse), ces fichiers apparaissaient
comme des liens physiques. A partir de Linux 3.8, ils apparaissent
comme des liens symboliques. Si deux processus sont dans le meme espace
de noms, alors ils auront les memes identifiants de peripherique et
leurs numeros d'inoeud pour leurs liens symboliques /proc/pid/ns/xxx
seront les memes. Une application peut consulter cette information
grace aux champs stat.st_dev et stat.st_ino renvoyes par stat(2). Le
contenu de ce lien symbolique est une chaine de caracteres contenant le
type de l'espace de noms et le numero d'inoeud, comme dans l'exemple
suivant :
$ readlink /proc/$$/ns/uts
uts:[4026531838]
Les liens symboliques dans ce sous-repertoire 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 reseau 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 duree de
vie du processus (c'est-a-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 crees par ce processus. Cela peut changer comme
consequence des appels a unshare(2) et setns(2) (consultez
pid_namespaces(7)), aussi le fichier peut differer de
/proc/pid/ns/pid. Le lien symbolique obtient une valeur
seulement apres que le premier processus enfant soit cree 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 crees par ce processus. Cela peut changer comme
consequence des appels a unshare(2) et setns(2) (consultez
time_namespaces(7)), aussi le fichier peut differer 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 dereferencer ou lire (readlink(2)) ces liens
symboliques est controlee par une verification PTRACE_MODE_READ_FSCREDS
du mode d'acces ptrace. Consultez ptrace(2).
Repertoire /proc/sys/user
Les fichiers dans le repertoire /proc/sys/user (qui existe depuis
Linux 4.9) expose les limites du nombre d'espaces de noms des divers
types pouvant etre crees. Ces fichiers sont les suivants :
max_cgroup_namespaces
Cette valeur dans le fichier definit une limite par utilisateur
du nombre d'espaces de noms cgroup pouvant etre crees dans
l'espace de noms utilisateur.
max_ipc_namespaces
Cette valeur dans le fichier definit une limite par utilisateur
du nombre d'espaces de noms IPC pouvant etre crees dans l'espace
de noms utilisateur.
max_mnt_namespaces
Cette valeur dans le fichier definit une limite par utilisateur
du nombre d'espaces de noms montage pouvant etre crees dans
l'espace de noms utilisateur.
max_net_namespaces
Cette valeur dans le fichier definit une limite par utilisateur
du nombre d'espaces de noms reseau pouvant etre crees dans
l'espace de noms utilisateur.
max_pid_namespaces
Cette valeur dans le fichier definit une limite par utilisateur
du nombre d'espaces de noms PID pouvant etre crees dans l'espace
de noms utilisateur.
max_time_namespaces (depuis Linux 5.7)
Cette valeur dans le fichier definit une limite par utilisateur
du nombre d'espaces de noms temps pouvant etre crees dans
l'espace de noms utilisateur.
max_user_namespaces
Cette valeur dans le fichier definit une limite par utilisateur
du nombre d'espaces de noms utilisateur pouvant etre crees dans
l'espace de noms utilisateur.
max_uts_namespaces
Cette valeur dans le fichier definit une limite par utilisateur
du nombre d'espaces de noms UTS pouvant etre crees dans l'espace
de noms utilisateur.
Remarquez les points suivants concernant ces fichiers :
- Les valeurs dans ces fichiers sont modifiables par les processus
privilegies.
- Les valeurs indiquees par ces fichiers sont les limites pour
l'espace de noms utilisateur dans lequel le processus ouvert reside.
- Les limites sont pour chaque utilisateur. Chaque utilisateur dans le
meme espace de noms peut creer des espaces de noms jusqu'a la limite
definie.
- Les limites s'appliquent a 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 etre imposees.
- En cas de depassement de ces limites, clone(2) et unshare(2)
echouent avec l'erreur ENOSPC.
- Pour l'espace de noms utilisateur de depart, la valeur par defaut
dans chacun de ces fichiers est la moitie de la limite du nombre de
threads pouvant etre crees (/proc/sys/kernel/threads-max). Dans tous
les espaces de noms de la descendance, la valeur par defaut dans
chaque fichier est MAXINT.
- Quand un espace de noms est cree, l'objet est aussi comptabilise
dans les espaces de noms ancetre. Plus precisement :
- Chaque espace de noms utilisateur a un UID createur.
- Quand un espace de noms est cree, il est comptabilise dans les
UID createurs dans chacun des espaces de noms ancetre et le noyau
assure que la limite de l'espace de noms correspondant pour l'UID
createur dans l'espace de noms ancetre ne soit pas depassee.
- Le point ci-dessus assure que la creation d'un nouvel espace de
noms utilisateur ne peut pas etre utilisee pour se soustraire aux
limites en vigueur dans l'espace de noms utilisateur actuel.
Duree de vie des espaces de noms
En l'absence d'autres facteurs, un espace de noms est automatiquement
detruit 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 meme 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 hierarchique (c'est-a-dire un espace de noms
PID ou utilisateur) et possede un espace de noms enfant.
- C'est un espace de noms utilisateur qui possede un ou plusieurs
espaces de noms non utilisateur.
- C'est un espace de noms PID et il existe un processus qui se refere
a lui a 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
refere a lui a 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 systeme
de fichiers mqueue (file d'attente de message -- consultez
mq_overview(7)) se refere a cet espace de noms.
- C'est un espace de noms PID et un montage correspondant d'un systeme
de fichiers proc(5) se refere a 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 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
, Cedric Boutillier ,
Frederic Hantrais 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 1 septembre 2024 namespaces(7)