‫D'accord. Nous savons ne pas fonctionner en tant que root dans le conteneur.
‫Mais, en dehors du conteneur, la racine du conteneur n’a,
‫d’ailleurs, aucun accès direct à quoi que ce soit sur
‫l’hôte. Juste parce que vous
‫êtes root dans un conteneur, vous y êtes toujours emprisonné.
‫Mais si vous voulez
‫passer à ce niveau supérieur, où si l'utilisateur a même une racine dans le conteneur,
‫il souhaite se connecter à l'hôte, car il existe
‫un noyau de vulnérabilité similaire à celui dont
‫nous avons parlé, comme une sale vache ou une autre vulnérabilité de
‫Docker. ou quelque chose.
‫Ensuite, l'étape suivante consiste à activer les espaces de noms d'utilisateurs, qui
‫ne sont pas activés par défaut.
‫J'ai un lien ici qui mène à un article de
‫blog qui en dit long.
‫Fondamentalement, vous définissez un paramètre par hôte dans la configuration
‫de Docker. Le JSON Docker.
‫Il indique à Docker que chaque fois qu'il crée un
‫nouveau conteneur pour l'exécuter
‫en tant qu'utilisateur non root sur l'hôte.
‫Donc, en gros, il y
‫a deux programmes, containerd et runC, qui sont d'autres programmes utilisés
‫par Docker pour démarrer votre conteneur.
‫Par défaut, ceux-ci fonctionnent en tant que root.
‫Une des fonctionnalités de Docker est d'activer les espaces de
‫noms d'utilisateurs, ce qui signifie
‫essentiellement que lorsque Docker crée ces conteneurs, il ne les créera
‫pas comme un sous-processus exécuté en tant que root, contrairement à Docker.
‫Cela les fera apparaître comme un utilisateur avec un nombre élevé.
‫Une sorte de, pas nécessairement un utilisateur aléatoire, mais un utilisateur
‫de haut niveau.
‫Cela signifie que si ce conteneur
‫comporte des vulnérabilités de sécurité permettant à
‫l'utilisateur de s'échapper du conteneur, il ne restera plus qu'un
‫utilisateur sur l'hôte. Parce qu'ils agiront en
‫tant qu'utilisateur du processus en cours d'exécution par ce
‫conteneur. La course C essentiellement.
‫Le programme runC est ce qui lance ce conteneur et
‫il s'exécutera en tant qu'utilisateur avec un nombre élevé, pas
‫en tant que root. Cet utilisateur n'a pas vraiment
‫de privilèges en dehors de ce conteneur. Donc, cette fonctionnalité est un
‫paramètre par hôte, pas un paramètre par conteneur, et tout
‫ne fonctionne pas sous les espaces de noms d'utilisateurs.
‫Vous allez juste devoir essayer et pratiquer.
‫Vous devrez l'activer sur certains serveurs, essayez vos applications
‫sur ce serveur, voyez si elles fonctionnent.
‫S'ils ne le font pas, vous devrez
‫segmenter votre architecture. Chaque fois que j'implémente des
‫espaces de noms d'utilisateurs dans un cluster, nous avons généralement des nœuds de travail spécifiques
‫pour lesquels les espaces de noms d'utilisateurs sont activés.
‫C'est là que fonctionnent les programmes qui peuvent le supporter,
‫qui fonctionnent avec.
‫Tout le reste doit fonctionner sur des serveurs Docker normaux,
‫quelque part ailleurs. C'est un peu comme ça qu'on le segmente.
‫Nous segmentons en deux classes de serveurs.
‫Vous savez, par exemple, si vous exécutiez une zone démilitarisée, c’est ce
‫que je ferais, c’est-à-dire que j’allais activer, dans la zone démilitarisée,
‫tous les espaces de noms d’utilisateur, tous les
‫serveurs, puis les conteneurs exécutés. il devrait y avoir, devrait supporter les
‫espaces de noms d'utilisateurs.
‫Vous ne pouvez pas consulter les applications pour savoir si elles prennent en charge
‫les espaces de noms d'utilisateurs.
‫C'est un... Les espaces de noms d'utilisateurs ne sont pas
‫nécessairement une fonctionnalité spécifique de Docker. Cela signifie essentiellement que
‫votre conteneur s'exécute dans un espace de noms
‫et que l'application exécutant ce conteneur est également un
‫peu verrouillée.
‫Tout ne peut pas supporter cela. Vous devrez
‫simplement pratiquer ou peut-être faire des recherches pour
‫voir si d'autres personnes ont été capables
‫de le faire fonctionner là-bas. Vous savez, pour des choses courantes comme MySQL
‫et des choses comme ça. Mais évidemment, pour vos
‫propres programmes que vous développez, il vous suffira de les tester
‫pour voir s'ils vont fonctionner. Je dirais que la
‫plupart des programmes et des langages courants que j'exécute fonctionnent
‫parfaitement dans les espaces de noms d'utilisateurs. Le vrai problème avec les
‫espaces de noms d'utilisateurs est lorsque vous avez une application qui a besoin
‫d'écrire sur des volumes ou de lier des montages, que
‫vous avez peut-être des téléchargements de fichiers utilisateur et que
‫vous les partagez entre de nombreux conteneurs différents. C'est là que les espaces de noms d'utilisateurs ne sont pas impossibles.
‫Cela devient juste un peu délicat, car les fichiers qui
‫sont maintenant écrits sur le disque de l'hôte sont maintenant
‫écrits en tant qu'utilisateur différent.
‫Parce que ce processus sur l'hôte qui gère le
‫conteneur est un utilisateur différent.
‫Vous verrez donc différents identifiants d'utilisateurs sur ces fichiers et vous devrez
‫simplement vous en occuper.
‫Il existe des autorisations Linux standard à ce stade, et
‫il vous suffit d'automatiser et de résoudre ces problèmes
‫de diverses manières standard Linux.
‫Ce n'est même pas vraiment un problème de Docker à ce stade.
‫C'est juste un problème d'autorisations sur l'hôte.