Man page - cgroup_namespaces(7)

Packages contains this manual

Available languages:

en fr sv ro de

Manual

cgroup_namespaces

NAMN
BESKRIVNING
STANDARDER
NOTERINGAR
SE ÄVEN
ÖVERSÄTTNING

NAMN

cgroup_namespaces — översikt över Linux cgroup-namnrymder

BESKRIVNING

För en översikt över namnrymder, se namespaces (7).

Cgroup-namnrymder virtualiserar vyn av en process cgroup:er (se cgroups (7)) som de syns via /proc/ pid /cgroup och /proc/ pid /mountinfo .

Varje cgroup-namnrymd har sin egen uppsÀttning av cgroup-rotkataloger. Dessa rotkataloger Àr baspunkterna för de relativa platserna som visas i motsvarande poster i filen /proc/ pid /cgroup . NÀr en process skapar en ny cgroup-namnrymd med clone (2) eller unshare (2) med flaggan CLONE_NEWCGROUP blir dess aktuella cgroup-kataloger cgroup-rotkataloger i den nya namnrymden. (Detta gÀller bÄde för cgroup version 1-hierarkierna och den unifierade hierarkin i cgroup version 2.)

NĂ€r man lĂ€ser cgroup-medlemskapen för en ”mĂ„l”-process frĂ„n /proc/ pid /cgroup kommer sökvĂ€gsnamnet som visas i det tredje fĂ€ltet av varje post att vara relativt den lĂ€sande processens rotkatalog för motsvarande cgroup-hierarki. Om cgroup-katalogen för mĂ„lprocessen ligger utanför rotkatalogen för den lĂ€sande processens cgroup-namnrymd kommer sökvĂ€gsnamnet visa ../ -poster för varje anfadernivĂ„ i cgroup-hierarkin.

Följande skalsession demonstrerar effekten av att skapa en ny cgroup-namnrymd.

Först (som rot) i ett skal i den initiala cgroup-namnrymden skapar vi en barn-cgroup i hierarkin freezer , och lÀgger in en process i denna cgroup som vi kommer anvÀnda som en del av vÄr demonstration nedan:

# mkdir -p /sys/fs/cgroup/freezer/sub2
# sleep 10000 & # Skapa en process som lever ett tag
[1] 20124
# echo 20124 > /sys/fs/cgroup/freezer/sub2/cgroup.procs

Sedan skapar vi en annan barn-cgroup i hierarkin freezer och lÀgger in skalet i denna cgroup:

# mkdir -p /sys/fs/cgroup/freezer/sub
# echo $$ # Visa detta skals PID
30655
# echo 30655 > /sys/fs/cgroup/freezer/sub/cgroup.procs
# cat /proc/self/cgroup | grep freezer
7:freezer:/sub

DÀrefter anvÀnder vi unshare (1) för att skapa en process som kör ett nytt skal i nya cgroup- och monteringsnamnrymder:

# PS1="sh2# " unshare -Cm bash

FrÄn det nya skalet som startades av unshare (1) inspekterar vi sedan filerna /proc/ pid /cgroup för det nya skalet, en process som finns i den initiala cgroup-namnrymden ( init , med PID 1) respektive processen i syskon-cgroup:en ( sub2 ):

sh2# cat /proc/self/cgroup | grep freezer
7:freezer:/
sh2# cat /proc/1/cgroup | grep freezer
7:freezer:/..
sh2# cat /proc/20124/cgroup | grep freezer
7:freezer:/../sub2

FrÄn utdata frÄn det första kommandot ser vi att medlemskapet i cgroup:en freezer för det nya skalet (vilket finns i samma cgroup som det initiala skalet) visas definierat relativt rotkatalogen för cgroup:en freezer som etablerades nÀr den nya cgroup-namnrymden skapades. (I absoluta termer, det nya skalet finns i freezer-cgroup:en /sub , och rotkataloger i freezer-cgroup-hierarkin i den nya cgroup-namnrymden Àr ocksÄ /sub . AlltsÄ, det nya skalets cgroup-medlemskap visas som '/'.)

Dock, nÀr vi tittar i /proc/self/mountinfo ser vi följande anomali:

sh2# cat /proc/self/mountinfo | grep freezer
155 145 0:32 /.. /sys/fs/cgroup/freezer 


