Hoe u de UID/GID van containers en het eigendom van volumes vergrendelt vóór updates van zelfgehoste apps

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.

Updates van zelfgehoste apps leiden minder snel tot bestanden die eigendom zijn van root wanneer de implementatie een numerieke gebruikersconfiguratie vastlegt en het eigendom van volumes controleert voordat de container wordt vervangen.

De preventieve aanpak is om de interne gebruikersnaam van de image niet langer als een stabiele opslagidentiteit te behandelen. Leg de effectieve UID en GID vast die persistente gegevens schrijven, koppel deze aan mappen op de host of benoemde volumes, behoud eventuele PUID/PGID- of user-namespace-instellingen en test de nieuwe image eerst op een klein beschrijfbaar pad voordat je de volledige uitrol uitvoert. Zo kan een image-update niet stilletjes de numerieke eigenaar van configuratie, uploads, databases of metagegevens van media wijzigen.

Leg de numerieke UID en GID vast vóór het bijwerken

Leg de gebruiker van het actieve proces, de primaire groep, aanvullende groepen en het numerieke eigendom van representatieve bestanden in elke beschrijfbare mount vast. Bewaar de image-digest of versie naast deze eigendomsbasislijn.

De richtlijnen van Docker voor het bouwen van images stellen dat expliciete ID's drift bij opnieuw bouwen voorkomen, omdat automatisch toegewezen image-gebruikers bij verschillende builds verschillende numerieke ID's kunnen krijgen.

Leg getallen vast, niet alleen namen zoals app of media. Een nieuwe image kan dezelfde gebruikersnaam opnieuw gebruiken terwijl de UID verandert, en bestanden op de host slaan numeriek eigendom op.

Leg de runtimegebruiker vast in het implementatiecontract

Wanneer de image rechtstreeks als een niet-rootaccount kan draaien, geef je de beoogde gebruiker en groep expliciet op in Compose of de runtimeconfiguratie. Als de image een initialisatiefase met root vereist, documenteer dan welk proces daarna daadwerkelijk persistente gegevens schrijft.

De specificatie voor Open Container-images definieert User als de standaard voor de runtime. Dat betekent dat een gewijzigde image de runtime-identiteit kan aanpassen, tenzij de implementatie deze bewust overschrijft of controleert.

Dwing geen willekeurige niet-root-UID af bij images die een ondersteund initialisatiemodel vereisen. Het contract moet aansluiten bij het gedocumenteerde ontwerp van de applicatie en tegelijk zorgen dat de eigenaar van persistente bestanden voorspelbaar blijft.

Houd PUID en PGID afgestemd op het eigendom op de host

Voor images die PUID- en PGID-variabelen aanbieden, leg je deze waarden vast in versiebeheer in Compose of de omgevingsconfiguratie en zorg je ervoor dat volumemappen op de host eigendom zijn van het bijbehorende serviceaccount.

LinuxServer legt uit dat PUID schrijfbewerkingen vanuit de container koppelt, zodat bestanden in gekoppelde volumes buiten de container beheersbaar blijven.

Vergelijk vóór het bijwerken de geconfigureerde ID's met id op de host en met het bestaande bestandseigendom. Kopieer geen voorbeeldwaarde zoals 1000 zonder controle naar een server waarop die ID aan een andere persoon of service toebehoort.

-15% OFF
Single board computer zimaboard2

Houd rekening met user namespaces en rootless-koppelingen

Rootless Docker of Podman kan ervoor zorgen dat een proces in de container als root lijkt, terwijl het wordt gekoppeld aan een niet-root-UID op de host. Leg vóór het interpreteren van eigendomswijzigingen de namespace-modus en de configuratie voor aanvullende UID's en GID's vast.

De runtimeopties van Podman laten zien dat keep-id de gebruikerskoppeling behoudt wanneer een container voorspelbare toegang nodig heeft tot bestanden die op de host zijn aangekoppeld.

Probeer een eigenaar die er in de container uitziet als root niet te “herstellen” voordat je de numerieke ID op de host hebt gecontroleerd. Root binnen een namespace en root op de host zijn niet altijd dezelfde identiteit.

Test de nieuwe image vooraf op een testvolume

Voer de nieuwe image vóór het vervangen van de productiecontainer uit met de beoogde UID/GID en een tijdelijke map die de productierechten nabootst. Laat de initialisatie bij het opstarten één bestand en één map aanmaken en controleer daarna het eigendom ervan op de host.

De rootless-volumehandleiding van Red Hat laat zien dat het eigendom op de host de UID-koppeling volgt en dat de gebruikersnaam die in de container wordt getoond op zichzelf geen afdoende bewijs is.

Als de canary onverwachte bestanden aanmaakt die eigendom zijn van root of opnieuw zijn toegewezen, stop je de uitrol en vergelijk je de imagegebruiker, entrypoint, namespace en mountinstellingen. Dat is veel veiliger dan de wijziging pas ontdekken nadat een recursieve migratie bij het opstarten een volledige fotoboom of databasemap heeft aangepast.

Controleer aanvullende groepen en beschrijfbare paden

Sommige apps hebben een primaire service-UID nodig en daarnaast toegang via een gedeelde groep voor media, downloads of apparaten. Leg ook deze groeps-ID's vast en test alle beschrijfbare paden, niet alleen de configuratiemap.

Kubernetes gebruikt expliciete besturing via runAsUser en runAsGroup en illustreert daarmee hetzelfde Linux-principe voor eigendom, ook buiten een eenvoudige Docker Compose-implementatie.

Het updatebeleid is compleet wanneer de nieuwe image op elk persistent pad bestanden aanmaakt met het verwachte eigendom op de host en één keer opnieuw aanmaken van de container doorstaat. Het gerelateerde ZimaSpace-artikel over bestanden die na image-updates eigendom zijn van root is de herstelroute als een uitrol al gegevens heeft opgeleverd die eigendom zijn van root.

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.