unshare
ist ein Befehl unter Linux, der es ermöglicht,
Prozesse in eigenen Namespaces zu starten. Namespaces sind eine
Kernel-Funktion, die verschiedene Aspekte des Betriebssystems isolieren,
wie Prozess-IDs (PIDs), Mount-Punkte, Netzwerkinterfaces und
Benutzer-IDs. unshare
ist eine zentrale Technologie für die
Containerisierung, da es die Isolation von Prozessen ermöglicht.
Der unshare
-Befehl erstellt neue Namespaces und führt
einen neuen Prozess darin aus. Dadurch werden bestimmte Ressourcen des
Prozesses isoliert, ohne dass sie mit anderen Prozessen des Systems
geteilt werden müssen.
unshare [OPTIONEN] PROGRAMM [ARGUMENTE...]
-i
: Neues IPC-Namespace-m
: Neues Mount-Namespace-n
: Neues Netzwerk-Namespace-p
: Neues PID-Namespace-u
: Neues UTS-Namespace (Hostname)-U
: Neues Benutzer-Namespacesudo unshare -m /bin/bash
Dies startet eine neue Bash-Shell in einem separaten Mount-Namespace. Änderungen an den Mount-Punkten innerhalb dieser Shell beeinflussen nicht das Host-System.
sudo unshare -p --fork /bin/bash
Der Parameter --fork
sorgt dafür, dass ein neuer
Prozess-ID-Namespace erstellt wird. Innerhalb dieser neuen Bash-Shell
haben alle gestarteten Prozesse ihre eigenen PID-Zuordnungen, die vom
Host-System unabhängig sind.
sudo unshare -n /bin/bash
Dies startet eine Bash-Shell in einem neuen Netzwerk-Namespace. Netzwerkgeräte und -konfigurationen innerhalb dieses Namespaces sind vom Host-Netzwerk isoliert.
sudo unshare -U /bin/bash
Ein neuer Benutzer-Namespace isoliert Benutzer- und Gruppen-IDs. Dies ermöglicht es, Prozesse als andere Benutzer zu betreiben, ohne die Privilegien des Host-Systems zu ändern.
sudo unshare -m -u -p --fork /bin/bash
Hier werden Mount-, UTS- und PID-Namespaces kombiniert. Dies isoliert den Prozess hinsichtlich der Mount-Punkte, des Hostnamens und der Prozess-IDs.
Ein neues Netzwerk-Namespace allein ist isoliert und hat keine Netzwerkkonnektivität. Um dies zu demonstrieren:
sudo unshare -n /bin/bash
Innerhalb der neuen Bash-Shell:
ip link set lo up
ip addr add 192.168.1.1/24 dev lo
ping 192.168.1.1
Hier wird das Loopback-Interface aktiviert und eine IP-Adresse zugewiesen. Dies demonstriert die Netzwerkkonfiguration innerhalb des neuen Namespaces.
/proc
als separater
Mount-NamespaceIn diesem Beispiel wird gezeigt, wie man einen neuen PID-Namespace
erstellt und das /proc
-Verzeichnis so mountet, dass es nur
die Prozesse innerhalb des neuen Namespaces anzeigt. Dabei wird die
Option --mount-proc
verwendet.
/proc
Verwenden Sie den folgenden Befehl, um einen neuen PID-Namespace zu
erstellen und /proc
zu mounten:
sudo unshare -p --fork --mount-proc=/proc /bin/bash
Dieser Befehl startet eine neue Bash-Shell in einem separaten
PID-Namespace. Die Option --mount-proc=/proc
sorgt dafür,
dass das virtuelle Dateisystem proc
im Verzeichnis
/proc
des neuen Namespaces gemountet wird. Dadurch werden
nur die Prozesse innerhalb des neuen PID-Namespaces angezeigt.
Um zu überprüfen, dass das /proc
-Verzeichnis nur die
Prozesse innerhalb des neuen PID-Namespaces anzeigt, können Sie die
Prozessliste anzeigen:
ps aux
Die Ausgabe sollte nur die Prozesse innerhalb des neuen PID-Namespaces zeigen.
sudo unshare -p --fork
erstellt einen neuen
PID-Namespace und startet einen neuen Prozess (die Bash-Shell)
darin.--mount-proc=/proc
sorgt dafür, dass ein
neues Mount für das /proc
-Verzeichnis im neuen Namespace
erstellt wird./proc
-Verzeichnis nur die Prozesse des neuen PID-Namespaces
an.