Exécuter une commande en tant qu'un autre utilisateur
Dans cette étape, vous apprendrez comment exécuter une commande dans un conteneur en cours d'exécution en tant qu'un utilisateur spécifique. Par défaut, docker exec
exécute les commandes en tant qu'utilisateur root à l'intérieur du conteneur, mais vous pouvez spécifier un autre utilisateur en utilisant l'option -u
ou --user
. Ceci est important pour la sécurité et pour respecter le principe du moindre privilège.
Continuons à utiliser le conteneur my-nginx
. Tout d'abord, voyons sous quel utilisateur la commande ls /
s'exécute par défaut.
docker exec my-nginx whoami
Le résultat sera probablement root
, car c'est l'utilisateur par défaut pour docker exec
.
Maintenant, essayons d'exécuter une commande en tant qu'un autre utilisateur. L'image Nginx exécute typiquement le processus Nginx en tant qu'utilisateur non-root, souvent nommé nginx
. Essayons d'exécuter la commande whoami
en tant qu'utilisateur nginx
.
docker exec -u nginx my-nginx whoami
Vous devriez voir le résultat nginx
, confirmant que la commande a été exécutée en tant qu'utilisateur nginx
.
Vous pouvez également spécifier un identifiant d'utilisateur (UID) au lieu d'un nom d'utilisateur. Pour trouver l'UID de l'utilisateur nginx
dans le conteneur, nous pouvons consulter le fichier /etc/passwd
.
docker exec my-nginx cat /etc/passwd | grep nginx
Le résultat affichera l'entrée pour l'utilisateur nginx
, incluant son UID et GID (identifiant de groupe). Par exemple, cela pourrait ressembler à nginx:x:101:101:nginx user,,,:/nonexistent:/bin/false
. Dans cet exemple, l'UID est 101
.
Maintenant, exécutons la commande whoami
en utilisant l'UID. Remplacez 101
par l'UID réel que vous avez trouvé à l'étape précédente s'il est différent.
docker exec -u 101 my-nginx whoami
Le résultat devrait à nouveau être nginx
, démontrant que vous pouvez utiliser soit le nom d'utilisateur soit l'UID pour spécifier l'utilisateur avec docker exec
.
Exécuter des commandes en tant qu'utilisateur non-root est une bonne pratique de sécurité, particulièrement lorsqu'on interagit avec des fichiers sensibles ou qu'on effectue des opérations ne nécessitant pas les privilèges root.