Image showing Un conteneur Docker doit-il tourner en root ou en utilisateur ?

Un conteneur Docker doit-il tourner en root ou en utilisateur ?

affiliate best offer

I. Introduction

Docker est une technologie de conteneurisation populaire qui vous permet de packager et d’exécuter des applications dans un environnement portable et isolé. Lors de l’exécution de conteneurs Docker, il est important de prendre en compte les permissions et la sécurité des utilisateurs du conteneur. Par défaut, les conteneurs Docker s’exécutent en tant qu’utilisateur root, ce qui peut poser des risques de sécurité et limiter la portabilité de vos applications.

Dans ce guide, nous allons explorer comment gérer les permissions utilisateur Docker et exécuter des conteneurs avec différents utilisateurs. Nous répondrons à des questions courantes telles que « avec quel utilisateur votre conteneur Docker s’exécute-t-il par défaut ? », « comment exécuter un conteneur en tant qu’utilisateur non-root ? » et « comment exécuter un conteneur Docker en tant qu’utilisateur root ? ».

Nous expliquerons également ce que signifie l’utilisateur 1000 dans Docker, comment voir l’identifiant utilisateur d’un conteneur, et fournirons des exemples de code fonctionnel pour exécuter des conteneurs avec différents utilisateurs.

À la fin de ce guide, vous aurez une meilleure compréhension des permissions utilisateur Docker et des bonnes pratiques pour gérer les permissions utilisateur dans vos conteneurs Docker.

II. Avec quel utilisateur votre conteneur Docker s’exécute-t-il par défaut ?

Par défaut, les conteneurs Docker s’exécutent en tant qu’utilisateur root. Cela signifie que tous les processus exécutés dans le conteneur disposent de permissions de niveau root, ce qui peut poser des risques de sécurité si le conteneur est compromis.

Pour illustrer cela, examinons un exemple de Dockerfile :

FROM alpine RUN touch /root/testfile

Ce Dockerfile utilise l’image de base Alpine Linux pour créer une nouvelle image qui crée un fichier nommé testfile dans le répertoire root. Lorsque vous exécutez un conteneur à partir de cette image, le testfile sera créé dans le répertoire root du conteneur. Cependant, parce que le conteneur s’exécute en tant qu’utilisateur root, le testfile sera créé avec les droits de propriété root, même si le conteneur lui-même peut fonctionner avec des privilèges limités.

Cela peut constituer un risque de sécurité car un attaquant qui accède au conteneur peut potentiellement escalader ses privilèges pour obtenir un accès root sur le système hôte.

Cela peut constituer un risque de sécurité car un attaquant qui accède au conteneur peut potentiellement escalader ses privilèges pour obtenir un accès root sur le système hôte.

Pour atténuer ce risque, il est recommandé d’exécuter les conteneurs en tant qu’utilisateurs non-root chaque fois que possible. Dans la section suivante, nous verrons comment exécuter des conteneurs avec différents utilisateurs.

*Avertissement :* Veuillez noter que l’exemple de code fourni dans cette section n’est pas destiné à être exécuté car il pourrait créer un fichier dans le répertoire root du conteneur, ce qui n’est pas une pratique recommandée. Il est plutôt destiné à illustrer les risques de sécurité potentiels associés à l’exécution de conteneurs en tant qu’utilisateur root.

III. Comment exécuter un conteneur avec un utilisateur différent ?

Pour exécuter un conteneur avec un utilisateur différent, vous pouvez utiliser le flag --user lors du démarrage du conteneur. Ce flag vous permet de spécifier le nom d’utilisateur ou l’UID/GID de l’utilisateur sous lequel le conteneur doit s’exécuter.

Voici un exemple d’exécution d’un conteneur en tant qu’utilisateur non-root :

docker run --user 1000 nginx

Dans cet exemple, le conteneur nginx est démarré avec le flag --user défini à 1000, qui est l’UID d’un utilisateur non-root. Lorsque le conteneur démarre, tous les processus exécutés dans le conteneur auront les mêmes permissions que l’utilisateur 1000.

Vous pouvez également spécifier le nom d’utilisateur pour exécuter le conteneur :

docker run --user username nginx

Ou vous pouvez spécifier l’UID et le GID de l’utilisateur :

docker run --user 1001:1001 nginx

