GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Führen Sie Container unter Linux ohne sudo in Podman aus

Container sind ein wichtiger Bestandteil des modernen Computing, und mit der Weiterentwicklung der Infrastruktur rund um Container sind neue und bessere Tools aufgetaucht. Früher konnte man Container nur mit LXC ausführen, dann gewann Docker an Popularität und die Dinge wurden komplexer. Schließlich haben wir mit Podman das Containerverwaltungssystem bekommen, das wir alle verdient haben, eine dämonlose Container-Engine, mit der Container und Pods einfach zu erstellen, auszuführen und zu verwalten sind.

Container sind direkt mit Linux-Kernel-Fähigkeiten wie Cgroups und Namespaces verbunden und erzeugen viele neue Prozesse innerhalb dieser Namespaces. Kurz gesagt, das Ausführen eines Containers ist buchstäblich das Ausführen eines Linux-Systems innerhalb ein Linux-System. Aus Sicht des Betriebssystems sieht es sehr nach einer administrativen und privilegierten Aktivität aus. Normale Benutzer können normalerweise nicht so frei über Systemressourcen verfügen, wie es Container erfordern, also standardmäßig root oder sudo Zum Ausführen von Podman sind Berechtigungen erforderlich. Dies ist jedoch nur die Standardeinstellung und keineswegs die einzige verfügbare oder vorgesehene Einstellung. Dieser Artikel zeigt, wie Sie Ihr Linux-System so konfigurieren, dass ein normaler Benutzer Podman ohne die Verwendung von sudo ausführen kann ("wurzellos").

Namespace-Benutzer-IDs

Linux-Container

  • Was sind Linux-Container?
  • Eine Einführung in die Containerterminologie
  • Download:Einführung in Container
  • Kubernetes-Operatoren:Automatisierung der Container-Orchestrierungsplattform
  • eBook:Kubernetes-Muster zum Entwerfen cloudnativer Apps
  • Was ist Kubernetes?

Ein Kernel-Namespace ist im Wesentlichen ein imaginäres Konstrukt, das Linux hilft, den Überblick darüber zu behalten, welche Prozesse zusammengehören. Es sind die roten Warteschlangen von Linux. Es gibt eigentlich keinen Unterschied zwischen Prozessen in einer Warteschlange und einer anderen, aber es ist hilfreich, sie voneinander abzuschotten. Sie getrennt zu halten, ist der Schlüssel, um eine Gruppe von Prozessen zu einem "Container" und die andere Gruppe von Prozessen zu Ihrem Betriebssystem zu erklären.

Linux verfolgt anhand der Benutzer-ID (UID) und der Gruppen-ID (GID), welcher Benutzer oder welche Gruppe Eigentümer jedes Prozesses ist. Normalerweise hat ein Benutzer Zugriff auf etwa tausend untergeordnete UIDs, die er untergeordneten Prozessen in einem Namensraum zuweisen kann. Da Podman ein vollständiges untergeordnetes Betriebssystem ausführt, das dem Benutzer zugewiesen ist, der den Container gestartet hat, benötigen Sie viel mehr als die Standardzuteilung von subuids und subgids.

Mit dem usermod können Sie einem Benutzer weitere Subuids und Subgids zuweisen Befehl. Zum Beispiel, um dem Benutzer tux mehr Subuids und Subgids zuzuweisen , wählen Sie eine ausreichend hohe UID, der kein Benutzer zugeordnet ist (z. B. 200.000), und erhöhen Sie sie um mehrere Tausend:

$ sudo usermod \
--add-subuids 200000-265536 \
--add-subgids 200000-265536 \
tux

Namespace-Zugriff

Es gibt auch Beschränkungen für Namespaces. Dies wird normalerweise sehr hoch eingestellt, aber Sie können die Benutzerzuweisung von Namespaces mit systctl überprüfen , das Kernel-Parameter-Tool:

$ sysctl --all --pattern user_namespaces
user.max_user_namespaces = 28633

Das sind viele Namespaces, und es ist wahrscheinlich das, was Ihre Distribution standardmäßig eingestellt hat. Wenn Ihre Distribution diese Eigenschaft nicht hat oder sehr niedrig eingestellt ist, können Sie sie erstellen, indem Sie diesen Text in die Datei /etc/sysctl.d/userns.conf eingeben :

user.max_user_namespaces=28633

Laden Sie diese Einstellung:

$ sudo sysctl -p /etc/sysctl.d/userns.conf

Führen Sie einen Container ohne Root aus

Sobald Sie Ihre Konfiguration festgelegt haben, starten Sie Ihren Computer neu, um sicherzustellen, dass die Änderungen an Ihren Benutzer- und Kernel-Parametern geladen und aktiv sind.

Versuchen Sie nach dem Neustart, ein Container-Image auszuführen:

$ podman run -it busybox echo "hello"
hello

Container wie Befehle

Container mögen sich mysteriös anfühlen, wenn sie neu für Sie sind, aber eigentlich unterscheiden sie sich nicht von Ihrem bestehenden Linux-System. Sie sind buchstäblich Prozesse, die auf Ihrem System ausgeführt werden, ohne die Kosten oder Barrieren einer emulierten Umgebung oder virtuellen Maschine. Alles, was einen Container von Ihrem Betriebssystem trennt, sind Kernel-Namespaces, also sind sie wirklich nur native Prozesse mit unterschiedlichen Bezeichnungen darauf. Podman macht dies deutlicher als je zuvor, und sobald Sie Podman als wurzellosen Befehl konfiguriert haben, fühlen sich Container eher wie Befehle als wie virtuelle Umgebungen an. Podman macht Container und Pods einfach, also probieren Sie es aus.


Linux
  1. So erstellen Sie einen Sudo-Benutzer in Rocky Linux 8

  2. sudo-Befehlsbeispiele in Linux

  3. Windows UAC vs. Linux sudo

  4. Führen Sie ifconfig ohne sudo aus

  5. Führen Sie den cd-Befehl als Superuser unter Linux aus

Geben Sie Linux-Befehle in Großbuchstaben ein, um sie als Sudo-Benutzer auszuführen

So führen Sie bestimmte Befehle ohne Sudo-Passwort in Linux aus

So führen Sie Sudo-Befehle ohne Passwort aus

So installieren Sie Podman auf Rocky Linux 8 / AlmaLinux, um Container auszuführen

So führen Sie einen Alias ​​mit Sudo in Linux aus

So führen Sie sudo-Befehle ohne Passwort aus