Beaucoup de gens considèrent les conteneurs comme de petites machines virtuelles. Cette perception conduit à des décisions erronées en matière de sécurité. En réalité, un conteneur n'est qu'un processus Linux ordinaire, s'exécutant directement sur le noyau du serveur.
Les trois mécanismes qui constituent un conteneur
- Espace de noms — détermine ce que le processus peut voir. L'espace de noms PID fait croire au processus qu'il est le numéro 1 ; l'espace de noms réseau lui attribue une pile réseau distincte ; l'espace de noms de montage lui attribue une arborescence de répertoires distincte
- cgroup — détermine la quantité de CPU, de RAM et de bande passante disque dont un processus peut disposer
- Système de fichiers en couches — plusieurs conteneurs partagent des couches en lecture seule, chacun disposant d’une seule couche en écriture, ce qui permet de créer de nouveaux conteneurs presque instantanément
Conséquences en matière de sécurité
Comme le noyau est partagé, une faille permettant l'escalade de privilèges au niveau du noyau peut permettre à un attaquant de sortir du conteneur pour accéder directement au serveur. La machine virtuelle dispose d'une couche de séparation supplémentaire, à savoir le logiciel de virtualisation.
On peut en déduire quelques principes pratiques :
- N'exécutez pas de conteneurs avec les droits root si ce n'est pas strictement nécessaire
- Ne montez pas le socket Docker dans le conteneur — cela revient à accorder les droits root au serveur
- Pour isoler plusieurs utilisateurs qui ne se font pas confiance, utilisez des machines virtuelles ; ne vous fiez pas aux conteneurs
Pourquoi faut-il continuer à l'utiliser ?
Les conteneurs apportent une excellente solution au problème de l'emballage et de la reproduction d'environnement : la même image s'exécute de la même manière sur votre machine et sur le serveur. C'est là leur principal atout, tandis que l'isolation n'est qu'un avantage secondaire — et un avantage limité.
Thảo luận