Waarom begint een container pas na een image-update bestanden aan te maken die eigendom zijn van root?

Eva Wong is de Technisch Schrijver en en vaste knutselaar bij ZimaSpace. Een levenslange geek met een passie voor homelabs en open-source software, zij is gespecialiseerd in het vertalen van complexe technische concepten naar toegankelijke, praktische handleidingen. Eva gelooft dat zelf-hosting leuk moet zijn, niet intimiderend. Met haar tutorials stelt ze de community in staat om hardware-setup te ontrafelen, van het bouwen van hun eerste NAS tot het beheersen van Docker-containers.

Een container kan na een image-update bestanden aanmaken waarvan root de eigenaar is, wanneer het nieuwe image de runtimegebruiker, het entrypoint of de routine voor eigendomsbeheer bij het opstarten wijzigt.

Het persistente volume kan ongewijzigd blijven, terwijl de vervangende container start met een andere numerieke UID of kortstondig een initialisatiestap als root uitvoert. Een nieuw entrypoint kan ontbrekende mappen aanmaken, configuratie migreren, machtigingen opnieuw instellen of de PUID- en PGID-variabelen die door de vorige release werden gebruikt niet langer respecteren. Vergelijk één bestand van vóór de update, één bestand dat bij het opstarten is aangemaakt en één bestand dat door de actieve applicatie is aangemaakt voordat je eigendom recursief wijzigt.

Bewijs dat het eigendom pas verandert nadat de bijgewerkte container is gestart

Stop de stack en noteer de numerieke UID, GID, modus, ACL's en tijdstempels van één bestaand bestand en de bovenliggende map. Start de bijgewerkte container één keer met zichtbare logs en controleer daarna hetzelfde pad en één nieuw aangemaakt bestand.

De Linux-systeemaanroepen van chown wijzigen numeriek eigendom. Het doorslaggevende bewijs zijn daarom de UID en GID vóór en na het opstarten, niet de gebruikersnaam die de host weergeeft.

Als het eigendom al vóór het opstarten root is, is de update niet de eerste oorzaak. Onderzoek dan de updatekopie, het uitpakken, het terugzetten van een back-up of de beheeropdracht waarmee de bestanden zijn geschreven.

Vergelijk de imagegebruiker vóór en na de update

Controleer de configuratie van het oude en nieuwe image, de effectieve containergebruiker, het entrypoint, de opdracht en de release-opmerkingen. Noteer of het image nu root, een benoemd account of een andere numerieke UID gebruikt.

Docker documenteert dat de USER-instructie de runtime-identiteit instelt voor latere image-instructies en voor het entrypoint en de opdracht van de container, wanneer een runtime-override deze niet vervangt.

Een image kan dezelfde gebruikersnaam voor de applicatie behouden en toch de numerieke UID wijzigen. Vergelijk de nummers in beide imageversies, omdat bestanden die op de host zijn aangekoppeld numeriek eigendom opslaan en niet het gebruikersnaaml abel van het image.

Controleer of het nieuwe entrypoint een recursieve chown uitvoert

Zoek in opstartlogs, release-opmerkingen, entrypointscripts en procestraceringen naar chown, herstel van machtigingen, PUID, PGID, gebruikersmigratie of initialisatie van mappen. Test dit op een kleine momentopname of een wegwerpvolume.

GNU Coreutils definieert recursieve chown als een herschrijving van eigendom voor de geselecteerde mappenstructuur. Daardoor kan een bestaand, correct volume direct na het starten van het nieuwe image veranderd lijken.

Verwijder het herstel bij het opstarten niet zomaar. Sommige images zijn hiervan afhankelijk voor nieuw aangemaakte mappen. Gebruik bij voorkeur een gedocumenteerde vlag om dit over te slaan, een vaste applicatie-UID of een smaller datapad wanneer het image dit ondersteunt.

-15% OFF
Single board computer zimaboard2

Controleer Compose-overschrijvingen voor de gebruiker en verwijderde PUID- of PGID-variabelen

