UNSHARE(1) | Commandes de l'utilisateur | UNSHARE(1) |
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
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
espace de noms IPC
espace de noms réseau
espace de noms PID
espace de noms de groupe de contrôle
espace de noms utilisateur
espace de noms temps
OPTIONS¶
-i, --ipc[=fichier]
-m, --mount[=fichier]
-n, --net[=fichier]
-p, --pid[=fichier]
Consulter aussi les options --fork et --mount-proc.
-u, --uts[=fichier]
-U, --user[=fichier]
-C, --cgroup[=fichier]
-T, --time[=fichier]
-f, --fork
--keep-caps
--kill-child[=nom_de_signal]
--mount-proc[=point_de_montage]
--map-user=uid|nom
--map-users=uid_extérieur,uid_intérieur,nombre|auto
--map-group=gid|nom
--map-groups=GID_extérieur,GID_intérieur,nombre|auto
--map-auto
-r, --map-root-user
-c, --map-current-user
--propagation private|shared|slave|unchanged
--setgroups allow|deny
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
-w, --wd=répertoire
-S, --setuid UID
-G, --setgid GID
--monotonic décalage
--boottime décalage
-h, --help
-V, --version
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 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.
11 mai 2022 | util-linux 2.38.1 |