IPC Namespace
Grundlegende Informationen
Ein IPC (Inter-Process Communication)-Namespace ist eine Funktion des Linux-Kernels, die eine Isolierung von System V IPC-Objekten wie Nachrichtenwarteschlangen, gemeinsam genutzten Speichersegmenten und Semaphoren ermöglicht. Diese Isolierung gewährleistet, dass Prozesse in unterschiedlichen IPC-Namespaces nicht direkt auf die IPC-Objekte anderer Namespaces zugreifen oder diese ändern können, und bietet somit eine zusätzliche Sicherheitsschicht und Privatsphäre zwischen Prozessgruppen.
Funktionsweise:
Beim Erstellen eines neuen IPC-Namespaces wird ein vollständig isolierter Satz von System V IPC-Objekten erstellt. Das bedeutet, dass Prozesse, die in dem neuen IPC-Namespace ausgeführt werden, standardmäßig nicht auf die IPC-Objekte in anderen Namespaces oder auf das Host-System zugreifen oder diese beeinflussen können.
Innerhalb eines Namespaces erstellte IPC-Objekte sind nur für Prozesse innerhalb dieses Namespaces sichtbar und zugänglich. Jedes IPC-Objekt wird durch einen eindeutigen Schlüssel innerhalb seines Namespaces identifiziert. Obwohl der Schlüssel in verschiedenen Namespaces identisch sein kann, sind die Objekte selbst isoliert und können nicht zwischen Namespaces zugegriffen werden.
Prozesse können zwischen Namespaces wechseln, indem sie den Systemaufruf
setns()
verwenden oder neue Namespaces erstellen, indem sie die Systemaufrufeunshare()
oderclone()
mit dem FlagCLONE_NEWIPC
verwenden. Wenn ein Prozess in einen neuen Namespace wechselt oder einen erstellt, verwendet er die mit diesem Namespace verbundenen IPC-Objekte.
Labor:
Verschiedene Namespaces erstellen
CLI
Durch das Einbinden einer neuen Instanz des /proc
-Dateisystems mit dem Parameter --mount-proc
stellen Sie sicher, dass der neue Mount-Namespace eine genaue und isolierte Ansicht der prozessspezifischen Informationen für diesen Namespace hat.
Docker
Überprüfen Sie, in welchem Namespace sich Ihr Prozess befindet
Um festzustellen, in welchem Namespace sich Ihr Prozess befindet, können Sie den folgenden Befehl verwenden:
Dieser Befehl gibt den Pfad zum IPC-Namespace des aktuellen Prozesses aus. Der Platzhalter "$$" wird automatisch durch die Prozess-ID (PID) des aktuellen Prozesses ersetzt.
Wenn der Befehl erfolgreich ist, erhalten Sie eine Ausgabe ähnlich der folgenden:
Die Zahl am Ende des Ausgabeergebnisses ist die eindeutige Kennung des IPC-Namespaces, in dem sich Ihr Prozess befindet.
Alle IPC-Namespaces finden
```bash nsenter -i TARGET_PID --pid /bin/bash ``` ### IPC-Objekt erstellen
Um ein IPC-Objekt zu erstellen, können Sie die folgenden Schritte ausführen:
Erstellen Sie eine IPC-Struktur, wie z.B. eine Semaphore, eine Shared Memory oder eine Message Queue.
Rufen Sie die entsprechende Systemaufrufsfunktion auf, um das IPC-Objekt zu erstellen.
Speichern Sie den Rückgabewert der Systemaufrufsfunktion, der den Deskriptor des erstellten IPC-Objekts enthält.
Beachten Sie, dass Sie nur in einen anderen Prozess-Namespace wechseln können, wenn Sie root sind. Sie können auch nicht in einen anderen Namespace wechseln, ohne einen Deskriptor zu haben, der darauf zeigt (wie z.B. /proc/self/ns/net
).
Referenzen
Last updated