So verwalten Sie Benutzer und Gruppen beim Ausführen von Docker

So verwalten Sie Benutzer und Gruppen beim Ausführen von Docker

Docker ist ein Verwaltungstool, das Prozesse als Kern verwendet, um Systemressourcen zu isolieren. Die Isolierung wird durch die Funktion cgroups (Kontrollgruppen) des Betriebssystemkernels erreicht. Dazu gehören Benutzerparameterbeschränkungen, Kontoverwaltung und Isolierung der Ressourcennutzung (CPU, Speicher, Festplatten-E/A, Netzwerk). Docker kann Benutzer und Gruppen für Prozesse im Container angeben, wenn dieser ausgeführt wird. Wenn nicht angegeben, wird standardmäßig root verwendet. Durch die Isolierung geht die Sicherheit jedoch nicht verloren. Traditionell werden bestimmte Anwendungen als bestimmte Benutzer ausgeführt, und der Benutzer oder die Gruppe, für die der Prozess im Container das Programm angibt, muss nicht im Voraus auf dem Host erstellt werden.

Prozesssteuerungsgruppen (cgroups) können im Wesentlichen folgende Dinge tun:

  • Ressourcenlimitgruppen können so eingestellt werden, dass sie die konfigurierten Speicherlimits nicht überschreiten. Dazu gehört auch der Dateisystem-Cache.
  • Priorisieren Sie bestimmte Gruppen, um einen größeren Anteil der CPU-Auslastung oder des Datenträger-E/A-Durchsatzes zu erhalten
  • Kontobuchhaltungsmetriken gruppieren die Ressourcennutzung, beispielsweise für Abrechnungszwecke
  • Steuert das Einfrieren von Gruppenprozessen, das Setzen von Checkpoints und den Neustart von Prozessen.

Mit cgroups (Control Process Groups) verwandt ist das Konzept der Namespaces (Befehlsraum).

Es gibt sechs Haupttypen der Namensisolierung in Namespaces:

  • Der PID-Namespace bietet Isolation für die Zuweisung von Prozesskennungen (PIDs), der Liste der Prozesse und ihrer Details.

Obwohl der neue Namespace von seinen Peers isoliert ist, sehen Prozesse in seinem „übergeordneten“ Namespace weiterhin alle Prozesse im untergeordneten Namespace (wenn auch mit unterschiedlichen PID-Nummern).

  • Netzwerk-Namespaces isolieren Netzwerkschnittstellen-Controller (physisch oder virtuell), Iptables-Firewall-Regeln, Routing-Tabellen usw. Netzwerk-Namespaces können mithilfe virtueller Ethernet-Geräte vom Typ „veth“ miteinander verbunden werden.
  • Der UTS-Namespace ermöglicht die Änderung des Hostnamens.
  • Der Mount-Namespace ermöglicht das Erstellen unterschiedlicher Dateisystem-Layouts oder das Festlegen schreibgeschützter Mount-Punkte.
  • IPC-Namespaces isolieren die Interprozesskommunikation von System V durch Namespaces.
  • Benutzer-Namespaces isolieren Benutzer-IDs nach Namespace.

Normaler Docker-Benutzer führt Root im Container aus

Beispielsweise kann busybox Software als Root in einem Docker-Container ausführen. Der Docker-Container selbst wird jedoch weiterhin als normaler Benutzer ausgeführt.

Betrachten Sie diese Situation

Echotest | Docker-Ausführung -i Busybox Cat

Ersterer ist der aktuelle Systemprozess des aktuellen Benutzers und letzterer wird zur Ausführung an den Benutzer und den Prozess im Container übertragen.

Wenn Linux als PID 1 in einem Container ausgeführt wird, ignoriert es das Standardverhalten des Signalsystems und der Prozess wird nicht beendet, wenn er ein SIGINT- oder SIGTERM-Signal empfängt, es sei denn, Ihr Prozess ist entsprechend codiert. Sie können ein Stoppsignal über das Dockerfile-Signal STOPSIGNAL angeben.

wie:

STOPSIGNAL SIGKILL

Erstellen einer Docker-Datei

