Provided by: manpages-fr_4.15.0-9_all bug

NOM

       unshare – Exécuter un programme dans de nouveaux espaces de noms

SYNOPSIS

       unshare [options] [programme [arguments]]

DESCRIPTION

       La commande unshare crée de nouveaux espaces de noms (comme précisé par les options de
       ligne de commande décrites ci-après) puis exécute le programme indiqué. Si programme n’est
       pas fourni, alors ${SHELL} est exécuté (par défaut : /bin/sh).

       Par défaut, un nouvel espace de noms subsiste aussi longtemps qu’il possède des processus
       membres. Un nouvel espace de noms peut être rendu persistant, même s’il ne possède pas de
       membres, par montage lié (bind) des fichiers /proc/pid/ns/type vers un chemin de système
       de fichiers. Un espace de noms qui a été rendu persistant de cette façon peut ensuite être
       entré avec nsenter(1) même après que le programme soit terminé (excepté les espaces de
       noms PID où l’exécution permanente de processus init est nécessaire). Une fois qu’un
       espace de noms n’est plus nécessaire, il peut être rendu temporaire avec umount(8) pour
       supprimer le montage lié. Consulter la section EXEMPLES pour plus de détails.

       unshare depuis la version 2.36 d’util-linux utilise les fichiers
       /proc/[pid]/ns/pid_for_children et /proc/[pid]/ns/time_for_children pour des espace de
       noms persistants PID et temps. Cette modification nécessite un noyau Linux version 4.17 ou
       plus récent.

       Les types d’espace de noms suivants peuvent être créés avec unshare :

       espace de noms de montage
           Le montage et démontage de systèmes de fichiers n'affectera pas le reste du système,
           sauf pour les systèmes de fichiers explicitement marqués comme partagés (avec mount
           --make-shared, consultez /proc/self/mountinfo ou findmnt -o+PROPAGATION pour les
           drapeaux shared). Pour de plus amples détails, consulter mount_namespaces(7) et
           l’explication du drapeau CLONE_NEWNS dans clone(2).

           unshare, depuis util-linux version 2.27, règle automatiquement la propagation à
           private dans un nouvel espace de noms montage pour assurer que celui-ci soit vraiment
           isolé. Il est possible de désactiver cette caractéristique avec l’option --propagation
           unchanged. Remarquez que private est le comportement par défaut du noyau.

       espace de noms UTS
           La configuration du nom d'hôte ou du nom de domaine n'affectera pas le reste du
           système. Pour de plus amples détails, consulter uts_namespaces(7).

       espace de noms IPC
           Le processus aura un nom d'espace indépendant pour les files de messages POSIX ainsi
           que pour les files de messages de System V, les ensembles de sémaphores et les
           segments de mémoire partagée. Pour de plus amples détails, consulter
           ipc_namespaces(7).

       espace de noms réseau
           Le processus aura des piles IPv4 et IPv6, des tables de routage IP, des règles de
           pare-feu, les arborescences de répertoires /proc/net et /sys/class/net, des
           sockets, etc., indépendantes. Pour de plus amples détails, consulter namespaces(7).

       espace de noms PID
           Les enfants auront un ensemble distinct de mises en correspondance de PID à traiter de
           celui de leur parent. Pour de plus amples détails, consulter pid_namespaces(7).

       espace de noms de groupe de contrôle
           Le processus aura une vue virtualisée de /proc/self/cgroup, et les nouveaux montages
           de groupe de contrôle auront pour racine celle du groupe de contrôle d’espace de noms.
           Pour de plus amples détails, consulter cgroup_namespaces(7).

       espace de noms utilisateur
           Le processus aura un ensemble propre d’UID, de GID et de capacités. Pour de plus
           amples détails, consulter user_namespaces(7).

       espace de noms temps
           Le processus peut avoir une vue distincte de CLOCK_MONOTONIC ou CLOCK_BOOTTIME qui
           peut être modifiée avec /proc/self/timens_offsets. Pour de plus amples détails,
           consulter time_namespaces(7).

