web-dev-qa-db-fra.com

"docker-compose up" en tant qu'utilisateur root ou non-root?

Après avoir lu certains articles, je ne sais toujours pas quel utilisateur je dois utiliser pour exécuter un conteneur Docker. Existe-t-il des problèmes de sécurité lors de l'exécution d'un conteneur Docker en tant qu'utilisateur root? Est-il correct d'exécuter des conteneurs docker en tant qu'utilisateur root OR dois-je utiliser mon utilisateur normal, l'ajouter au groupe "docker" et ensuite exécuter mes conteneurs OR dois-je créer un utilisateur supplémentaire uniquement pour gérer/créer des conteneurs Docker?

root @ myDockerHost:/opt/myDockerContainer # docker-compose up -d

CONTRE

chris @ myDockerHost:/opt/myDockerContainer # docker-compose up -d

CONTRE

dockerusr @ myDockerHost:/opt/myDockerContainer # docker-compose up -d

(Je parle des utilisateurs sur mon Docker Host - pas de l'utilisateur à l'intérieur d'un conteneur!)

5
r00tusr

r00tusr!

Je vote pour toujours exécuter des conteneurs en tant qu'utilisateurs réguliers.

Dans un système de production, vos conteneurs ne seront pas exécutés en tant que root. Même dans les systèmes hors production, les utilisateurs qui exécutent votre conteneur peuvent ne pas être autorisés à exécuter des programmes en tant que root.

J'aime donc les faire fonctionner correctement en tant qu'utilisateur non privilégié, même lorsque c'est difficile.

Il y a aussi la sécurité. La règle générale que les administrateurs système professionnels suivent est de ne jamais exécuter quelque chose en tant que root à moins que cela ne soit vraiment, vraiment nécessaire. Une fois qu'un programme s'exécute en tant que superutilisateur, il a le contrôle total de l'ordinateur et peut faire tout ce qui lui est demandé. Que ce soit les bonnes œuvres que l'auteur voulait ou les œuvres néfastes d'un neer-do-well qui s'introduit dans le programme de l'auteur à travers une vulnérabilité que l'auteur n'a pas pensé à fermer.

Puisque nous avons finalement appris que nous ne pouvons vraiment pas vraiment prédire quels programmes ont des défauts, nous ne prenons tout simplement plus de risques.

Merci! Mike

2
Mike Diehn

Cela fait peu de différence. Le docker-compose commande se connecte à docker.sock, alias API de docker, pour exécuter toutes les commandes de conteneur. Par défaut, cette API n'est accessible qu'à l'utilisateur root sur linux, vous voyez donc souvent des personnes exécuter des commandes avec Sudo.

Vous pouvez configurer Docker pour autoriser les utilisateurs non root à accéder à cette API, assurez-vous simplement que vous faites confiance à ces utilisateurs avec un accès root sur votre hôte, car l'API donne ce niveau d'accès. Voir cette réponse pour plus de détails sur la façon de donner cet accès aux utilisateurs. Le démon dockerd est généralement configuré pour s'exécuter en tant que root, l'utilisateur accédant à cette API fait peu de différence (il existe actuellement un mode sans racine en mode expérimental).

Le détail important est d'exécuter des applications à l'intérieur de votre conteneur en tant qu'utilisateur non root. C'est l'équivalent de l'exécution de systemd en tant que root et du lancement d'un programme en tant qu'utilisateur non root. Vous configurez cet utilisateur dans le Dockerfile, docker-compose.yml ou votre docker run -u CLI.

La raison pour laquelle je dis "petite différence" est qu'un fichier de composition peut configurer des montages d'hôte qui ont un chemin relatif. Si vous exécutez docker-compose commande en tant que root ou utilisateur différent, ces montages d'hôte peuvent être un chemin différent et les fichiers peuvent appartenir à un UID différent, qui peut ou non mapper à l'UID de votre application à l'intérieur du conteneur. Au-delà, je ne vois aucune différence entre l'exécution de docker-compose en tant qu'utilisateur ou root.

1
BMitch