BEZEICHNUNG
unshare - Programm in neuen Namensräumen ausführenÜBERSICHT
unshare [Optionen] [Programm [Argumente]]BESCHREIBUNG
Der Befehl unshare erzeugt neue Namensräume (wie in den nachfolgend beschriebenen Befehlszeilenoptionen angegeben) und führt dann das angegebene Programm aus. Falls kein Programm angegeben ist, dann wird »${SHELL}« ausgeführt (Vorgabe: /bin/sh).Ein- und Aushängen von Dateisystemen
betrifft den Rest des Systems nicht, außer für Dateisysteme, die
explizit als Mehrfacheinhängungen 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).
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.
Setzen des Rechner- oder Domain-Namens wird
den Rest des Systems nicht betreffen. Für weitere Details siehe
uts_namespaces(7).
Der Prozess erhält einen
unabhängigen Namensraum für POSIX-Meldungswarteschlangen sowie
System-V-Meldungswarteschlangen, Semaphor-Gruppen und gemeinsam genutzte
Speichersegmente. Für weitere Details siehe
ipc_namespaces(7).
Der Prozess erhält unabhängige
IPv4- und IPv6-Stapel, IP-Routing-Tabellen, Firewall-Regeln, die
Verzeichnisbäume /proc/net und /sys/class/net, Sockets
usw. Für weitere Details siehe network_namespaces(7).
Kindprozesse werden eine eigene Gruppe von
Abbildungen der PIDs zu Prozessen haben. Für weitere Details siehe
pid_namespaces(7).
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).
Der Prozess wird über eine eindeutige
Gruppe an UIDs, GIDS und Capabilities verfügen. Für weitere
Details siehe user_namespaces(7).
Der Prozess kann eine abweichende Sicht auf
CLOCK_MONOTONIC und/oder CLOCK_BOOTTIME haben, was mittels
/proc/self/timens_offsets geändert werden kann. Für
weitere Details, siehe time_namespaces(7).
OPTIONEN
-i, --ipc[=Datei]Erzeugen eines neuen IPC-Namensraums. Falls
eine Datei angegeben ist, wird der Namensraum beständig gemacht,
indem eine »bind«-Einhängung auf der Datei
erstellt wird.
erstellt einen neuen
Einhänge-Namensraum. Falls eine Datei angegeben ist, wird der
Namensraum durch Erzeugen einer »bind«-Einhängung in
Datei beständig gemacht. Beachten Sie, dass die Datei auf
einem Dateisystem liegen muss, dessen Ausbreitungstyp nicht auf shared
gesetzt ist (anderenfalls würde ein Fehler auftreten). Verwenden Sie
den Befehl findmnt -o+PROPAGATION, wenn Sie sich bezüglich der
derzeitigen Einstellung nicht sicher sind. Lesen Sie auch die nachfolgenden
Beispiele.
erstellt einen neuen Netz-Namensraum. Falls
eine Datei angegeben ist, wird der Namensraum durch Erzeugen einer
»bind«-Einhängung in Datei beständig
gemacht.
erstellt einen neuen PID-Namensraum. Falls
eine Datei angegeben ist, wird der Namensraum durch Erzeugen einer
»bind«-Einhängung in Datei beständig
gemacht. (Die Erstellung eines beständigen PID-Namensraums wird
fehlschlagen, wenn nicht auch die Option --fork angegeben ist.)
Siehe auch die Optionen --fork und --mount-proc.
erstellt einen neuen UTS-Namensraum. Falls
eine Datei angegeben ist, wird der Namensraum durch Erzeugen einer
»bind«-Einhängung in Datei beständig
gemacht.
erstellt einen neuen Benutzer-Namensraum.
Falls eine Datei angegeben ist, wird der Namensraum durch Erzeugen
einer »bind«-Einhängung in Datei beständig
gemacht.
erstellt einen neuen Cgroup-Namensraum. Falls
eine Datei angegeben ist, wird der Namensraum durch Erzeugen einer
»bind«-Einhängung in Datei beständig
gemacht.
erstellt einen neuen Zeit-Namensraum. Falls
eine Datei angegeben ist, wird der Namensraum durch Erzeugen einer
»bind«-Einhängung in Datei beständig
gemacht. Mit den Optionen --monotonic und --boottime
können Sie den korrespondierenden Versatz im Zeit-Namensraum
angeben.
Forkt das angegebene Programm als
Kindprozess von unshare, anstatt es direkt auszuführen. Dies ist
nützlich, wenn Sie einen neuen PID-Namensraum erstellen. Beachten Sie:
Wenn unshare auf einen Kindprozess wartet, dann ignoriert es
SIGINT und SIGTERM und leitet keine Signale an den Kindprozess
weiter. Es ist daher nötig, Signale an den Kindprozess zu senden.
stellt bei übergebener Option
--user sicher, dass die im Benutzernamensraum gewährten
Capabilities im Kindprozess erhalten bleiben.
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.
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).
führt das Programm erst aus, nachdem
die aktuelle effektive Benutzerkennung auf UID gesetzt wurde. Falls
diese Option mehrfach angegeben wird, hat die zuletzt angegebene Option
Vorrang. Diese Option impliziert --user.
führt das Programm nur aus, nachdem der
Block der Benutzer-IDs der Größe Anzahl beginnend bei der
äußeren_UID auf den Block der Benutzer-IDs beginnend bei
der inneren_UID abgebildet wurde. Diese Abbildung geschieht mittels
newuidmap(1). Falls die Bereiche der Benutzer-IDs mit der durch
--map-user angegebenen Abbildung überlappen, wird ein
»Loch« aus der Abbildung entfernt. Dadurch kann es passieren,
dass die höchste Benutzer-ID der Abbildung nicht abgebildet wird. Der
spezielle Wert auto bildet den ersten Block der Benutzer-IDs, der dem
effektiven Benutzer aus /etc/subuid gehört, auf einen Block ab,
der bei der Benutzer-ID 0 beginnt. Falls diese Option mehrmals angegeben wird,
erhält die letzte Angabe Vorrang. Diese Option impliziert
--user.
führt das Programm erst aus, nachdem
die aktuelle effektive Gruppenkennung auf GID gesetzt wurde. Falls
diese Option mehrfach angegeben wird, hat die zuletzt angegebene Option
Vorrang. Diese Option impliziert --setgroups=deny und
--user.
führt das Programm nur aus, nachdem der
Block der Gruppen-IDs der Größe _Anzahl_ beginnend bei der
äußeren_GID auf den Block der Gruppen-IDs beginnend bei
der inneren_GID abgebildet wurde. Diese Abbildung geschieht mittels
newgidmap(1). Falls die Bereiche der Gruppen-IDs mit der durch
--map-group angegebenen Abbildung überlappen, wird ein
»Loch« aus der Abbildung entfernt. Dadurch kann es passieren,
dass die höchste Gruppen-ID der Abbildung nicht abgebildet wird. Der
spezielle Wert auto bildet den ersten Block der Benutzer-IDs, der dem
effektiven Benutzer aus /etc/subgid gehört, auf einen Block ab,
der bei der Gruppen-ID 0 beginnt. Falls diese Option mehrmals angegeben wird,
erhält die letzte Angabe Vorrang. Diese Option impliziert
--user.
bildet den ersten Block der Benutzerkennungen,
die dem effektiven Benutzer aus /etc/subuid gehören, auf einen
Block beginnend mit der Benutzerkennung 0 ab. Auf die gleiche Weise wird auch
der erste Block der Gruppenkennungen, die der effektiven Gruppe aus
/etc/subgid gehören, auf einen Block beginnend mit der
Gruppenkennung 0 abgebildet. Diese Option ist für den häufig
vorkommenden Fall gedacht, in dem der erste Block von Subordinaten-Benutzer-
und Gruppenkennungen den gesamten Benutzer- und Gruppenkennungsraum abbilden
kann. Diese Option ist gleichbedeutend mit der gleichzeitigen Angabe von
--map-users=auto und --map-groups=auto.
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
und --user. Diese Option ist äquivalent zu --map-user=0
--map-group=0.
führt das Programm erst aus, nachdem
die aktuellen effektiven Benutzer- und Gruppenkennungen im neu erzeugten
Benutzernamensraum auf die gleiche UID und GID gesetzt wurde. Diese Option
impliziert --setgroups=deny und --user. Diese Option ist
äquivalent zu --map-user=$(id -ru) --map-group=$(id -rg).
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.
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).
führt den Befehl aus, wobei das
Wurzelverzeichnis auf das angegebene Verzeichnis gesetzt wird.
ändert das Arbeitsverzeichnis auf das
angegebene Verzeichnis.
legt die Benutzerkennung fest, die in dem
betretenen Namensraum verwendet wird.
legt die Gruppenkennung fest, die in dem
betretenen Namensraum verwendet wird und entfernt zusätzliche
Gruppen.
legt den Versatz von CLOCK_MONOTONIC
fest, der im betretenen Zeit-Namensraum verwendet wird. Diese Option erfordert
die Trennung eines Zeit-Namensraums mit --time.
legt den Versatz von CLOCK_BOOTTIME
fest, der im betretenen Zeit-Namensraum verwendet wird. Diese Option erfordert
die Trennung eines Zeit-Namensraums mit --time.
zeigt einen Hilfetext an und beendet das
Programm.
zeigt die Versionsnummer an und beendet das
Programm.
ANMERKUNGEN
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 sensible Dateien haben kann, als ein höher privilegierter Benutzer unverfügbar gemacht hat. Kurz gesagt, die Regeln für proc und sysfs sind so ähnlich zu einer Einhängung mit bind(2) wie möglich.BEISPIELE
Der folgende Befehl erzeugt einen PID-Namensraum, wobei --fork verwendet wird, um sicherzustellen, dass der aufgerufene Befehl in einem Kind-Namensraum ausgeführt wird (welcher der erste Prozess im Namensraum ist), der die PID 1 hat. Die Option --mount-proc sorgt dafür, dass gleichzeitig auch ein neuer Einhängenamensraum erzeugt und ein neues proc(5)-Dateisystem eingehängt wird, das Informationen zum neuen PID-Namensraum enthält. Wenn der Befehl readlink(1) beendet wird, werden die neuen Namensräume automatisch zerstört.# unshare --fork --pid --mount-proc readlink /proc/self 1
$ id -u; id -g 1000 1000 $ unshare --user --map-root-user \ sh -c ''whoami; 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 file; chown 1:1 file # ls -ln --time-style=+ file -rw-r--r-- 1 1 1 0 file # exit $ ls -ln --time-style=+ file -rw-r--r-- 1 100000 100000 0 file
# touch /root/uts-ns # unshare --uts=/root/uts-ns hostname FOO # nsenter --uts=/root/uts-ns hostname FOO # 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 # Keine Meldungen zum Auftragsstatus ausgeben # 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' $! # Zeigen, dass der Hintergrund-Job ist unshare # kill $! # töten # 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 # Betriebszeit im ursprünglichen Zeit-Namensraum anzeigen up 21 hours, 30 minutes # unshare --time --fork --boottime 300000000 uptime -p up 9 years, 28 weeks, 1 day, 2 hours, 50 minutes
AUTOREN
Mikhail <[email protected]>Gusarov Karel <[email protected]>ZakSIEHE AUCH
newuidmap(1) newgidmap(1) clone(2), unshare(2), namespaces(7), mount(8)FEHLER MELDEN
Verwenden Sie zum Melden von Fehlern das Fehlererfassungssystem auf <https://github.com/util-linux/util-linux/issues>.VERFÜGBARKEIT
Der Befehl unshare ist Teil des Pakets util-linux, welches heruntergeladen werden kann von: Linux Kernel Archive <https://www.kernel.org/pub/linux/utils/util-linux/>.ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Chris Leick <[email protected]>, Dr. Tobias Quathamer <[email protected]>, Helge Kreutzmann <[email protected]> und Mario Blättermann <[email protected]> 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 die Mailingliste der Übersetzer11. Mai 2022 | util-linux 2.38.1 |