OPTIONS

       -i, --ipc[=fichier]
           Créer un nouvel espace de noms IPC. Si fichier est indiqué, alors l'espace de noms est
           rendu persistant en créant un montage lié à fichier.

       -m, --mount[=fichier]
           Créer un nouvel espace de noms montage. Si fichier est indiqué, alors l'espace de noms
           est rendu persistant en créant un montage lié à fichier. Remarquez que fichier doit
           être situé sur le système de fichiers dont le drapeau de propagation n’est pas shared
           (ou une erreur survient). Utilisez la commande findmnt -o+PROPAGATION si vous n’êtes
           pas sûr du réglage en cours. Consulter les exemples ci-dessous.

       -n, --net[=fichier]
           Créer un nouvel espace de noms réseau. Si fichier est indiqué, alors l'espace de noms
           est rendu persistant en créant un montage lié à fichier.

       -p, --pid[=fichier]
           Créer un nouvel espace de noms PID. Si fichier est indiqué, alors l'espace de noms est
           rendu persistant en créant un montage lié à fichier. (La création d’un espace de noms
           PID persistant échouera si l’option --fork n’est pas aussi précisée.)

           Consulter aussi les options --fork et --mount-proc.

       -u, --uts[=fichier]
           Créer un nouvel espace de noms UTS. Si fichier est indiqué, alors l'espace de noms est
           rendu persistant en créant un montage lié à fichier.

       -U, --user[=fichier]
           Créer un nouvel espace de noms utilisateur. Si fichier est indiqué, alors l'espace de
           noms est rendu persistant en créant un montage lié à fichier.

       -C, --cgroup[=fichier]
           Créer un nouvel espace de noms groupe de contrôle. Si fichier est indiqué, alors
           l'espace de noms est rendu persistant en créant un montage lié à fichier.

       -T, --time[=fichier]
           Créer un nouvel espace de noms temps. Si fichier est indiqué, alors l'espace de noms
           est rendu persistant en créant un montage lié à fichier. Les options --monotonic et
           --boottime peuvent être utilisées pour les décalages correspondants dans l’espace de
           noms temps.

       -f, --fork
           Fourcher le programme indiqué comme processus enfant de unshare plutôt que de
           l’exécuter directement. Cela est utile lors de la création d’un nouvel espace de noms
           PID. Il est à remarquer que quand unshare est en attente d’un processus enfant, alors
           il ignore SIGINT et SIGTERM et ne transmet aucun signal à l’enfant. Cela est
           nécessaire pour envoyer des signaux au processus enfant.

       --keep-caps
           Quand l’option --user est fournie, garantir que les capacités octroyées dans l’espace
           de noms utilisateur soient conservées dans le processus enfant.

       --kill-child[=nom_de_signal]
           À la fin de unshare, envoyer un nom_signal au processus enfant forké. Combiné avec
           --pid, cela permet une extinction aisée et fiable de l’arbre entier de processus sous
           unshare. S’il n’est pas donné, nom_signal est par défaut SIGKILL. Cela suppose --fork.

       --mount-proc[=point_de_montage]
           Juste avant d’exécuter le programme, monter le système de fichiers proc sur
           point_de_montage (/proc par défaut). C’est utile lors de la création d’un nouvel
           espace de noms PID. Cela implique aussi la création d’un nouvel espace de noms
           montage, sinon le montage de /proc perturberait les programmes existants sur le
           système. Le nouveau système de fichiers proc est explicitement monté comme privé (par
           MS_PRIVATE|MS_REC).

       --map-user=uid|nom
           Exécuter le programme seulement après que les ID effectifs des utilisateurs actuels
           ont été mappés à uid. Si cette option est indiquée plusieurs fois, la dernière
           occurrence prévaudra. Cette option implique --user.

       --map-users=uid_extérieur,uid_intérieur,nombre|auto
           Exécuter le programme seulement après que le bloc d'UID de taille nombre commençant à
           uid_extérieur a été mappé au bloc d'UID commençant à uid_intérieur. Ce mappage est
           créé avec newuidmap(1). Si la plage d'UID recouvre le mappage indiqué par --map-user,
           alors un « trou » sera retiré du mappage. Cela peut avoir pour conséquence que l'UID
           le plus élevé ne sera pas mappé. La valeur spécial auto fera correspondre le premier
           bloc d'UID appartenant à l'utilisateur effectif de /etc/subuid au bloc démarrant à
           l'UID 0. Si cette option est indiquée plusieurs fois, la dernière occurrence
           prévaudra. Cette option implique --user.

       --map-group=gid|nom
           Exécuter le programme seulement après que les ID effectifs des groupes actuels soient
           mappés à gid. Si cette option est indiquée plusieurs fois, la dernière occurrence
           prévaudra. Cette option suppose --setgroups=deny et --user.

       --map-groups=GID_extérieur,GID_intérieur,nombre|auto
           Exécuter le programme seulement après que le bloc de GID de taille nombre commençant à
           GID_extérieur a été mappé au bloc de GID commençant à GID_intérieur. Ce mappage est
           créé avec newgidmap(1). Si la plage de GID recouvre le mappage indiqué par
           --map-group, alors un « trou » sera retiré du mappage. Cela peut avoir pour
           conséquence que le GID le plus élevé ne sera pas mappé. La valeur spécial auto fera
           correspondre le premier bloc d'UID appartenant à l'utilisateur effectif de /etc/subgid
           au bloc démarrant au GID 0. Si cette option est indiquée plusieurs fois, la dernière
           occurrence prévaudra. Cette option implique --user.

       --map-auto
           Faire correspondre le premier bloc d'UID appartenant à l'utilisateur effectif de
           /etc/subuid au bloc démarrant à l'UID 0. De la même manière, faire aussi correspondre
           le premier bloc de GID appartenant au groupe effectif de /etc/subgid au bloc démarrant
           au GID 0. Cette option est destinée gérer la cas courant où le premier bloc d'UID et
           de GID subordonnés peut être mappé à la totalité de l'espace d'UID et de GID. Cette
           option est équivalente aux spécifications de --map-users=auto et --map-groups=auto.

       -r, --map-root-user
           Exécuter le programme seulement après que les identifiants d’utilisateur et de groupe
           effectifs ont été mis en correspondance avec les UID et GID du superutilisateur dans
           l’espace de noms utilisateur nouvellement créé. Cela permet d’obtenir facilement les
           capacités nécessaires pour gérer divers aspects des espaces de noms nouvellement créés
           (comme la configuration d’interfaces dans l’espace de noms réseau ou le montage des
           systèmes de fichiers dans l’espace de noms montage) même lors d’une exécution
           ordinaire. En tant que fonctionnalité surtout pratique, elle ne permet pas des cas
           d’utilisation plus sophistiqués comme la mise en correspondance de plusieurs
           intervalles d’UID et GID. Cette option implique --setgroups=deny et --user. Cette
           option est équivalente à --map-user=0 --map-group=0.

       -c, --map-current-user
           Exécuter le programme seulement après que les ID effectifs des utilisateurs et des
           groupes actuels sont mappés aux mêmes UID et GID dans l’espace de noms nouvellement
           créé. Cette option suppose --setgroups=deny et --user. Cette option est équivalente à
           --map-user=$(id -ru) --map-group=$(id -rg).

       --propagation private|shared|slave|unchanged
           De manière récursive, régler le drapeau de propagation de montage dans le nouvel
           espace de noms montage. Le comportement par défaut est de régler la propagation à
           private. Il est possible de désactiver cette caractéristique avec l’argument
           unchanged. Cette option est ignorée silencieusement quand l’espace de noms montage
           (--mount) n’est pas nécessaire.

       --setgroups allow|deny
           Permettre ou interdire l’appel système setgroups(2) dans les espaces de noms
           utilisateur.

           Pour pouvoir appeler setgroups(2), le processus appelant doit au moins avoir
           CAP_SETGID. Mais depuis Linux 3.19, une restriction supplémentaire est appliquée : le
           noyau accorde la permission à l’appel setgroups(2) seulement après que le mappage de
           GID (/proc/pid/gid_map) a été réglé. La carte de correspondances de GID peut être
           écrite par le superutilisateur quand setgroups(2) est activé (c'est-à-dire, allow, le
           comportement par défaut), et la carte de GID peut être écrite par des processus
           normaux quand setgroups(2) est désactivé de façon permanente (avec deny).

       -R, --root=répertoire
           Exécuter la commande avec le répertoire racine défini à répertoire.

       -w, --wd=répertoire
           Changer le répertoire de travail à répertoire.

       -S, --setuid UID
           Définir l’identifiant d’utilisateur qui sera utilisé dans l’espace de noms saisi.

       -G, --setgid GID
           Définir l’identifiant de groupe qui sera utilisé dans l’espace de noms saisi et
           abandonner les autres groupes.

       --monotonic décalage
           Régler le décalage de CLOCK_MONOTONIC qui sera utilisé dans l’espace de noms temps
           saisi. Cette option nécessite de ne plus partager un espace de noms temps avec --time.

       --boottime décalage
           Régler le décalage de CLOCK_BOOTTIME qui sera utilisé dans l’espace de noms temps
           saisi. Cette option nécessite de ne plus partager un espace de noms temps avec --time.

       -h, --help
           Afficher l’aide-mémoire puis quitter.

       -V, --version
           Afficher la version puis quitter.