VON alpin:latest
Führen Sie den Befehl apk add --update htop && rm -rf /var/cache/apk/* aus.
CMD ["htop"]
$ docker build -t myhtop . #Image erstellen $ docker run -it --rm --pid=host myhtop #Im selben Namespace wie der Hostprozess ausführen 

Der normale Benutzer docker run gibt verschiedene Benutzer demo_user im Container an

docker run --user=demo_user:group1 --group-add group2 <image_name> <befehl>

Hier sind demo_user, group1 (primäre Gruppe) und group2 (sekundäre Gruppe) nicht der Benutzer und die Gruppe des Hosts, sondern werden beim Erstellen des Container-Image erstellt.

Wenn der ausgeführte Benutzer nicht durch die USER-Anweisung in der Docker-Datei angegeben ist, führt der Container den Prozess als Root-Benutzer aus.

So geben Sie einen Benutzer im Docker an

Geben Sie im Dockerfile einen Benutzer an, um einen bestimmten Befehl auszuführen

USER <Benutzer>[:<Gruppe>] #oder USER <UID>[:<GID>]

docker run -u(--user)[user:group] oder --group-add Parametermethode

$ docker run busybox cat /etc/passwd
root:x:0:0:root:/root:/bin/sh
...
www-data:x:33:33:www-data:/var/www:/bin/false
niemand:x:65534:65534:niemand:/home:/bin/false

$ docker run --user www-data busybox id
uid=33(www-Daten) gid=33(www-Daten)

Berechtigungen von Benutzern im Docker-Container

Vergleichen Sie die folgenden Situationen. Die von normalen Benutzern auf dem Host erstellten Dateien werden dem Root-Benutzerbesitzer im Docker-Container zugeordnet:

$ mkdir test && touch test/a.txt && cd test
$ docker run --rm -it -v `pwd`:/mnt -w /mnt busybox /bin/sh -c 'ls -al /mnt/*' 
-rw-r--r-- 1 Wurzel Wurzel 0 22. Okt. 15:36 /mnt/a.txt

Die im Volume-Verzeichnis des Containers erstellten Dateien entsprechen dem Benutzer, der Docker aktuell auf dem Host ausführt:

$ docker run --rm -it -v `pwd`:/mnt -w /mnt busybox /bin/sh -c 'touch b.txt'
$ ls -al
-rw-r--r-- 1 xwx Mitarbeiter 0 10 22 23:36 a.txt
-rw-r--r-- 1 xwx Mitarbeiter 0 10 22 23:54 b.txt

Dateizugriffsberechtigungen für Docker-Volumes

Volumes erstellen und verwenden. Docker unterstützt keine relativen Pfad-Mount-Punkte. Mehrere Container können gleichzeitig dasselbe Volume verwenden.

$ Docker-Volume erstellen Hallo #Volume erstellen Hallo

$ docker run -it --rm -v hello:/world -w /world busybox /bin/sh -c 'touch /world/a.txt && ls -al' #Insgesamt 8 Dateien in den Container integriert
drwxr-xr-x 2 root root 4096 22. Okt. 16:38 .
drwxr-xr-x 1 root root 4096 22. Okt. 16:38 ..
-rw-r--r-- 1 root root 0 Okt 22 16:38 a.txt

$ docker run -it --rm -v hello:/world -w /world busybox /bin/sh -c 'rm /world/a.txt && ls -al' #Lösche insgesamt 8 aus dem Container
drwxr-xr-x 2 root root 4096 22. Okt. 16:38 .
drwxr-xr-x 1 root root 4096 22. Okt. 16:38 ..

Dateien extern erstellen und als angegebene Benutzer im Container löschen

$ berühren Sie c.txt und sudo chmod root:wheel c.txt
$ docker run -u 100 -it --rm -v `pwd`:/Welt -w /world busybox /bin/sh -c 'rm /world/c.txt && ls -al'

Es kann tatsächlich gelöscht werden

rm: '/world/c.txt' entfernen? y
insgesamt 4
drwxr-xr-x 4 100 root 128 23. Okt. 16:09 .
drwxr-xr-x 1 root root 4096 23. Okt. 16:09 ..
-rw-r--r-- 1 100 root 0 Okt 22 15:36 a.txt
-rw-r--r-- 1 100 root 0 Okt 22 15:54 b.txt

Portberechtigungen für normale Docker-Benutzer unter 1024

 $ docker run -u 100 -it --rm -p 70:80 busybox /bin/sh -c 'nc -l -p 80'
nc: bind: Berechtigung verweigert #Wenn die Benutzer-ID 100 ist, kann Port 80 nicht geöffnet werden$ docker run -u 100 -it --rm -p 70:8800 busybox /bin/sh -c 'nc -l -p 8800' #Wenn der Container-Port größer als 1024 ist, können Sie...
 $ docker run -it --rm -p 70:80 busybox /bin/sh -c 'nc -l -p 80' #Sie können im Container auch root verwenden …

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • So isolieren Sie Benutzer in Docker-Containern
  • Erstellen Sie einen neuen Benutzer in Linux und erlauben Sie Docker und grundlegende Docker-Befehle
  • So installieren Sie allgemeine Komponenten (MySQL, Redis) in Docker
  • So verwenden Sie Docker Swarm zum Erstellen eines Clusters

<<:  JavaScript implementiert die H5-Goldmünzenfunktion (Beispielcode)

>>:  Eine kurze Diskussion über das Problem des vergessenen MySQL-Passworts und des Anmeldefehlers

Artikel empfehlen

4 Möglichkeiten zur Implementierung von Routing-Übergangseffekten in Vue

Vue-Router-Übergänge sind eine schnelle und einfa...

HTML-Grammatik-Enzyklopädie_HTML-Sprachgrammatik-Enzyklopädie (unbedingt lesen)

Datenträgerbezeichnung, Eigenschaftsname, Beschre...

Allgemeines Startskriptbeispiel für ein Linux-Java-Programm

Allerdings ist die Häufigkeit des Shell-Starts se...

Lernen Sie, wie Sie Uniapps und Miniprogramme (Bilder und Text) untervergeben

Inhaltsverzeichnis 1. Subunternehmer für Miniprog...

So installieren und konfigurieren Sie den Supervisor-Daemon unter CentOS7

Neuling, nimm es selbst auf 1. Supervisor install...

MySQL-Datenbanktabelle und Datenbankpartitionierungsstrategie

Lassen Sie uns zunächst darüber sprechen, warum w...

Verstehen Sie alle Aspekte von HTTP-Headern mit Bildern und Text

Was sind HTTP-Header HTTP ist eine Abkürzung für ...