unshare - Programme ausführen, wobei einige
Namensräume von dem Elternprozess getrennt sind
ÜBERSICHT
unshare [Optionen] [Programm [Argumente]]
Trennt die angegebenen Namensräume von dem Elternprozess
und führt dann das angegebene Programm aus. Falls
Programm nicht angegeben ist, dann wird »${SHELL}«
ausgeführt (Vorgabe: /bin/sh).
Die Namensräume können wahlweise beständig
gemacht werden, indem /proc/PID/ns/Typ-Dateien mit
»bind« in einen Dateisystempfad eingebunden und mit
nsenter(1) betreten werden, sogar, wenn das Programm beendet
wird (außer PID-Namensräume, bei denen ein dauerhaft laufender
Init-Prozess benötigt wird). Sobald ein beständiger Namensraum
nicht länger benötigt wird, kann die Beständigkeit mit
umount(8) aufgehoben werden. Weitere Einzelheiten finden Sie im
Abschnitt BEISPIELE.
Die Namensräume, die getrennt werden sollen, werden
über Optionen angegeben. Trennbare Namensräume sind:
- Einhänge-Namensraum
- Ein- und Aushängen von Dateisystemen betrifft den Rest des Systems
nicht, außer für Dateisysteme, die explizit als gemeinsam
benutzt (»shared«) markiert sind (mit mount
--make-shared; siehe /proc/self/mountinfo oder findmnt
-o+PROPAGATION für die shared-Schalter). Für
weitere Details siehe mount_namespaces(7) und die Diskussion des
Schalters CLONE_NEWNS in clone(2).
Seit Util-Linux Version 2.27 setzt unshare die
Ausbreitung in einem neuen Einhängenamensraum auf private,
um sicherzustellen, dass der neue Namensraum wirklich getrennt ist.
Diese Funktionalität kann mit der Option --propagation
unchanged deaktiviert werden. Beachten Sie, dass private die
Vorgabe des Kernels ist.
- UTS-Namensraum
- Setzen des Rechner- oder Domain-Namens wird den Rest des Systems nicht
betreffen. Für weitere Details siehe namespaces(7) und die
Diskussion des Schalters CLONE_NEWUTS in clone(2).
- IPC-Namensraum
- Der Prozess wird einen unabhängigen Namensraum für
POSIX-Nachrichtenwarteschlangen sowie System-V-Nachrichtenwarteschlangen,
Semaphore-Gruppen und gemeinsame Speichersegmente haben. Für
weitere Details siehe namespaces(7) und die Diskussion des
Schalters CLONE_NEWIPC in clone(2).
- Netz-Namensraum
- Der Prozess wird über unabhängige IPv4- und IPv6-Stapel,
IP-Routing-Tabellen, Firewall-Regeln, die Verzeichnisbäume
/proc/net und /sys/class/net usw. verfügen.
Für weitere Details siehe namespaces(7) und die Diskussion
des Schalters CLONE_NEWNET in clone(2).
- PID-Namensraum
- Kindprozesse werden eine eigene Gruppe von Abbildungen der PIDs zu
Prozessen haben. Für weitere Details siehe pid_namespaces(7)
und die Diskussion des Schalters CLONE_NEWPID in
clone(2).
- Cgroup-Namensraum
- Der Prozess wird über einen virtualisierten Blick auf
/proc/self/cgroup verfügen und neue
Cgroup-Einhängungen werden ihre Wurzel in der Wurzel der
Cgroup-Namensraum-Wurzel haben. Für weitere Details siehe
cgroup_namespaces(7) und die Diskussion des Schalters
CLONE_NEWCGROUP in clone(2).
- Benutzer-Namensraum
- Der Prozess wird über eine eindeutige Gruppe an UIDs, GIDS und
Capabilities verfügen. Für weitere Details siehe
user_namespaces(7) und die Diskussion des Schalters
CLONE_NEWUSER in clone(2).
- -i,
--ipc[=Datei]
- Trennen des IPC-Namensraums. Falls Datei angegeben ist, wird ein
beständiger Namensraum mit einer
»bind«-Einhängung erstellt.
- -m,
--mount[=Datei]
- Hebt die Freigabe des eingehängten Namensraums auf. Falls
Datei angegeben ist, wird ein beständiger Namensraum durch
ein Einhängen mit »bind« erstellt. Beachten Sie, dass
Datei auf einem Dateisystem liegen muss, bei dem der
Ausbreitungsschalter auf private gesetzt ist. Verwenden Sie den
Befehl findmnt -o+PROPAGATION, wenn Sie sich bezüglich der
derzeitigen Einstellung nicht sicher sind. Lesen Sie auch die
nachfolgenden Beispiele.
- -n,
--net[=Datei]
- Trennen des Netz-Namensraums. Falls Datei angegeben ist, wird ein
beständiger Namensraum mit einer
»bind«-Einhängung erstellt.
- -p,
--pid[=Datei]
- Trennen des PID-Namensraums. Falls Datei angegeben ist, wird ein
beständiger Namensraum mit einer
»bind«-Einhängung erstellt. Siehe auch die Optionen
--fork und --mount-proc.
- -u,
--uts[=Datei]
- Trennen des UTS-Namensraums. Falls Datei angegeben ist, wird ein
beständiger Namensraum mit einer
»bind«-Einhängung erstellt.
- -U,
--user[=Datei]
- Trennen des Benutzer-Namensraums. Falls Datei angegeben ist, wird
ein beständiger Namensraum mit einer
»bind«-Einhängung erstellt.
- -C,
--cgroup[=Datei]
- Trennen des Cgroup-Namensraums. Falls Datei angegeben ist, wird ein
beständiger Namensraum mit einer
»bind«-Einhängung erstellt.
- -f, --fork
- Verzweigt das angegebene Programm als Kindprozess von
unshare, anstatt es direkt auszuführen. Dies ist
nützlich, wenn eine neuer PID-Namensraum erstellt wird.
- --kill-child[=Signame]
- Wenn sich unshare beendet, soll Signame an den mit Fork
erstellten Kindprozess gesandt werden. Kombiniert mit --pid erlaubt
dies ein leichtes und zuverlässiges Töten eines gesamten
Prozessbaums unterhalb von unshare. Falls nicht angegeben, ist
Signame standardmäßig SIGKILL. Diese Option
impliziert --fork.
- --mount-proc[=Einhängepunkt]
- Direkt vor Ausführung des Programms wird das proc-Dateisystem unter
Einhängepunkt (Vorgabe ist /proc) eingehängt. Das ist
bei der Erstellung eines neuen PID-Namensraums nützlich. Dies
impliziert auch die Erstellung eines neuen Einhängenamensraums, da
die /proc-Einhängung ansonsten bestehende Programme auf dem System
durcheinanderbringen würde. Das neue proc-Dateisystem wird explizit
als privat eingehängt (mit MS_PRIVATE|MS_REC).
- -r,
--map-root-user
- Führt das Programm erst aus, wenn die effektive Benutzer- und
Gruppenkennungen auf die UID und GID des Systemverwalters in dem neu
erstellten Namensraum abgebildet wurde. Dies ermöglicht es, bequem
die benötigten Capabilities zu erlangen, um verschiedene Aspekte in
dem neu erstellten Namensraum zu verwalten (wie die Konfiguration von
Schnittstellen im Netz-Namensraum oder das Einhängen von
Dateisystemen in dem Einhängenamensraum), selbst bei
unprivilegierter Ausführung. Als reine
Bequemlichkeitsfunktionalität unterstützt es keine
fortgeschritteneren Anwendungsfälle, wie das Abbilden von mehreren
Bereichen von UIDs und GIDs. Diese Option impliziert
--setgroups=deny.
- --propagation
private|shared|slave|unchanged
- Setzt den Einhängeausbreitungsschalter in dem neuen
Einhängenamensraum rekursiv. Die Vorgabe ist, die Ausbreitung auf
private zu setzen. Es ist möglich, diese
Funktionalität mit dem Argument unchanged zu deaktivieren.
Diese Option wird ohne Rückmeldung ignoriert, wenn der
Einhängenamensraum (--mount) nicht angefordert wird.
- --setgroups
allow|deny
- Erlaubt oder verweigert den Systemaufruf setgroups(2) in
Benutzer-Namensräumen.
Um setgroups(2) aufrufen zu können, muss der
aufrufende Prozess mindestens über CAP_SETGID verfügen.
Seit Linux 3.19 gilt eine weitere Einschränkung: Der Kernel
erteilt die Berechtigung, setgroups(2) aufzurufen, nur nachdem
die GID-Abbildung (/proc/pid/gid_map) eingerichtet
wurde. Die GID-Abbildung ist durch Root beschreibbar, wenn
setgroups(2) aktiviert ist (d.h. allow, die Vorgabe) und
die GID-Abbildung wird durch unprivilegierte Prozesse beschreibbar, wenn
setgroups(2) permanent deaktiviert ist (mit deny).
- -V, --version
- zeigt Versionsinformationen an und beendet das Programm.
- -h, --help
- zeigt diese Hilfe an und beendet das Programm.
Die proc- und sysfs-Dateisystemeinhängungen als Root in
einem Benutzernamensraum müssen eingeschränkt werden, so dass
ein weniger privilegierter Benutzer nicht mehr Zugriffe auf sensitive
Dateien haben kann, als ein höher privilegierter Benutzer
unverfügbar gemacht hat. Kurz gesagt, die Regeln für proc und
sysfs ist so ähnlich zu einer Bind-Einhängung wie
möglich.
- # unshare --fork --pid --mount-proc readlink /proc/self
- 1
-
Etabliert einen PID-Namensraum und stellt sicher, dass er PID 1 gegen eine
darin frisch eingehängte Procfs-Instanz ist.
- $ unshare --map-root-user --user sh -c whoami
- root
-
Etabliert einen user-Namensraum als unprivilegierten Benutzer mit einem
Benutzer »root« darin.
- # touch /root/uts-ns
- # unshare --uts=/root/uts-ns Rechnername FOO
- # nsenter --uts=/root/uts-ns Rechnername
- FOO
- # umount /root/uts-ns
-
Etabliert einen dauerhaften UTS-Namensraum und verändert den
Rechnernamen. Der Namensraum wird mit nsenter betreten. Der
Namensraum wird durch Aushängen der »bind«-Referenz
zerstört.
- # mount --bind /root/namespaces /root/namespaces
- # mount --make-private /root/namespaces
- # touch /root/namespaces/mnt
- # unshare --mount=/root/namespaces/mnt
-
Etabliert einen dauerhaften Einhängenamensraum, der von der
»bind«-Einhängung /root/namespaces/mnt angegeben
wird. Dieses Beispiel zeigt eine portierbare Lösung, weil es
sicherstellt, dass die »bind«-Einhängung auf einem
gemeinsam nutzbaren Dateisystem erstellt wird.
- # unshare -pf --kill-child -- bash -c (sleep 999 &) &&
sleep 1000 &
- # pid=$!
- # kill $pid
-
Zuverlässiges Töten von Unterprozessen des Programms.
Wenn unshare getötet wird, wird auch alles unterhalb davon
getötet. Ohne dies wären die Kindprozesse von
Programm verwaist und bekämen PID 1 als neuen Elternprozess.
Der Befehl unshare ist Teil des Pakets util-linux und kann von
https://www.kernel.org/pub/linux/utils/util-linux/ heruntergeladen
werden.
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von
Chris Leick <c.leick@vollbio.de>, Dr. Tobias Quathamer
<toddy@debian.org> und Helge Kreutzmann <debian@helgefjell.de>
erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die
GNU General Public License Version 3 oder neuer bezüglich der
Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite
finden, schicken Sie bitte eine E-Mail an
<debian-l10n-german@lists.debian.org>.