Dans cet exemple, le conteneur nginx est démarré avec le flag --user défini à 1001:1001, ce qui spécifie l’UID et le GID d’un utilisateur précis.

Note importante : Il est important de noter que toutes les images ne disposent pas nécessairement de l’utilisateur ou du groupe spécifié. Dans ce cas, vous devrez peut-être créer une image Docker personnalisée avec l’utilisateur ou le groupe souhaité.

Voici un exemple fonctionnel d’exécution d’un conteneur en tant qu’utilisateur non-root avec une image Docker personnalisée :

FROM nginx 
RUN adduser --disabled-password --gecos "" myuser 
USER myuser

Dans cet exemple, nous utilisons l’image Docker officielle Nginx comme image de base, puis nous créons une nouvelle image qui ajoute un utilisateur non-root nommé myuser sans mot de passe et sans informations supplémentaires. Enfin, l’instruction USER est utilisée pour basculer vers l’utilisateur myuser avant de démarrer tout processus.

Lorsque vous exécutez un conteneur à partir de cette image personnalisée, il sera exécuté en tant qu’utilisateur myuser au lieu de l’utilisateur root par défaut. Cela peut aider à atténuer les risques de sécurité potentiels associés à l’exécution de conteneurs en tant qu’utilisateur root.

IV. Comment exécuter un conteneur en tant qu’utilisateur non-root ?

L’exécution de conteneurs en tant qu’utilisateur non-root peut aider à atténuer les risques de sécurité potentiels associés à l’exécution de conteneurs en tant qu’utilisateur root. Lorsqu’un conteneur est exécuté en tant qu’utilisateur non-root, les processus exécutés dans le conteneur disposent de permissions réduites et ne peuvent pas effectuer d’actions en dehors du périmètre du conteneur.

Pour exécuter un conteneur en tant qu’utilisateur non-root, vous pouvez créer un nouvel utilisateur dans un Dockerfile puis utiliser l’instruction USER pour basculer vers cet utilisateur avant de démarrer tout processus.

Pour exécuter un conteneur en tant qu’utilisateur non-root, vous pouvez créer un nouvel utilisateur dans un Dockerfile puis utiliser l’instruction USER pour basculer vers cet utilisateur avant de démarrer tout processus.

Voici un exemple de Dockerfile qui crée un nouvel utilisateur nommé myuser sans mot de passe et sans informations supplémentaires :

FROM nginx 
RUN adduser --disabled-password --gecos "" myuser 
USER myuser

Dans ce Dockerfile, nous utilisons l’image Docker officielle Nginx comme image de base, puis nous créons une nouvelle image qui ajoute un utilisateur non-root nommé myuser sans mot de passe et sans informations supplémentaires. Enfin, l’instruction USER est utilisée pour basculer vers l’utilisateur myuser avant de démarrer tout processus.

Pour construire l’image, vous pouvez utiliser la commande suivante :

docker build -t mynginx .

Cela construira une nouvelle image Docker nommée mynginx qui inclut l’utilisateur myuser.

Pour exécuter un conteneur à partir de cette image personnalisée, vous pouvez utiliser la commande docker run avec le flag --user pour spécifier l’UID de l’utilisateur myuser :

docker run --user 1000 mynginx

Dans cet exemple, le conteneur mynginx est démarré avec le flag --user défini à 1000, qui est l’UID de l’utilisateur myuser que nous avons créé dans le Dockerfile.

Par défaut, les conteneurs Docker s’exécutent en tant qu’utilisateur root, ce qui peut potentiellement poser des risques de sécurité. L’exécution de conteneurs en tant qu’utilisateur non-root peut aider à atténuer ces risques en limitant les permissions de tous les processus exécutés dans le conteneur. Créer un nouvel utilisateur dans un Dockerfile et exécuter les conteneurs sous cet utilisateur est un moyen simple d’y parvenir.

V. Exécuter des conteneurs en tant qu’utilisateur privilégié

Par défaut, les conteneurs Docker s’exécutent en tant qu’utilisateur root, ce qui peut potentiellement poser des risques de sécurité. L’exécution de conteneurs en tant qu’utilisateur root peut permettre aux processus exécutés dans le conteneur d’effectuer des actions en dehors du périmètre du conteneur et de potentiellement compromettre le système hôte.

Cependant, il peut y avoir certains scénarios où l’exécution d’un conteneur en tant qu’utilisateur root est nécessaire. Dans ce cas, Docker fournit le flag --privileged pour exécuter un conteneur en tant qu’utilisateur root avec toutes les capacités.

