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) The clone(2) system call creates a new process. If the flags argument of the call specifies one or more of the CLONE_NEW* flags listed above, then new namespaces are created for each flag, and the child process is made a member of those namespaces. (This system call also implements a number of features unrelated to namespaces.) setns(2) The setns(2) system call allows the calling process to join an existing namespace. The namespace to join is specified via a file descriptor that refers to one of the /proc/pid/ns files described below. unshare(2) The unshare(2) system call moves the calling process to a new namespace. If the flags argument of the call specifies one or more of the CLONE_NEW* flags listed above, then new namespaces are created for each flag, and the calling process is made a member of those namespaces. (This system call also implements a number of features unrelated to namespaces.) 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_ns(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. The /proc/pid/ns/ directory Each process has a /proc/pid/ns/ subdirectory containing one entry for each namespace that supports being manipulated by 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). In Linux 3.7 and earlier, these files were visible as hard links. Since Linux 3.8, they appear as symbolic links. If two processes are in the same namespace, then the device IDs and inode numbers of their /proc/pid/ns/xxx symbolic links will be the same; an application can check this using the stat.st_dev and stat.st_ino fields returned by stat(2). The content of this symbolic link is a string containing the namespace type and inode number as in the following example: $ readlink /proc/$$/ns/uts uts:[4026531838] Les liens symboliques dans ce sous-repertoire sont les suivants : /proc/pid/ns/cgroup (since Linux 4.6) Ce fichier est un descripteur pour l'espace de noms cgroup du processus. /proc/pid/ns/ipc (since Linux 3.0) Ce fichier est un descripteur pour l'espace de noms IPC du processus. /proc/pid/ns/mnt (since Linux 3.8) Ce fichier est un descripteur pour l'espace de noms montage du processus. /proc/pid/ns/net (since Linux 3.0) Ce fichier est un descripteur pour l'espace de noms reseau du processus. /proc/pid/ns/pid (since 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 (since Linux 4.12) This file is a handle for the PID namespace of child processes created by this process. This can change as a consequence of calls to unshare(2) and setns(2) (see pid_namespaces(7)), so the file may differ from /proc/pid/ns/pid. The symbolic link gains a value only after the first child process is created in the namespace. (Beforehand, readlink(2) of the symbolic link will return an empty buffer.) /proc/pid/ns/time (since Linux 5.6) Ce fichier est un descripteur pour l'espace de noms temps du processus. /proc/pid/ns/time_for_children (since Linux 5.6) This file is a handle for the time namespace of child processes created by this process. This can change as a consequence of calls to unshare(2) and setns(2) (see time_namespaces(7)), so the file may differ from /proc/pid/ns/time. /proc/pid/ns/user (since Linux 3.8) Ce fichier est un descripteur pour l'espace de noms utilisateur du processus. /proc/pid/ns/uts (since 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). The /proc/sys/user directory 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 : - An open file descriptor or a bind mount exists for the corresponding /proc/pid/ns/* file. - 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. - It is a PID namespace, and there is a process that refers to the namespace via a /proc/pid/ns/pid_for_children symbolic link. - It is a time namespace, and there is a process that refers to the namespace via a /proc/pid/ns/time_for_children symbolic link. - 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_ns(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.06 31 octobre 2023 namespaces(7)