(Avertissement :je ne suis pas une autorité sur OpenVZ. Cette réponse est plus opiniâtre que mes réponses habituelles, alors n'hésitez pas à critiquer !)
OpenVZ pourrait être « plus » sécurisé dans la mesure où il ne s'intègre pas à l'ensemble du noyau, de sorte que sa surface d'attaque est un peu plus faible. Cependant, OpenVZ est essentiellement ce qui a servi d'inspiration pour les espaces de noms et donc finalement, LXC et Docker. Je ne pense pas que cela va durer longtemps maintenant que ces solutions plus complètes sont, eh bien, complètes.
Comme l'a souligné WhiteWinterWolf, l'une des grandes différences est que LXC peut enfin utiliser l'espace de noms d'utilisateur, ouvrant la possibilité aux utilisateurs non privilégiés d'exécuter des conteneurs et garantissant que le code contenu qui sort du conteneur conserve les privilèges des utilisateurs non privilégiés. De plus, les conteneurs basés sur des espaces de noms peuvent éventuellement être entièrement étiquetés SELinux. Les conteneurs Docker le sont normalement déjà, et Dan Walsh travaille sur un moyen de faire en sorte que SELinux applique automatiquement une couche supplémentaire d'isolation entre les conteneurs en utilisant des catégories générées aléatoirement pour les processus contenus.
Donc, en résumé, les conteneurs sont meilleurs parce que :- Ils peuvent partiellement contrecarrer certaines ruptures de conteneurs (en les limitant à un UID non privilégié), rendant les escalades de privilèges à l'intérieur du conteneur non pertinentes. - Ils sont plus pris en charge et plus activement développés, et en particulier ils bénéficier grandement de la prise en charge de SELinux.
Et ils sont pires parce que :- Leur TCB est très grand, dans tout le noyau et des bogues se produiront de temps en temps, entraînant des exploits et des évasions. - L'espace de noms d'utilisateur me semble être une sorte de cas limite. Vous obtenez généralement une élévation des privilèges via un bogue dans le SCI (que vous seriez capable de reproduire après votre évasion) ou des attaques adjointes confuses sur un service privilégié (qui sont susceptibles de continuer à exister en dehors de votre conteneur en premier lieu). Vous devrez donc toujours limiter étroitement cet UID d'exécution de conteneurs aux conteneurs en cours d'exécution.
En résumé, continuez à pratiquer la défense en profondeur et continuez à réfléchir à la manière dont vous laissez les processus confinés interagir avec le monde extérieur et à la manière dont vous exécutez les conteneurs. Des différences existent mais comme vous pouvez le constater elles sont plutôt minimes.