Pour exécuter un conteneur en tant qu’utilisateur root en utilisant le flag --privileged, vous pouvez utiliser la commande suivante :

docker run --privileged myimage

Dans cet exemple, le conteneur myimage est démarré avec le flag --privileged, qui donne au conteneur un accès complet au système hôte et s’exécute en tant qu’utilisateur root.

Il est important de faire preuve de prudence lors de l’exécution de conteneurs en tant qu’utilisateur root, car cela peut potentiellement compromettre le système hôte. N’utilisez le flag --privileged que lorsque c’est absolument nécessaire.

Bien qu’il ne soit généralement pas recommandé d’exécuter des conteneurs en tant qu’utilisateur root, il peut y avoir certains scénarios où cela est nécessaire. Dans ce cas, Docker fournit le flag --privileged pour exécuter un conteneur avec toutes les capacités et en tant qu’utilisateur root. Cependant, il est important de faire preuve de prudence lors de l’utilisation de ce flag, car il peut potentiellement compromettre le système hôte.

VI. Comprendre les identifiants utilisateur dans Docker

Dans Docker, les identifiants utilisateur sont attribués aux utilisateurs et aux groupes dans un conteneur, et peuvent être utilisés pour gérer les permissions et le contrôle d’accès.

Par défaut, le premier utilisateur d’un conteneur Docker se voit attribuer l’identifiant utilisateur 1000. Cet utilisateur est créé lors de la construction du conteneur et est souvent utilisé comme utilisateur par défaut pour l’exécution des processus dans le conteneur.

En plus de l’utilisateur 1000, Docker attribue également d’autres identifiants utilisateur à des fins spécifiques. Par exemple, l’identifiant utilisateur 1001 est généralement utilisé pour l’utilisateur nobody, qui est un compte utilisateur spécial sans privilèges, utilisé à des fins de sécurité.

Pour voir l’identifiant utilisateur d’un conteneur en cours d’exécution, vous pouvez utiliser la commande docker exec avec la commande id :

docker exec mycontainer id

Dans cet exemple, la commande id est exécutée dans le conteneur mycontainer en utilisant la commande docker exec, qui affiche l’identifiant utilisateur du conteneur.

Comprendre les identifiants utilisateur dans Docker est important pour gérer les permissions et le contrôle d’accès dans les conteneurs. Par défaut, le premier utilisateur d’un conteneur se voit attribuer l’identifiant utilisateur 1000, et Docker attribue également d’autres identifiants utilisateur à des fins spécifiques comme l’utilisateur nobody. Vous pouvez utiliser la commande docker exec avec la commande id pour voir l’identifiant utilisateur d’un conteneur en cours d’exécution.

VII. Conclusion

Dans cet article, nous avons exploré les différents aspects des permissions utilisateur Docker et comment les gérer. Nous avons appris que par défaut, les conteneurs Docker s’exécutent en tant que premier utilisateur avec l’ID 1000, ce qui peut poser des risques de sécurité. Nous avons également appris comment exécuter des conteneurs avec différents utilisateurs en utilisant le flag --user, et comment créer et exécuter des conteneurs en tant qu’utilisateurs non-root.

De plus, nous avons discuté des risques liés à l’exécution de conteneurs en tant qu’utilisateur root, et comment exécuter des conteneurs avec des privilèges élevés en utilisant le flag --privileged.

Enfin, nous avons exploré la signification des identifiants utilisateur dans Docker et comment voir l’identifiant utilisateur d’un conteneur en cours d’exécution en utilisant la commande docker exec.

En suivant les bonnes pratiques pour les permissions utilisateur Docker, vous pouvez vous assurer que vos conteneurs sont sécurisés et fonctionnent avec des contrôles d’accès appropriés.

Pour approfondir vos connaissances sur les permissions utilisateur Docker, voici quelques ressources supplémentaires :

Nous espérons que cet article vous a été utile pour comprendre les permissions utilisateur Docker et comment les gérer.

Full Bright

Full Bright

A professional and sympathic business man.

Contact

Contact Us

To order one of our services, navigate to the order service page

Address

10 rue François 1er,
75008 Paris

Email Us

hello at bright-softwares dot com

Open Hours

Monday - Friday
9:00AM - 05:00PM