Det fjÀrde fÀltet pÄ denna rad ( /.. ) skulle visa katalogen i cgroup-filsystemet som utgör roten för denna montering. Eftersom enligt definitionen av cgroup-namnrymder processens aktuella cgroup-katalog för freezer blev dess rot-freezer-cgroup-katalog borde vi se '/' i detta fÀlt. Problemet hÀr Àr att vi ser en monteringspost för cgroup-filsystemet som motsvarar den initiala cgroup-namnrymden (vars cgroup-filsystem verkligen Àr rotat i förÀldrakatalogen till sub ). För att lösa detta problem mÄste vi montera om freezer-cgroup-filsystemet frÄn det nya skalet (d.v.s., utföra monteringen frÄn en process som finns i den nya cgroup-namnrymden), varefter vi ser det förvÀntade resultatet:

sh2# mount --make-rslave / # Propagera inte monteringshÀndelser
# till andra namnrymder
sh2# umount /sys/fs/cgroup/freezer
sh2# mount -t cgroup -o freezer freezer /sys/fs/cgroup/freezer
sh2# cat /proc/self/mountinfo | grep freezer
155 145 0:32 / /sys/fs/cgroup/freezer rw,relatime 


STANDARDER

Linux.

NOTERINGAR

AnvÀndning av cgroup-namnrymder krÀver en kÀrna som Àr konfigurerad med alternativet CONFIG_CGROUPS .

Virtualiseringen som erbjuds av cgroup-namnrymder tjÀnar ett antal syften:

‱

Det förhindrar att information lÀcker genom att en cgroup-katalogsökvÀg utanför en behÄllare annars skulle vara synlig för processer i behÄllaren. SÄdant lÀckage skulle, till exempel, kunna avslöja information om behÄllarramverket för program i behÄllare.

‱

Det förenklar uppgifter sÄsom migrering av behÄllare. Virtualiseringen som erbjuds av cgroup-namnrymder gör att behÄllare kan isoleras frÄn kunskap om sökvÀgarna till anfader-cgroup:er. Utan sÄdan isolation skulle de fullstÀndiga cgroup-sökvÀgarna (som visas i /proc/self/cgroups ) behöva Äterskapas pÄ mÄlsystemet nÀr en behÄllare migreras; dessa sökvÀgsnamn skulle ocksÄ behöva vara unika, sÄ att de inte skulle stÄ i konflikt med andra sökvÀgsnamn pÄ mÄlsystemet.

‱

Det möjliggör bÀttre begrÀnsning av processer i behÄllare, för att det Àr möjligt att montera behÄllarens cgroup-filsystem sÄ att behÄllarprocessen inte kan fÄ tillgÄng till kataloger för anfÀders cgroup. BetÀnk, till exempel, följande scenario:

‱

Vi har en cgroup-katalog, /cg/1 , som Àgs av anvÀndar-ID 9000.

‱

Vi har en process, X , som ocksÄ Àgs av anvÀndar-ID 9000, som har namnrymden under cgroup /cg/1/2 (d.v.s., X placerades i en ny cgroup-namnrymd via clone (2) eller unshare (2) med flagga CLONE_NEWCGROUP .

I avsaknad av cgroup-namnrymder skulle, eftersom cgroup-katalogen /cg/1 Àgs (och Àr skrivbar) av AID 9000 och processen X ocksÄ Àgs av anvÀndar-ID 9000, process X kunna Àndra innehÄllet i cgroup-filer (d.v.s., Àndra cgroup-instÀllningar) inte bara i /cg/1/2 utan Àven i anfader-cgroup-katalogen /cg/1 . Att namnrymda processen X under cgroup-katalogen /cg/1/2 , i kombination med lÀmpliga monteringsoperationer av cgroup-filsystemet (som visas ovan), förhindrar den frÄn att Àndra filer i /cg/1 , eftersom den inte ens kan se innehÄllet i den katalogen (eller i mer avlÀgsna cgroup-anfaderkataloger). Kombinerat med korrekt verkstÀllighet av hierarkiska begrÀnsningar förhindrar detta process X frÄn att fly frÄn begrÀnsningarna som lÀggs pÄ av anfader-cgroup:er.

SE ÄVEN

unshare (1), clone (2), setns (2), unshare (2), proc (5), cgroups (7), credentials (7), namespaces (7), user_namespaces (7)

ÖVERSÄTTNING

Den svenska översÀttningen av denna manualsida skapades av Göran Uddeborg <goeran@uddeborg.se>

Denna översÀttning Àr fri dokumentation; lÀs GNU General Public License Version 3 eller senare för upphovsrÀttsvillkor. Vi tar INGET ANSVAR.

Om du hittar fel i översÀttningen av denna manualsida, skicka ett mail till Tp-sv@listor.tp-sv.se .