Verwenden Sie Nicht-Root-Benutzer, um Skriptvorgänge in Docker-Containern auszuführen

Verwenden Sie Nicht-Root-Benutzer, um Skriptvorgänge in Docker-Containern auszuführen

Nachdem die Anwendung in einen Container verpackt wurde, wird beim Starten des Docker-Containers standardmäßig der Root-Benutzer zum Ausführen von Befehlen verwendet. Daher werden die Anwendungen im Container standardmäßig vom Root-Benutzer ausgeführt, was ein hohes Sicherheitsrisiko darstellt. Wie können wir also Nicht-Root-Geschäftsbenutzer zum Ausführen von Anwendungen verwenden?

Ich möchte dies anhand eines einfachen Beispiels veranschaulichen.

Dieses Beispiel verwendet einen selbst erstellten Benutzer in einem Container, um ein einfaches Shell-Skript auszuführen und speichert das Skriptausgabeprotokoll außerhalb des Containers. Als nächstes werfen wir einen Blick auf den gesamten Prozess von der Image-Erstellung bis zum Containerbetrieb.

1. Erstellen Sie das Image:

Ich werde Dockerfile verwenden, um das Image zu erstellen. Das Basisimage ist Ubuntu 14.04 (Sie müssen das Image zuerst abrufen, Docker Pullubuntu:14.04). Der Dockerfile-Inhalt ist wie folgt

[root@host09 test]# cat Dockerfile
VONdocker.io/ubuntu:14.04 
WARTUNGSMITARBEITER He Pengfei

RUN groupadd hpf -- eine Benutzergruppe erstellen RUN useradd -d /data -g hpf -- mhpf -- einen Benutzer erstellen RUN su - hpf -c "mkdir -p /data/scripts" 
RUN su - hpf -c "mkdir -p /data/logs"
ARBEITSVERZEICHNIS /data/scripts
KOPIEREN Sie test.sh /data/scripts/
Führen Sie den Befehl chown hpf:hpf test.sh aus.
RUN chmod 755 test.sh

ENTRYPOINT su - hpf -c "/data/scripts/test.sh" --Verwenden Sie den erstellten Benutzer, um das Skript [root@host09 test] auszuführen#

Der Inhalt des Skripts ist wie folgt:

[root@host09 test]# cattest.sh
während [ 1 = 1 ]
Tun
echo `id`>>/data/logs/hpf.log -- Gibt das Protokoll in die Datei aus und macht es beim Starten des Containers persistent sleep 1
Erledigt
[root@host09 test]#

Als nächstes erstellen wir das Image:

[root@host09 test]# dockerbuild -t hpf:v2 .
Senden des Build-Kontexts an den Docker-Daemon 3.072 kB
Schritt 1: VON docker.io/ubuntu:14.04
 ---> c69811d4e993
Schritt 2: MAINTAINER hepengfei
 ---> Cache verwenden
 ---> b8401d2eb439
Schritt 3: Führen Sie groupadd hpf aus
 ---> Cache verwenden
 ---> 2e0d20802c41
Schritt 4: RUN useradd -d /data -g hpf -m hpf
 ---> Cache verwenden
 ---> bac36ee97aba
Schritt 5: Führen Sie den Befehl su - hpf -c "mkdir -p /data/scripts" aus.
 ---> Cache verwenden
 ---> a92c3f5f8e34
Schritt 6: Führen Sie den Befehl su - hpf -c "mkdir -p /data/logs" aus.
 ---> Cache verwenden
 ---> 2e8665da7092
Schritt 7: WORKDIR /data/scripts
 ---> Cache verwenden
 ---> 7cf84a5a8aca
Schritt 8: KOPIEREN Sie test.sh /data/scripts/
 ---> 7e4c24de2096
Zwischenbehälter entfernen f96358d91c35
Schritt 9: Führen Sie chown hpf:hpf test.sh aus.
 ---> Läuft in fc9ab290c56c
 ---> f38afd1ea62c
Zwischenbehälter entfernen fc9ab290c56c
Schritt 10: Führen Sie chmod 755 test.sh aus
 ---> Wird ausgeführt in a35b507a1527
 ---> 5b5223249f4c
Zwischenbehälter ausbauen a35b507a1527
Schritt 11: ENTRYPOINT su - hpf -c "/data/scripts/test.sh"
 ---> Wird ausgeführt in 1ee7cc7fbec7
 ---> 26e7d603dbac
Zwischenbehälter entfernen 1ee7cc7fbec7
26e7d603dbac erfolgreich erstellt
[root@host09 test]#

Sehen Sie sich das erstellte Image an:

[root@host09 test]# Docker-Bilder
REPOSITORY TAG IMAGEID ERSTELLT GRÖSSE
hpf v2 26e7d603dbac vor 42 Minuten 188,3 MB
docker.io/ubuntu 14.04 c69811d4e993 vor 3 Wochen 188 MB
[root@host09 test]#

2. Starten Sie den Container:

Beachten Sie, dass Sie vor dem Starten des Containers die Berechtigungen des Verzeichnisses /data/hepf/log auf dem Host ändern müssen. Andernfalls hat das Protokoll im Skript beim Starten des Containers keine Berechtigung zum Schreiben in das Verzeichnis. Ich habe die Berechtigungen des Verzeichnisses direkt auf 777 geändert.

[root@host09 test]#chmod 777/data/hepf/log

[root@host09 test]# docker run -it -v/data/hepf/log:/data/logs hpf:v2

Sehen wir uns nun die Protokolldateien im Verzeichnis /data/hepf/log an:

