NOM
unshare – Exécuter un programme dans de nouveaux espaces de nomsSYNOPSIS
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).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.
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).
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).
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).
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).
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).
Le processus aura un ensemble propre
d’UID, de GID et de capacités. Pour de plus amples
détails, consulter user_namespaces(7).
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
À 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.
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).
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.
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.
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.
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.
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.
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.
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).
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.
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).
Exécuter la commande avec le
répertoire racine défini à
répertoire.
Changer le répertoire de travail
à répertoire.
Définir l’identifiant
d’utilisateur qui sera utilisé dans l’espace de noms
saisi.
Définir l’identifiant de groupe
qui sera utilisé dans l’espace de noms saisi et abandonner les
autres groupes.
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.
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.
Afficher l’aide-mémoire puis
quitter.
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
$ id -u; id -g 1000 1000 $ unshare --user --map-root-user \ sh -c 'aqwhoami; cat /proc/self/uid_map /proc/self/gid_map'' root 0 1000 1 0 1000 1
$ 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
# touch /root/uts-ns # unshare --uts=/root/uts-ns hostname TOTO # nsenter --uts=/root/uts-ns hostname TOTO # umount /root/uts-ns
# mount --bind /root/namespaces /root/namespaces # mount --make-private /root/namespaces # touch /root/namespaces/mnt # unshare --mount=/root/namespaces/mnt
# 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 # kill $! # Tuer # pidof sleep
# 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
# 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 <[email protected]>Gusarov Karel <[email protected]>ZakVOIR 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 <[email protected]>, Michel Quercia <quercia AT cal DOT enst DOT fr>, Thierry Vignaud <[email protected]>, Frédéric Delanoy <[email protected]>, Thierry Vignaud <[email protected]>, Christophe Sauthier <[email protected]>, Sébastien Blanchet, Jérôme Perzyna <[email protected]>, Aymeric Nys <aymeric AT nnx POINT com>, Alain Portal <[email protected]>, Thomas Huriaux <[email protected]>, Yves Rütschlé <[email protected]>, Jean-Luc Coulon (f5ibh) <[email protected]>, Julien Cristau <[email protected]>, Philippe Piette <[email protected]>, Jean-Baka Domelevo-Entfellner <[email protected]>, Nicolas Haller <[email protected]>, Sylvain Archenault <[email protected]>, Valéry Perrin <[email protected]>, Jade Alglave <[email protected]>, Nicolas François <[email protected]>, Alexandre Kuoch <[email protected]>, Lyes Zemmouche <[email protected]>, Florentin Duneau <[email protected]>, Alexandre Normand <[email protected]>, David Prévot <[email protected]>, Jean-Paul Guillonneau <[email protected]> et Jean-Pierre Giraud <[email protected]> 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 à [email protected]11 mai 2022 | util-linux 2.38.1 |