Manpages

NOM

unshare - Exécuter un programme avec des espaces de noms isolés du parent

SYNOPSIS

unshare [options] [programme [arguments]

DESCRIPTION

Isoler les espaces de noms indiqués du processus parent puis exécuter le programme indiqué. Si programme n’est pas fourni, alors ${SHELL} est exécuté (par défaut : /bin/sh).

Les espaces de noms peuvent facultativement être rendus persistants par un montage lié des fichiers /proc/pid/ns/type à un chemin de système de fichiers et entrés avec nsenter(1) même après que le programme est terminé (excepté les espaces de noms de 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). Consulter la section EXEMPLES pour plus de détails.

Les espaces de noms à séparer sont indiqués à l’aide d’options. Les espaces de noms non isolables sont :
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 monté 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 namespaces(7) et l’explication du drapeau CLONE_NEWUTS dans clone(2).

espace de noms IPC

Le processus aura un nom d’espace indépendant pour les files de messages 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 namespaces(7) et l’explication du drapeau CLONE_NEWIPC dans clone(2).

espace de noms réseau

Le processus aura des piles IPv4 et IPv6, des tables de routage IP, des règles de pare-feu, des arborescences de répertoires /proc/net et /sys/class/net, des sockets, etc., indépendantes. Pour de plus amples détails, consulter namespaces(7) et l’explication du drapeau CLONE_NEWNET dans clone(2).

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) et l’explication du drapeau CLONE_NEWPID dans clone(2).

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) et l’explication du drapeau CLONE_NEWCGROUP dans clone(2).

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) et l’explication du drapeau CLONE_NEWUSER dans clone(2).

OPTIONS

-i, --ipc[=fichier]

Isoler l’espace de noms IPC. Si fichier est indiqué, alors un espace de noms persistant est créé par un montage lié.

-m, --mount[=fichier]

Isoler l’espace de noms de montage. Si fichier est indiqué, alors un espace de noms persistant est créé par un montage lié. Remarquez que fichier doit être situé sur le système de fichiers avec le drapeau de propagation réglé à private. 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]

Isoler l’espace de noms réseau. Si fichier est indiqué, alors un espace de noms persistant est créé par un montage lié.

-p, --pid[=fichier]

Isoler l’espace de noms PID. Si fichier est indiqué, alors un espace de noms persistant est créé par un montage lié. Consultez également les options --fork et --mount-proc.

-u, --uts[=fichier]

Isoler l’espace de noms UTS. Si fichier est indiqué, alors un espace de noms persistant est créé par un montage lié.

-U, --user[=fichier]

Isoler l’espace de noms utilisateur. Si fichier est indiqué, alors un espace de noms persistant est créé par un montage lié.

-m, --cgroup[=fichier]

Isoler l’espace de noms groupe de contrôle. Si fichier est indiqué, alors un espace de noms persistant est créé par un montage lié.

-f, --fork

Engendrer le programme indiqué comme un processus enfant d’unshare au lieu de l’exécuter directement. C’est utile lors de la création d’un nouvel espace de noms PID.

--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_de_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 de 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).

-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 le nouvel espace de noms utilisateur. Cela permet d’obtenir facilement les capacités nécessaires pour gérer divers aspects des nouveaux espaces de noms (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 de 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.

-r, --map-root-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.

--propagation private|shared|slave|unchanged

De manière récursive, régler le drapeau de propagation de montage dans le nouvel espace de noms de 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 de 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.

-V, --version

Afficher le nom et la version du logiciel et quitter.

-h, --help

Afficher l’aide-mémoire 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

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

1

Établir un espace de noms PID, s’assurer d’être le PID 1 dedans par rapport à une instance procfs nouvellement montée.

$ unshare --map-root-user --user sh -c whoami
superutilisateur

Établir un espace de noms utilisateur en tant qu’utilisateur ordinaire avec un superutilisateur dedans.

# touch /root/uts-ns
# unshare --uts=/root/uts-ns nom_hôte TOTO
# nsenter --uts=/root/uts-ns nom_hôte

TOTO

# umount /root/uts-ns

Établir un espace de noms persistant UTS et modifier le nom d’hôte. L’espace de noms est entré avec nsenter. L’espace de noms est détruit en démontant la référence liée.

# mount --bind /root/espace_de noms /root/espace_de_noms
# mount --make-private /root/espace_de_noms
# touch /root/espace_de_noms/montage
# unshare --mount=/root/espace_de_noms/montage

Établir un espace de noms permanent de montage référencé par le montage lié /root/espace_de_noms/montage. Cet exemple montre une solution portable, car il assure que le montage lié est créé sur un système de fichiers partagé.

# unshare -pf --kill-child -- bash -c (sleep 999 &) && sleep 1000 &
# pid=$!
# kill $pid

Destruction fiable de sous-processus du programme. Quand unshare est détruit, toute chose sous lui est aussi détruite. Sans cela, l’enfant du programme serait devenu orphelin et rattaché au PID 1.

VOIR AUSSI

clone(2), unshare(2), namespaces(7), mount(8)

AUTEURS

dottedmag [AT] dottedmag.net">Mikhail Gusarov
kzak [AT] redhat.com">Karel Zak

DISPONIBILITÉ

La commande unshare fait partie du paquet util-linux, elle est disponible sur <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 [AT] club-internet.fr>, Michel Quercia <quercia AT cal DOT enst DOT fr>, Thierry Vignaud <tvignaud [AT] mandriva.com>, Frédéric Delanoy <delanoy_f [AT] yahoo.com>, Thierry Vignaud <tvignaud [AT] mandriva.com>, Christophe Sauthier <christophe [AT] sauthier.com>, Sébastien Blanchet, Jérôme Perzyna <jperzyna [AT] yahoo.fr>, Aymeric Nys <aymeric AT nnx POINT com>, Alain Portal <aportal [AT] univ-montp2.fr>, Thomas Huriaux <thomas.huriaux [AT] gmail.com>, Yves Rütschlé <l10n [AT] rutschle.net>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon [AT] wanadoo.fr>, Julien Cristau <jcristau [AT] debian.org>, Philippe Piette <foudre-blanche [AT] skynet.be>, Jean-Baka Domelevo-Entfellner <domelevo [AT] gmail.com>, Nicolas Haller <nicolas [AT] boiteameuh.org>, Sylvain Archenault <sylvain.archenault [AT] laposte.net>, Valéry Perrin <valery.perrin.debian [AT] free.fr>, Jade Alglave <jade.alglave [AT] ens-lyon.org>, Nicolas François <nicolas.francois [AT] centraliens.net>, Alexandre Kuoch <alex.kuoch [AT] gmail.com>, Lyes Zemmouche <iliaas [AT] hotmail.fr>, Florentin Duneau <fduneau [AT] gmail.com>, Alexandre Normand <aj.normand [AT] free.fr> et David Prévot <david [AT] tilapin.org>

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 [AT] lists.org>.

COMMENTS