Ich habe einen Docker-Container mit einigen Prozessen (Uwsgi und Sellerie). Ich möchte einen Sellerie-Benutzer und einen UWSGI-Benutzer für diese Prozesse sowie eine Arbeitsgruppe erstellen, zu der beide gehören, um Berechtigungen zuzuweisen.
Ich habe versucht, RUN adduser uwsgi
und RUN adduser celery
zu meiner Docker-Datei hinzuzufügen, aber dies verursacht Probleme, da diese Befehle zur Eingabe auffordern (ich habe die Antworten aus dem folgenden Build veröffentlicht).
Wie können Benutzer am besten zu einem Docker-Container hinzugefügt werden, um Berechtigungen für Mitarbeiter festzulegen, die im Container ausgeführt werden?
Mein Docker-Image basiert auf der offiziellen Ubuntu14.04-Basis.
Hier ist die Ausgabe der Docker-Datei, wenn die Adduser-Befehle ausgeführt werden:
Adding user `uwsgi' ...
Adding new group `uwsgi' (1000) ...
Adding new user `uwsgi' (1000) with group `uwsgi' ...
Creating home directory `/home/uwsgi' ...
Copying files from `/etc/skel' ...
[91mEnter new UNIX password: Retype new UNIX password: [0m
[91mpasswd: Authentication token manipulation error
passwd: password unchanged
[0m
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 563.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 564.
[0m
Try again? [y/N]
Changing the user information for uwsgi
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []: Work Phone []: Home Phone []: Other []:
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 589.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 590.
[0m
Is the information correct? [Y/n]
---> 258f2f2f13df
Removing intermediate container 59948863162a
Step 5 : RUN adduser celery
---> Running in be06f1e20f64
Adding user `celery' ...
Adding new group `celery' (1001) ...
Adding new user `celery' (1001) with group `celery' ...
Creating home directory `/home/celery' ...
Copying files from `/etc/skel' ...
[91mEnter new UNIX password: Retype new UNIX password: [0m
[91mpasswd: Authentication token manipulation error
passwd: password unchanged
[0m
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 563.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 564.
[0m
Try again? [y/N]
Changing the user information for celery
Enter the new value, or press ENTER for the default
Full Name []: Room Number []: Work Phone []:
Home Phone []: Other []:
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 589.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 590.
[0m
Is the information correct? [Y/n]
quelle
useradd --create-home --shell /bin/bash
ist für Mitarbeiter verständlicher / lesbarer.RUN echo 'newuser:newpassword' | chpasswd
--no-log-init
Option zuuseradd
.USER newuser
. Wenn der Benutzer auch über Root-Rechte verfügen muss, können Sie auch einschließenadduser <username> sudo
./bin/sh: useradd: not found
Alpin LinuxUm die interaktiven Fragen von adduser zu vermeiden, können Sie sie mit folgenden Parametern aufrufen:
Mit dem
--gecos
Parameter werden die zusätzlichen Informationen festgelegt. In diesem Fall ist es nur leer.Verwenden Sie auf Systemen mit Busybox (wie Alpine)
Siehe Busybox-Adduser
quelle
adduser
Lösung auf hoher Ebene im Allgemeinen der Verwendung von Funktionen auf niedriger Ebene wie zuseradd
.adduser: unrecognized option: gecos
Auf Alpine scheint das nicht zu funktionieren.Ubuntu
Versuchen Sie die folgenden Zeilen in
Dockerfile
:useradd
Optionen (siehe :)man useradd
:-r
,--system
Erstellen Sie ein Systemkonto. Siehe: Auswirkungen beim Erstellen von Systemkonten-m
,--create-home
Erstellen Sie das Home-Verzeichnis des Benutzers.-d
,--home-dir HOME_DIR
Home-Verzeichnis des neuen Kontos.-s
,--shell SHELL
Login-Shell des neuen Kontos.-g
,--gid GROUP
Name oder ID der Primärgruppe.-G
,--groups GROUPS
Liste der Zusatzgruppen.-u
,--uid UID
Benutzer-ID angeben. Siehe: Grundlegendes zur Funktionsweise von UID und GID in Docker-Containern-p
,--password PASSWORD
Verschlüsseltes Passwort des neuen Kontos (zBubuntu
).Festlegen des Standardbenutzerkennworts
Fügen Sie zum Festlegen des Benutzerkennworts
-p "$(openssl passwd -1 ubuntu)"
denuseradd
Befehl hinzu.Alternativ können Sie die folgenden Zeilen zu Ihrem hinzufügen
Dockerfile
:Die erste Shell-Anweisung besteht darin, sicherzustellen, dass die
-o pipefail
Option zuvorRUN
mit einer Pipe aktiviert wurde . Lesen Sie mehr: Hadolint: Flusen Sie Ihre Docker-Datei .quelle
root
Die Gruppe gibt nicht an, dass sie Root-Zugriff haben, sondern nur, dass sie mehr Lesezugriff auf einige Dateien (z. B. Protokolle) haben. Dies ist nützlich, hängt jedoch vom Projekt ab.Das Hinzufügen eines Benutzers im Docker und das Ausführen Ihrer App unter diesem Benutzer ist aus Sicherheitsgründen eine sehr gute Vorgehensweise. Dazu würde ich folgende Schritte empfehlen:
Die obigen Schritte sind ein vollständiges Beispiel für das Kopieren von NodeJS-Projektdateien, das Erstellen einer Benutzergruppe und eines Benutzers, das Zuweisen von Berechtigungen zum Benutzer für den Projektordner, das Wechseln zum neu erstellten Benutzer und das Ausführen der App unter diesem Benutzer.
quelle
Sie können Open Source Dockerfile imitieren, zum Beispiel:
Knoten: Knoten 12-Github
Obermenge: Obermenge-Github
Ich denke, es ist eine gute Möglichkeit, Open Source zu folgen.
quelle
Jeder hat seinen persönlichen Favoriten, und das ist meiner:
Referenz: man useradd
Die
RUN
Zeile fügt den Benutzer und die Gruppe hinzuapp
:Verwenden Sie einen spezifischeren Namen, als
app
wenn das Bild als Basisbild wiederverwendet werden soll. Nebenbei, fügen--shell /bin/bash
Sie hinzu , wenn Sie wirklich brauchen.Teilkredit: Antwort von Ryan M.
quelle
Alternativ können Sie dies auch tun.
Der erste Befehl erstellt eine Gruppe namens Demo . Der zweite Befehl erstellt einen Demo- Benutzer und fügt ihn der zuvor erstellten Demo- Gruppe hinzu.
Flags steht für:
quelle
Fügen Sie diese Zeile Ihrer Docker-Datei hinzu (Sie können jeden Linux-Befehl auf diese Weise ausführen).
quelle