Utilisateur dans Docker

Andreï Kopylov, 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 node

Pour 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 2000

Pour exĂ©cuter tous les processus suivants en tant qu'utilisateur du nƓud, exĂ©cutez :

USER node

Plus en documentation.

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 :

id

Vous 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 shadow

Passer 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 ENV Đž ARG. Comparaison dĂ©taillĂ©e des directives ici.

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

Achetez un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Achetez un hĂ©bergement web fiable avec protection DDoS, serveurs VPS et VDS | ProHoster