2016-01-01 21 views
10

Die ip netns erstellt den Verweis auf den (named) Netzwerknamespace in /var/run/ns, die leicht verfolgt werden konnte. Dasselbe könnte auch durch /proc/[pid]/ns/net bestimmt werden. Es ist jedoch möglich, dass ein benutzerdefiniertes Programm ein Netz erstellt und den entsprechenden Inode an einem anderen unkonventionellen Ort speichert. Dies kann es schwierig machen, zu bestimmen, ob es Netzwerke gibt, die wir auflisten könnten oder nicht.Linux-Namespaces: Ist es möglich, dass ein Netzwerknamespace existiert, ohne mit einem Prozess verbunden zu sein?

Zweitens zerstört unshare <cmd> das net ns, wenn der Prozess beendet, was in Ordnung ist. ip netns exec <netns> <cmd> behält die ns jedoch auch nach dem Beenden des Befehls/Prozesses bei. Ich glaube, es könnte für jedes benutzerdefinierte Programm möglich sein, dasselbe zu tun.

Daher ist die Frage: Ist es möglich, dass ein benutzerdefiniertes Programm erstellt ein unbenanntes net ns, und es ist nicht zugeordnet mit einem Prozess?

Ist es außerdem möglich, solche (versteckten) Netze aus user-space aufzulisten, da wir die Pfade zu den Inodes nicht kennen? (Der Kernel hat natürlich eine verkettete Liste der Net-ns) Ein Code-Snippet wird hilfreich sein.

+0

Würde mehr Antworten zu schätzen wissen. Jemand? Vielen Dank! – user31986

Antwort

1

Ist es möglich, dass ein benutzerdefiniertes Programm ein unbenanntes Netz ns erstellt und es nicht mit einem Prozess verbunden ist?

Ja, es ist möglich. Nach Linux Namensräume man page (http://man7.org/linux/man-pages/man7/namespaces.7.html):

Jeder Prozess hat ein/proc/[pid]/ns/Unterverzeichnis einen Eintrag für jeden Namensraum enthält, die durch setns manipuliert unterstützt wird (2):

Bind mounten (siehe mount (2)) eine der Dateien in diesem Verzeichnis zu irgendwo anders im Dateisystem hält den entsprechenden Namespace von den Prozess von pid angegeben am Leben, auch wenn alle Prozesse derzeit in den Namespace zu beenden.

über die andere Frage:

ist es möglich, solche (verdecktes) Netto-ns von User-Space, da zur Liste heraus, dass wir nicht wissen, die Pfade zu dem I-Knoten?

Wenn Sie das obige Zitat aus der ersten Frage zu prüfen, durch gebundene Pfade untersuchen sollten Sie in der Lage sein, diese versteckten Namensräume zu finden.

+0

Die gebundenen Pfade in/proc sind spezifisch für das Dienstprogramm netns, das sie absichtlich erstellt. Wenn Sie ein net ns, sagen wir, in C-Programm erstellen, wie verfolgen Sie es? – user31986