web-dev-qa-db-fra.com

Docker exécute les processus de conteneur en tant que root - devrais-je m'inquiéter?

J'utilise un (QNAP) NAS avec la fonctionnalité Docker (" containerstation "). Je pensais qu'il serait beaucoup plus sûr d'installer des applications via des conteneurs au lieu des applications de le magasin (ou les magasins tiers).

De nombreux packages sont obsolètes dans leur boutique officielle et QNAP exécute tous les programmes et applications en tant que root/admin (même le serveur Web), j'ai donc pensé que Docker serait une solution.

Maintenant, j'ai quelques instances Docker déployées et leurs processus semblent s'exécuter également en tant que root/admin.

enter image description here

Ce qui me fait penser: est-ce un faux sentiment de sécurité que j'ai en ce moment? Ou est-ce que l'utilisation des conteneurs Docker est beaucoup plus sûre que la racine "régulière"?

9
Critical joe

Je suppose que vous êtes préoccupé par les applications conteneurisées fonctionnant en tant que root.

racine dans le récipient est un risque. Il interagit toujours avec le noyau en tant que root. Et si une application parvient à sortir du conteneur, elle dispose des privilèges root sur l'hôte.

Cependant, root dans le conteneur a restreint capacités par rapport à root sur l'hôte. Par exemple. il n'a pas de capacité SYS_ADMIN nécessaire pour mount. Cependant, évitez autant que possible la racine dans le récipient pour minimiser les risques.

Si vos applications conteneurisées n'ont pas besoin des privilèges root, vous pouvez exécuter des conteneurs avec un utilisateur non privilégié. Le moyen le plus simple consiste à spécifier l'option --user UID:GID dans docker run.

Mais je suppose que vous avez besoin des privilèges root pour vos applications conteneurisées. Docker fournit un espace de noms utilisateur pour résoudre ce problème.

Je ne donne pas d'exemple de configuration ici car je ne connais pas vraiment l'espace de noms des utilisateurs. Je l'ai installé une fois et je peux confirmer que cela fonctionne. Je recommande de lire la documentation: https://docs.docker.com/engine/security/userns-remap/

Pour faire court: la configuration de l'espace de noms utilisateur réalise un "faux" utilisateur root dans le conteneur qui, sur l'hôte, est mappé à un utilisateur non privilégié. Si l'application éclate, elle ne dispose pas des privilèges root sur l'hôte.


En dehors de cela, vous pouvez réduire les capacités des conteneurs pour améliorer la sécurité des conteneurs. Utilisez l'option --cap-drop=xyz et déposez tout ce dont votre conteneur n'a pas besoin. Ou encore mieux, utilisez --cap-drop=ALL et n'ajoutez que les fonctionnalités vraiment nécessaires, par exemple --cap-add=CHOWN. Regardez https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities

Une autre option pour améliorer la sécurité des conteneurs est --security-opt=no-new-privileges.

8
mviereck