Arbeiten mit dem Befehl nsenter Linux

Arbeiten mit dem Befehl nsenter Linux
Eine Möglichkeit, das Host -System beim Ausführen verschiedener Prozesse zu verkörpern Behälter. Für DevOps sind Container der Weg zur Bereitstellung von Anwendungen vorwärts, da sie die Sicherheit und Isolation des gesamten Systems und der Ressourcen garantieren. Die Isolierung der Systemressourcen funktioniert über den Linux Namespaces. Ein Container funktioniert unabhängig und kann nicht auf die Host -Ressourcen zugreifen.

Der Kernel kann die Ressourcen zuweisen und einschränken, auf die die ausgeführten Prozesse über die Namespaces zugreifen können. Die Namespaces erzeugen Isolation und Container werden nur Prozesse anzeigen. Um einfach mit den Containern und Namespaces zu arbeiten, die nsenter Der Befehl Linux ist erforderlich, und wir werden sehen, wie NSenter verwendet wird, um Programme in den Namespaces zu inspizieren und auszuführen.

So inspizieren Sie Linux -Namespaces mit NSenter

Bevor wir in die Verwendung von NSenter eintauchen, müssen wir Linux -Container und -Namespaces verstehen.

Was sind Linux -Container?

Mit der wachsenden Technologie hat die Nachfrage, skalierbarere und sichere Anwendungen zu entwickeln, die Notwendigkeit, Container zu verwenden. Linux -Container können am besten als Technologie bezeichnet werden, mit der Verpackungen und Isolieren von Anwendungen und Ressourcen in ihrer Laufzeitumgebung abseits des Systems entfernt werden können. Außerdem können Sie auch Container erstellen, die Namespaces für verschiedene Prozesse auf Ihrem Linux -System mit verschiedenen Tools enthalten, wie z. B Podman oder Docker.

In diesem Beispiel werden wir mit Docker einen neuen Container erstellen, wie im Bild unten gezeigt.

Beenden Sie den Container und listen Sie die verfügbaren Container aus dem Host -System auf. Sie werden feststellen, dass der von uns erstellte Container aufgeführt wird, einschließlich seiner Container -ID.

$ sudo docker ps -l

Alternativ, wenn Sie verwenden Podman Red Hat bietet einen Container in seinem Katalog an, auf den Sie mit dem folgenden Befehl zugreifen können.

$ podman run -name name name -demo -it -Registrierung.Zugang.roter Hut.com/ubi8/ubi/bin/bash

Sobald Sie den Container erstellt haben, listen Sie die Prozess -ID des Containers auf, die mit dem folgenden Befehl erstellt wurden.

$ RUNC -Liste

In der Ausgabe sollten Sie die Prozess -ID beachten. In unserem Fall ist die ID 39782.

Mit der obigen Prozess -ID können Sie die damit verbundenen Namespaces verwenden lsns oder nsenter.

Benutzen lsns, Verwenden Sie die unten stehende Syntax.

$ lsns -p

Im Gegensatz zu LSNs bietet der NSenter mehr Optionen und bietet Ihnen mehr Kontrolle.

Verwenden von NSenter mit Linux -Namespaces

Zu den gängigen Optionen, die Sie mit NSenter verwenden können, gehören:

1. -T: Dieses Flag gibt die Zielprozess -ID an.

2. -u: Es wird verwendet, um den Namespace des Prozesses einzugeben, und wenn kein Namespace eingegeben wird, wird der des Zielprozesses verwendet.

Um beispielsweise den Hostnamen des Namespace mit der ID 39782 zu erhalten, wäre der Befehl:

$ nsenter -t 39782 -U Hostname

3. -A: Wird verwendet, um alle verfügbaren Namespaces einzugeben. In unserem Fall haben wir nur einen. Wenn wir den folgenden Befehl ausführen, werden Sie feststellen, dass wir uns im Container befinden.

Sie können sich abmelden, indem Sie eingeben Ausfahrt.

4. -N: Das Flag wird verwendet, um den Netzwerk -Namespace einzugeben. Nur die Netzwerkinformationen für den gegebenen Namespace werden angezeigt.

Wenn Sie dieselben Netzwerkdetails aus dem vollständigen System anzeigen würden, würden Sie feststellen, dass es Isolation gibt.

Die Isolation erstreckt sich auf die IP -Route, und wir können auch die IP -Route für den Namespace mit dem folgenden Befehl erhalten.

$ nsenter -t 39782 -n IP -Route

Im obigen Bild können Sie feststellen, wie die erste Ausgabe für den Namespace der angegebenen Zielprozess -ID gilt. Die zweite Ausgabe ist jedoch die IP -Route für das vollständige System.

5. -P: Mit NSenter können Sie auch den PID -Namespace mit dem eingeben -P Flagge. Damit dies funktioniert, sollten Sie das haben Spitze oder ps Befehle im Container installiert.

Wenn Sie die erstellt haben Podman Container verwenden Sie den folgenden Befehl, um die zu installieren Procps-ng Paket, das Top und PS installiert PS -f Linux -Befehl.

$ yum install Procps-ng

Sie können jetzt den PID -Namespace mit dem folgenden Befehl eingeben.

$ nsenter -t 39782 -p -r ps -f -f

Der -R Legt das Stammverzeichnis fest und wenn keine angegeben ist, wie im folgenden Befehl, verwendet es das der Zielprozess -ID.

Die Ausgabe gibt den aktuell laufenden Prozess im Container.

Abschluss

Als Entwickler können Sie mit Linux -Containern nicht ausweichen. Der beste Ansatz besteht darin, sich mit Tools auszurüsten, mit denen Sie mit den verschiedenen Namespaces für Prozesse in separaten Containern interagieren können. Dank Containern ist die Isolation von Prozessen, die auf Linux ausgeführt werden, möglich. Wir haben bedeckt, wie man die benutzt nsenter Linux -Befehl zum Eingeben der Namespaces verschiedener Prozesse in jedem Container. Üben Sie weiter und probieren Sie andere Taktiken aus, um das Werkzeug besser zu verstehen.