Ich frage mich, was genau die Funktion "Namespaces-Unterstützung" im Linux-Kernel bedeutet. Ich verwende Kernel 3.11.1 (der aktuell neueste stabile Kernel).
Wenn ich mich entscheide, es zu deaktivieren, merke ich dann eine Änderung an meinem System?
Und falls jemand beschließt, Namespaces zu verwenden, reicht es dann, nur NAMESPACES=Y
im Kernel zu kompilieren , oder benötigt er auch Userspace-Tools?
linux
linux-kernel
namespace
Martin Vegter
quelle
quelle
Antworten:
Kurz gesagt, Namespaces bieten die Möglichkeit, ein virtuelles Linux-System in einem größeren Linux-System zu erstellen. Dies unterscheidet sich von der Ausführung einer virtuellen Maschine, die als nicht privilegierter Prozess ausgeführt wird: Die virtuelle Maschine wird als einzelner Prozess auf dem Host angezeigt, wohingegen Prozesse, die in einem Namespace ausgeführt werden, weiterhin auf dem Hostsystem ausgeführt werden.
Ein virtuelles System, das in einem größeren System ausgeführt wird, wird als Container bezeichnet . Die Idee eines Containers ist, dass Prozesse, die im Container ausgeführt werden, glauben, dass sie die einzigen Prozesse im System sind. Insbesondere hat der Root-Benutzer innerhalb des Containers keine Root-Rechte außerhalb des Containers (beachten Sie, dass dies nur in ausreichend aktuellen Versionen des Kernels zutrifft).
Namespaces virtualisieren jeweils ein Feature. Einige Beispiele für Typen von Namespaces sind:
Seit Linux-Kernel 3.8 können nichtprivilegierte Benutzer Benutzernamensräume erstellen. Auf diese Weise kann ein normaler Benutzer Funktionen nutzen, die für Root reserviert sind (z. B. das Ändern von Routingtabellen oder das Festlegen von Funktionen).
Namespaces verlassen sich auf den Kernel, um die Isolierung zwischen Namespaces zu gewährleisten. Es ist ziemlich kompliziert, dies zu korrigieren, so dass immer noch Sicherheitslücken herumliegen können. Das Risiko von Sicherheitslücken ist der Hauptgrund dafür, dass die Funktion nicht aktiviert wird. Ein weiterer Grund, dies nicht zu aktivieren, ist, wenn Sie einen kleinen Kernel für ein eingebettetes Gerät erstellen. In einem Allzweck-Kernel, den Sie auf einem typischen Server oder einer typischen Arbeitsstation installieren möchten, sollten Namespaces wie bei allen anderen ausgereiften Kernel-Funktionen aktiviert sein.
Es gibt noch wenige Anwendungen, die Namespaces verwenden. Hier sind ein paar:
Weitere Informationen finden Sie in der LWN-Artikelserie von Michael Kerrisk .
quelle
Der Linux-Kernel-Namespace ist ein Konzept, mit dem eine Gruppe von Prozessen in Bezug auf den Zugriff auf eine Systemressource von anderen isoliert werden kann. Beispielsweise können zwei verschiedene PID-Namespaces Prozesse mit identischen PIDs, aber völlig unterschiedlichem Prozessabbild enthalten. Sie werden häufig bei der Virtualisierung auf Betriebssystemebene verwendet, bei der ein einzelner Kernel gleichzeitig verschiedene Betriebssysteme ausführt. Alle müssen Linux-basiert sein (da sie offensichtlich den Kernel gemeinsam nutzen), können jedoch unterschiedliche Distributionen und Versionen aufweisen. Siehe zum Beispiel LXC .
Möglicherweise bemerken Sie das Deaktivieren beispielsweise auf systemd-basierten Systemen, da systemd Namespaces für seine Containerfunktion verwenden kann . Daher hängt vieles davon ab, welche Distribution Sie verwenden und was Sie mit dem System vorhaben.
Wie bei fast jedem Kernel-Feature benötigen Sie auf jeden Fall eine Art User-Space-Programm - auch wenn Sie über spezielle Dateien mit dem Kernel gesprochen haben (ich bin mir nicht sicher, ob Sie das können), ist es in der Regel viel besser, sich auf spezielle Tools zu verlassen, da diese bieten vor freundliche API.
quelle
Ein Beispiel für die Verwendung von Namespaces in SELinux-fähigen Systemen (MLS oder Strict). Der Namespace wird normalerweise verwendet, um einzelne Verzeichnisse
/tmp
und / oder/home
Verzeichnisse für jeden Benutzer zu erstellen . Diese Verzeichnisse sind nur sichtbar für: den Benutzer, Benutzer mit derselben Bezeichnung, den Kernel und Benutzer mit privilegiertem Zugriff. Das/tmp
Verzeichnis mit dem Namespace ed wird von SELinux-MLS so gekennzeichnet, dass es mit dem SELinux-MLS-Label des Benutzers übereinstimmt. In diesem Szenario ist das/tmp
vom Benutzer angezeigte Verzeichnis möglicherweise an einer anderen Stelle als/tmp
(/var/user-tmp
) angehängt . Der Benutzer sieht jedoch nur/tmp
mit den Dateien, die aufgrund der Aktivität des Benutzers erstellt werden. Der Benutzer sieht niemals Dateien/tmp
, die das Produkt anderer Benutzer sind.quelle