, notre CTO, aime, utilise et promeut activement Docker. Dans un nouvel article, il explique comment créer des utilisateurs dans Docker. Travaillez correctement avec eux, pourquoi les utilisateurs ne devraient pas disposer des droits root et comment résoudre le problÚme des indicateurs incompatibles dans le Dockerfile.
Tous les processus du conteneur s'exĂ©cuteront en tant qu'utilisateur root, sauf si vous le spĂ©cifiez d'une maniĂšre spĂ©ciale. Cela semble trĂšs pratique, car cet utilisateur n'a aucune restriction. C'est pourquoi travailler en tant que root est une erreur du point de vue de la sĂ©curitĂ©. Si aucune personne sensĂ©e ne travaille sur lâordinateur local avec les droits root, beaucoup exĂ©cutent des processus sous root dans des conteneurs.
Il y a toujours des bugs qui permettront aux logiciels malveillants de s'échapper du conteneur et de pénétrer sur l'ordinateur hÎte. En supposant le pire, nous devons nous assurer que les processus à l'intérieur du conteneur sont exécutés par un utilisateur qui n'a aucun droit sur la machine hÎte.
Création d'un utilisateur
Créer un utilisateur dans un conteneur n'est pas différent de le créer dans les distributions Linux. Cependant, les commandes peuvent varier selon les images de base.
Pour les distributions basées sur debian Vous devez ajouter les éléments suivants à votre Dockerfile :
RUN groupadd --gid 2000 node
&& useradd --uid 2000 --gid node --shell /bin/bash --create-home nodePour alpin :
RUN addgroup -g 2000 node
&& adduser -u 2000 -G node -s /bin/sh -D node
Exécution de processus depuis l'utilisateur
Pour exécuter tous les processus suivants en tant qu'utilisateur avec l'UID 2000, exécutez :
USER 2000Pour exĂ©cuter tous les processus suivants en tant qu'utilisateur du nĆud, exĂ©cutez :
USER nodePlus en .
Volumes de montage
Lors du montage de volumes dans un conteneur, offrez Ă l'utilisateur la possibilitĂ© de lire et/ou d'Ă©crire des fichiers. Pour ce faire, l'UID (GID) de l'utilisateur dans le conteneur et de l'utilisateur en dehors du conteneur qui dispose des autorisations appropriĂ©es pour accĂ©der au fichier doivent correspondre. Dans ce cas, les noms dâutilisateur nâont pas dâimportance.
Souvent sur un ordinateur Linux, l'UID et le GID d'un utilisateur sont égaux à 1000. Ces identifiants sont attribués au premier utilisateur de l'ordinateur.
ConnaĂźtre vos identifiants est simple :
idVous recevrez des informations complĂštes sur votre utilisateur.
Remplacez 2000 des exemples par votre identifiant et tout ira bien.
Attribution d'un UID et d'un GID Ă un utilisateur
Si l'utilisateur a été créé précédemment, mais que vous devez modifier les identifiants, vous pouvez procéder comme ceci :
RUN usermod -u 1000 node
&& groupmod -g 1000 node
Si vous utilisez l'image de base alpine, vous devez installer le package shadow :
RUN apk add âno-cache shadowPasser l'ID utilisateur Ă l'intĂ©rieur du conteneur lors de la construction de l'image
Si votre identifiant et les identifiants de toutes les personnes qui travaillent sur le projet correspondent, spécifiez simplement cet identifiant dans le Dockerfile. Cependant, il arrive souvent que les identifiants des utilisateurs ne correspondent pas.
Comment rĂ©aliser ce que vous voulez nâest pas immĂ©diatement clair. Pour moi, c'Ă©tait la chose la plus difficile dans le processus de maĂźtrise de Docker. De nombreux utilisateurs de Docker ne rĂ©alisent pas quâil existe diffĂ©rentes Ă©tapes dans la vie dâune image. Tout d'abord, l'image est assemblĂ©e Ă l'aide d'un Dockerfile. Lors de l'exĂ©cution d'un conteneur Ă partir d'une image, le Dockerfile n'est plus utilisĂ©.
La crĂ©ation de l'utilisateur doit avoir lieu lors de la crĂ©ation de l'image. Il en va de mĂȘme pour dĂ©terminer l'utilisateur sous lequel les processus sont lancĂ©s. Cela signifie que nous devons d'une maniĂšre ou d'une autre transmettre l'UID (GID) Ă l'intĂ©rieur du conteneur.
Les directives sont utilisées pour utiliser des variables externes dans le Dockerfile О . Comparaison détaillée des directives .
Dockerfile
ARG UID=1000
ARG GID=1000
ENV UID=${UID}
ENV GID=${GID}
RUN usermod -u $UID node
&& groupmod -g $GID node
Vous pouvez transmettre des arguments via docker-compose comme ceci :
docker-compose
build:
context: ./src/backend
args:
UID: 1000
GID: 1000
PS Pour maßtriser toutes les subtilités de Docker, il ne suffit pas de lire la documentation ou les articles. Vous devez vous entraßner beaucoup, vous devez avoir une idée de Docker.
Source: habr.com