NOTES

       Les systèmes de fichiers proc et sysfs montés comme racine dans un espace de noms
       utilisateur doivent être restreints de façon qu’un utilisateur moins privilégié ne puisse
       avoir davantage d’accès aux fichiers sensibles qu’un utilisateur plus privilégié aurait
       rendus indisponibles. En bref, la règle pour proc et sysfs est aussi près que possible
       d’un montage lié.

EXEMPLES

       La commande suivante crée un espace de noms PID, en utilisant --fork pour garantir que
       l’exécution de la commande est réalisée dans un processus enfant qui (étant le premier
       processus dans l’espace de noms) a le PID 1. L’option --mount-proc assure que le nouvel
       espace de noms montage est aussi créé simultanément et qu’un nouveau système de fichiers
       proc(5) est monté contenant une information correspondant au nouvel espace de noms PID.
       Quand la commande readlink(1) se termine, les nouveaux espaces de noms sont
       automatiquement détruits.

           # unshare --fork --pid --mount-proc readlink /proc/self
           1

       En tant qu’utilisateur ordinaire, créer un nouvel espace de noms où les accréditations
       sont mappées à l’ID racine à l’intérieur de l’espace de noms :

           $ id -u; id -g
           1000
           1000
           $ unshare --user --map-root-user \
                   sh -c 'qwhoami; cat /proc/self/uid_map /proc/self/gid_map''
           root
                    0       1000          1
                    0       1000          1

       En tant qu'utilisateur ordinaire, créer un espace de noms utilisateur où les 65536
       premiers ID sont tous mappés et où les accréditations d'utilisateur sont mappées à l’ID
       racine à l’intérieur de l’espace de noms. Le mappage est déterminé par les ID subordonnés
       assignés dans subuid(5) et subgid(5). L'exemple suivant le démontre en créant un fichier
       avec l'UID 1 et le GID 1. Par souci de brièveté, seules les mises en correspondance d'UID
       sont montrées.

           $ id -u
           1000
           $ cat /etc/subuid
           1000:100000:65536
           $ unshare --user --map-auto --map-root-user
           # id -u
           0
           # cat /proc/self/uid_map
                    0       1000          1
                    1     100000      65535
           # touch fichier; chown 1:1 file
           # ls -ln --time-style=+ fichier
           -rw-r--r-- 1 1 1 0  fichier
           # exit
           $ ls -ln --time-style=+ fichier
           -rw-r--r-- 1 100000 100000 0  fichier

       La première des commandes suivantes crée un nouvel espace de noms UTS persistant et
       modifie le nom d’hôte tel que vu dans cet espace de noms. L’espace de noms est alors saisi
       avec nsenter(1) dans le but d’afficher le nom d’hôte modifié. Cette étape montre que
       l’espace de noms UTS continue d’exister même si l’espace de noms n’a pas de processus
       membre après que la commande unshare ait terminé. L’espace de noms est alors détruit en
       retirant le montage lié.

           # touch /root/uts-ns
           # unshare --uts=/root/uts-ns hostname TOTO
           # nsenter --uts=/root/uts-ns hostname
           TOTO
           # umount /root/uts-ns

       Les commandes suivantes établissent un espace de noms montage permanent référencé par le
       montage lié /root/namespaces/mnt. Dans le but d’assurer que la création de ce montage lié
       soit une réussite, le répertoire parent (/root/namespaces) est transformé en montage lié
       dont le type de propagation n’est pas shared.

           # mount --bind /root/namespaces /root/namespaces
           # mount --make-private /root/namespaces
           # touch /root/namespaces/mnt
           # unshare --mount=/root/namespaces/mnt

       Les commandes suivantes montrent l’utilisation de l’option --kill-child lors de la
       création d’espace de noms PID, dans le but d’assurer que lorsque unshare est tué, tous les
       autres processus dans l’espace de noms PID soient tués.

           # set +m                # Ne pas imprimer les messages d’état de travaux

           # unshare --pid --fork --mount-proc --kill-child -- \

                  bash --norc -c ''(sleep 555 &) && (ps a &) && sleep 999'' &
           [1] 53456
           #     PID TTY      STAT   TIME COMMAND
                 1 pts/3    S+     0:00 sleep 999
                 3 pts/3    S+     0:00 sleep 555
                 5 pts/3    R+     0:00 ps a

           # ps h -o 'comm' $! # Montrer que le dorsal de travail est unshare(1)
           unshare
           # kill $! # Tuer unshare(1)
           # pidof sleep

       La commande pidof n’affiche rien car le processus sleep a été tué. Plus précisément, quand
       le processus sleep ayant le PID 1 dans l’espace de noms (c'est-à-dire, le processus init
       de l’espace de noms) a été tué, cela a entrainé que tous les autres processus soient tués.
       En revanche, une série de commandes similaires où l’option --kill-child n’est pas utilisée
       montre que quand unshare se termine, les processus dans l’espace de noms PID ne sont pas
       tués :

           # unshare --pid --fork --mount-proc -- \

                  bash --norc -c ''(sleep 555 &) && (ps a &) && sleep 999'' &
           [1] 53479
           #     PID TTY      STAT   TIME COMMAND
                 1 pts/3    S+     0:00 sleep 999
                 3 pts/3    S+     0:00 sleep 555
                 5 pts/3    R+     0:00 ps a

           # kill $!
           # pidof sleep
           53482 53480

       L’exemple suivant montre la création d’un espace de noms temps où l’horloge « boottime »
       est réglée à un point plusieurs années en arrière :

           # uptime -p             # Afficher le temps de fonctionnement
                                   # dans l’espace de noms temps initial
           up 21 hours, 30 minutes
           # unshare --time --fork --boottime 300000000 uptime -p
           up 9 years, 28 weeks, 1 day, 2 hours, 50 minutes

