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/bashDies 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/bashDer 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/bashDies 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/bashEin 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/bashHier 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/bashInnerhalb der neuen Bash-Shell:
ip link set lo up
ip addr add 192.168.1.1/24 dev lo
ping 192.168.1.1Hier 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.
/procVerwenden Sie den folgenden Befehl, um einen neuen PID-Namespace zu
erstellen und /proc zu mounten:
sudo unshare -p --fork --mount-proc=/proc /bin/bashDieser 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 auxDie 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.