Vergelijk het ingezette Compose-model vóór en na de update, inclusief user:, omgevingsvariabelen, aanvullende groepen, profielen, overridebestanden en de opgeslagen instellingen van de stackbeheerder.

Kubernetes gebruikt expliciete numerieke runtime- en volume-identiteiten. Dit illustreert dezelfde containergrens: een runtime-override en een beleid voor volume-eigendom zijn afzonderlijke instellingen die op elkaar afgestemd moeten blijven.

Als het oude image PUID- en PGID-variabelen vertaalde, maar de nieuwe release deze heeft verwijderd of hernoemd, kunnen de variabelen aanwezig blijven zonder het proces nog te besturen. Controleer de actieve UID rechtstreeks.

Houd rekening met rootless containers en ID-toewijzing via gebruikersnaamruimten

Noteer of Docker rootful, rootless of met gebruikersnaamruimte-remapping draait. Vergelijk de UID die in de container zichtbaar is met de eigenaar van dezelfde inode zoals die op de host zichtbaar is.

Red Hat legt uit dat rootless containers onderliggende UID- en GID-bereiken gebruiken. Root in de container verschijnt daardoor niet noodzakelijk als host-UID 0, en een update kan een gewijzigde toewijzing of runtime-modus zichtbaar maken.

Voer geen recursieve chown uit op een rootless volume om dit aan host-root toe te wijzen zonder de toewijzing te begrijpen. Daardoor kan de data ontoegankelijk worden voor de bedoelde containeridentiteit.

Controleer of een idmapped- of netwerkvolume de zichtbare eigenaar verandert

Stel vast of de applicatiedata op een lokaal bestandssysteem, idmapped volume, NFS-, SMB-, FUSE- of NAS-share staat. Noteer de mountopties en vergelijk het eigendom vanaf de server, de host en de container.

Het idmapped-volumemodel van de Linux-kernel scheidt bestandssysteemeigendom van volume-eigendom. Hetzelfde bestand kan daardoor onder verschillende ID's verschijnen zonder dat het fysieke eigendom recursief is herschreven.

Als alleen de weergegeven eigenaar na de update verandert, controleer dan of de runtime nu een andere naamruimte- of volumetoewijzing gebruikt. Herstel de toewijzing in plaats van elke inode opnieuw te wijzigen.

Herstel een stabiele runtime-identiteit en controleer de volgende update

Maak een back-up van de metagegevens voor eigendom, stop de applicatie, definieer de beoogde numerieke UID en GID, corrigeer alleen de paden waarvan de applicatie eigenaar is en implementeer opnieuw met een vastgezet image en gedocumenteerde gebruikersinstellingen.

Het ZimaSpace-artikel over eigendom van containers na het kopiëren van applicatiedata behandelt oorzaken bij kopiëren en migreren; dit artikel richt zich op een wijziging die door het vervangende image is geïntroduceerd.

De reparatie is voltooid wanneer het opstarten, schrijven door de applicatie, opnieuw aanmaken van de container, herstarten van de host en een gecontroleerde image-update allemaal bestanden aanmaken met de gedocumenteerde identiteit, zonder brede uitzonderingen voor machtigingen.

Veelgestelde vragen

Bewijst een bestand waarvan root de eigenaar is dat de hele container als root draait?

Nee. Een entrypoint kan kortstondig als root draaien om een volume te initialiseren en daarna privileges laten vallen voordat de applicatie start.

Moet ik het hele volume recursief chownen?

Niet voordat je de beoogde UID, gedeelde paden, ACL's en naamruimtetoewijzing hebt vastgesteld. Een brede herschrijving kan databases, gedeelde media of eigendom van rootless containers beschadigen.

Kan een image-update de UID van de applicatie wijzigen?

Ja. Onderhouders kunnen de gebruiker van het image wijzigen, de accountdatabase opnieuw opbouwen, PUID- of PGID-instellingen hernoemen of een migratie van eigendom bij het opstarten toevoegen.

Ondersteuning & Tips

Meer om te lezen

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.