AUTEURS

       Mikhail Gusarov <dottedmag@dottedmag.net>, Karel Zak <kzak@redhat.com>

VOIR AUSSI

       newuidmap(1)  newgidmap(1)  clone(2), unshare(2), namespaces(7), mount(8)

SIGNALER DES BOGUES

       Pour envoyer un rapport de bogue, utilisez le système de gestion des problèmes à l'adresse
       https://github.com/util-linux/util-linux/issues.

DISPONIBILITÉ

       La commande unshare fait partie du paquet util-linux qui peut être téléchargé de Linux
       Kernel Archive <https://www.kernel.org/pub/linux/utils/util-linux/>.

TRADUCTION

       La traduction française de cette page de manuel a été créée par Christophe Blaess
       <ccb@club-internet.fr>, Michel Quercia <quercia AT cal DOT enst DOT fr>, Thierry Vignaud
       <tvignaud@mandriva.com>, Frédéric Delanoy <delanoy_f@yahoo.com>, Thierry Vignaud
       <tvignaud@mandriva.com>, Christophe Sauthier <christophe@sauthier.com>, Sébastien
       Blanchet, Jérôme Perzyna <jperzyna@yahoo.fr>, Aymeric Nys <aymeric AT nnx POINT com>,
       Alain Portal <aportal@univ-montp2.fr>, Thomas Huriaux <thomas.huriaux@gmail.com>, Yves
       Rütschlé <l10n@rutschle.net>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien
       Cristau <jcristau@debian.org>, Philippe Piette <foudre-blanche@skynet.be>, Jean-Baka
       Domelevo-Entfellner <domelevo@gmail.com>, Nicolas Haller <nicolas@boiteameuh.org>, Sylvain
       Archenault <sylvain.archenault@laposte.net>, Valéry Perrin <valery.perrin.debian@free.fr>,
       Jade Alglave <jade.alglave@ens-lyon.org>, Nicolas François
       <nicolas.francois@centraliens.net>, Alexandre Kuoch <alex.kuoch@gmail.com>, Lyes Zemmouche
       <iliaas@hotmail.fr>, Florentin Duneau <fduneau@gmail.com>, Alexandre Normand
       <aj.normand@free.fr>, David Prévot <david@tilapin.org>, Jean-Paul Guillonneau
       <guillonneau.jeanpaul@free.fr> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>

       Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General
       Public License version 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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⟩.