[root@host09 log]# pwd
/data/hepf/log
[root@host09 log]# ll
insgesamt 12
-rw-rw-r-- 1 1000 1000 108007. Sept. 08:02 hpf.log
[root@host09 log]# tail -2 hpf.log
UID = 1000 (hpf) GID = 1000 (hpf) Gruppen = 1000 (hpf)
UID = 1000 (hpf) GID = 1000 (hpf) Gruppen = 1000 (hpf)
[root@host09-Protokoll]#

Es ist ersichtlich, dass der Eigentümer der Datei derselbe ist wie der im Container erstellte HPF-Benutzer:

hpf@ba688af3f598:~$ id
UID = 1000 (hpf) GID = 1000 (hpf) Gruppen = 1000 (hpf)
hpf@ba688af3f598:~$

Wenn es auf dem Host einen anderen Benutzer mit derselben ID wie der im Container erstellte Benutzer gibt, wird dieser Benutzer zum Besitzer der Protokolldatei auf dem Host. Derzeit wurden jedoch keine Probleme festgestellt.

[root@host09 log]# cat /etc/passwd |grep hpf1
hpf1:x:1000:1000::/data1:/bin/bash[root@host09 log]# ll
insgesamt 12
-rw-rw-r-- 1 hpf1 hpf1 11250 7. September 08:50hpf.log
[root@host09-Protokoll]#

Dies ist das Ende des einfachen Beispiels.

Zusätzliches Wissen: Docker-Standardspeicher und Docker-Nicht-Root-Benutzer

Methode 1

sudo docker info | grep „Docker-Stammverzeichnis“

Stoppen Sie zuerst den Docker-Dienst:

systemctl Neustart Docker

oder

Dienst Docker Stopp

Verschieben Sie dann das gesamte Verzeichnis /var/lib/docker in den Zielpfad:

mv /var/lib/docker /root/data/docker

ln -s /root/data/docker /var/lib/docker

Methode 2

Die Docker-Konfigurationsdatei kann die meisten Parameter für Hintergrundprozesse festlegen. Der Speicherort ist in jedem Betriebssystem unterschiedlich. Der Speicherort in Ubuntu lautet: /etc/default/docker, und der Speicherort in CentOS lautet: /etc/sysconfig/docker.

Wenn es CentOS ist, fügen Sie die folgende Zeile hinzu:

OPTIONEN=–graph=”/root/data/docker” –selinux-enabled -H fd://

Wenn es Ubuntu ist, fügen Sie die folgende Zeile hinzu (da Ubuntu Selinux nicht standardmäßig aktiviert):

OPTIONEN=–graph=”/root/data/docker” -H fd://

oder

DOCKER_OPTS="-g /root/data/docker"

1. Erstellen Sie zunächst eine Docker-Benutzergruppe. Wenn die Docker-Benutzergruppe vorhanden ist, können Sie sie ignorieren.

sudo groupadd docker

2. Fügen Sie den Benutzer zur Docker-Gruppe hinzu

sudo gpasswd -a ${USER} Docker

3. Docker neu starten

sudo service docker restart

4. Wenn ein normaler Benutzer den Docker-Befehl ausführt und mit „get ... dial unix /var/run/docker.sock“ aufgefordert wird und die Berechtigungen nicht ausreichen, ändern Sie die Berechtigungen von /var/run/docker.sock

Verwenden Sie den Root-Benutzer, um den folgenden Befehl auszuführen.

sudo chmod a+rw /var/run/docker.sock

Der obige Artikel zur Verwendung von Nicht-Root-Benutzern zum Ausführen von Skriptvorgängen in Docker-Containern ist der gesamte Inhalt, den der Editor mit Ihnen teilt. Ich hoffe, er kann Ihnen als Referenz dienen, und ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen.

Das könnte Sie auch interessieren:
  • So ändern Sie das Root-Passwort von MySQL in Docker
  • So ändern Sie das Root-Passwort in einem Container mit Docker
  • So erhalten Sie Root-Berechtigungen in einem Docker-Container
  • Docker verwendet Root, um in den Container zu gelangen
  • Docker-Lösung zum Anmelden ohne Root-Rechte

<<:  Lassen Sie uns über die Leistung von MySQLs COUNT(*) sprechen.

>>:  Fassen Sie die allgemeinen Eigenschaften von BigIn-Funktionen in JavaScript zusammen

Artikel empfehlen

So starten Sie mehrere MySQL-Instanzen in CentOS 7.0 (mysql-5.7.21)

Konfigurationsanweisungen Linux-System: CentOS-7....

Beispiele für die Verwendung des ES6-Spread-Operators

Inhaltsverzeichnis Was sind Spread- und Rest-Oper...

Ausführliche Erklärung der Closure in JavaScript

Einführung Closure ist eine sehr leistungsstarke ...

HTML-Kopfstruktur

Im Folgenden werden die häufig verwendete Kopfstr...

Ein nützliches mobiles Scrolling-Plugin BetterScroll

Inhaltsverzeichnis Machen Sie das Scrollen flüssi...

Vue implementiert die richtige Slide-Out-Layer-Animation

In diesem Artikelbeispiel wird der spezifische Co...

CSS-Implementierungscode für mehrstufige Menüs

Dies ist eine ziemlich coole Funktion, die Websei...

Bootstrap FileInput implementiert Bild-Upload-Funktion

In diesem Artikelbeispiel wird der spezifische Co...

Allgemeine Lösungen für das Ablaufen der Lese-/Schreibtrennung in MySQL

Die Fallstricke der Lese- und Schreibtrennung in ...

So sichern Sie MySQL-Kontoinformationen elegant

Vorwort: Ich bin kürzlich auf das Problem der Ins...

So ändern Sie die Standardcodierung von MySQL in Linux

Wenn während des Entwicklungsprozesses nach der W...

Verwenden Sie JavaScript, um Seiteneffekte zu erstellen

11. Verwenden Sie JavaScript, um Seiteneffekte zu...