‫Oke. We weten dat we niet als root in de container moeten draaien.
‫Maar buiten de container heeft de root in de
‫container trouwens geen directe toegang tot iets op de host,
‫toch. Alleen omdat je root
‫in een container zit, zit je daar nog steeds gevangen.
‫Maar als je dat
‫volgende niveau wilt bereiken, waarbij als de gebruiker zelfs root in de container heeft,
‫hij wil uitbreken naar de host, omdat er
‫een kern van kwetsbaarheid is waar we
‫het over hadden, zoals vuile Cow of een andere kwetsbaarheid in
‫Docker of zoiets.
‫De volgende stap die u hier doet, is het inschakelen van
‫gebruikersnaamruimten, die standaard niet is ingeschakeld.
‫Ik heb hier een link naar een blogartikel
‫dat er alles over vertelt.
‫Kortom, het is een instelling per host die u instelt in
‫de Docker-configuratie. De Docker-JSON.
‫Het vertelt Docker dat elke keer dat het een nieuwe container
‫maakt om die container
‫als een niet-rootgebruiker op de host uit te voeren.
‫Dus eigenlijk zijn er een
‫aantal programma's, containerd en runC, dit zijn andere programma's die Docker
‫gebruikt om je container te starten.
‫Standaard draaien die wel als root.
‫Een functie die Docker heeft, is het inschakelen van gebruikersnaamruimten,
‫wat in wezen betekent dat
‫als Docker deze containers maakt, het ze niet zal voortbrengen als
‫een subproces dat als root wordt uitgevoerd zoals Docker dat doet.
‫Het zal ze voortbrengen als een gebruiker met een hoog nummer.
‫Een soort, niet per se een willekeurige gebruiker, maar een gebruiker
‫op hoog niveau.
‫Dat betekent dat als die container ooit
‫beveiligingsproblemen heeft waarbij de gebruiker aan de
‫container kan ontsnappen, er nog steeds alleen een gebruiker op
‫de host zal zijn. Want dat is dat ze
‫gaan optreden als de gebruiker die het proces dat die container
‫uitvoert, gebruikt. De runC in wezen.
‫Het runC-programma start die container en het wordt
‫uitgevoerd als een gebruiker met een hoog nummer,
‫niet als root. Die gebruiker heeft niet
‫echt privileges buiten die container. Die functie is dus
‫een instelling per host, niet een instelling per
‫container, en niet alles werkt onder gebruikersnaamruimten.
‫Je zult gewoon moeten proberen en oefenen.
‫Je zult het op sommige servers moeten inschakelen, je applicaties op
‫die server moeten proberen, kijken of ze werken.
‫Als dat niet het geval is, moet u
‫uw architectuur segmenteren. Telkens wanneer ik
‫gebruikersnaamruimten in een cluster implementeer, hebben we meestal specifieke
‫werkknooppunten waarvoor gebruikersnaamruimten zijn ingeschakeld.
‫Dat is waar die programma's draaien die het kunnen ondersteunen,
‫die ermee werken.
‫Al het andere moet ergens anders op gewone
‫Docker-servers draaien. Dat is een beetje hoe we het uitsplitsen.
‫We segmenteren in twee klassen van servers.
‫Dat, weet je, alsof je een DMZ draait, dat is
‫wat ik zou doen, ik zou uitvoeren, ik zou in
‫de DMZ alle gebruikersnaamruimten inschakelen, op alle servers,
‫en dan de containers die draaien er zou moeten zijn, zou
‫gebruikersnaamruimten moeten ondersteunen.
‫U kunt niet naar toepassingen gaan kijken en erachter komen of
‫ze gebruikersnaamruimten ondersteunen.
‫Het is een... gebruikersnaamruimten is niet per se
‫een Docker-specifieke functie. Het betekent in wezen dat
‫uw container in een naamruimte wordt uitgevoerd en
‫dat nu de toepassing die die container uitvoert, ook een beetje
‫is vergrendeld.
‫Niet alles kan dat ondersteunen. Je zult
‫gewoon moeten oefenen of misschien wat onderzoek doen
‫om te zien of andere mensen het
‫daaronder kunnen laten werken. Je weet wel, voor gewone dingen zoals
‫MySQL en dat soort dingen. Maar het is duidelijk dat
‫je voor je eigen programma's die je aan het ontwikkelen bent, ze gewoon moet testen
‫om te zien of ze zullen werken. Ik zou zeggen dat
‫de meeste programma's en veelvoorkomende talen die ik
‫gebruik, prima werken in gebruikersnaamruimten. Het echte probleem met
‫gebruikersnaamruimten is dat wanneer je een applicatie hebt die
‫naar volumes moet schrijven, of koppelingen moet
‫binden, je misschien gebruikersbestandsuploads hebt en deze
‫deelt over veel verschillende containers. Dat is waar gebruikersnaamruimten niet onmogelijk zijn.
‫Het wordt gewoon een beetje lastig omdat de bestanden die
‫nu naar schijf op de host worden geschreven, nu als
‫een andere gebruiker worden geschreven.
‫Omdat dat proces op de host die de container
‫beheert, een andere gebruiker is.
‫Je zult dus verschillende gebruikers-ID's op die bestanden zien, en daar zul je
‫het mee moeten doen.
‫Er zijn op dat moment standaard Linux-machtigingen, en je hoeft
‫die problemen alleen maar te automatiseren en op verschillende
‫standaard Linux-manieren op te lossen.
‫Het is op dat moment niet eens echt een Docker-probleem.
‫Het is gewoon een machtigingsprobleem op de host.