.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2016 by Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH cgroup_namespaces 7 "30 mars 2023" "Linux man\-pages 6.05.01" .SH NAMN cgroup_namespaces — översikt över Linux cgroup\-namnrymder .SH BESKRIVNING För en översikt över namnrymder, se \fBnamespaces\fP(7). .PP Cgroup\-namnrymder virtualiserar vyn av en process cgroup:er (se \fBcgroups\fP(7)) som de syns via \fI/proc/\fPpid\fI/cgroup\fP och \fI/proc/\fPpid\fI/mountinfo\fP. .PP 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 \fI/proc/\fPpid\fI/cgroup\fP. När en process skapar en ny cgroup\-namnrymd med \fBclone\fP(2) eller \fBunshare\fP(2) med flaggan \fBCLONE_NEWCGROUP\fP 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.) .PP När man läser cgroup\-medlemskapen för en ”mål”\-process från \fI/proc/\fPpid\fI/cgroup\fP 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 \fI../\fP\-poster för varje anfadernivå i cgroup\-hierarkin. .PP Följande skalsession demonstrerar effekten av att skapa en ny cgroup\-namnrymd. .PP Först (som rot) i ett skal i den initiala cgroup\-namnrymden skapar vi en barn\-cgroup i hierarkin \fIfreezer\fP, och lägger in en process i denna cgroup som vi kommer använda som en del av vår demonstration nedan: .PP .in +4n .EX # \fBmkdir \-p /sys/fs/cgroup/freezer/sub2\fP # \fBsleep 10000 &\fP # Skapa en process som lever ett tag [1] 20124 # \fBecho 20124 > /sys/fs/cgroup/freezer/sub2/cgroup.procs\fP .EE .in .PP Sedan skapar vi en annan barn\-cgroup i hierarkin \fIfreezer\fP och lägger in skalet i denna cgroup: .PP .in +4n .EX # \fBmkdir \-p /sys/fs/cgroup/freezer/sub\fP # \fBecho $$\fP # Visa detta skals PID 30655 # \fBecho 30655 > /sys/fs/cgroup/freezer/sub/cgroup.procs\fP # \fBcat /proc/self/cgroup | grep freezer\fP 7:freezer:/sub .EE .in .PP Därefter använder vi \fBunshare\fP(1) för att skapa en process som kör ett nytt skal i nya cgroup\- och monteringsnamnrymder: .PP .in +4n .EX # \fBPS1="sh2# " unshare \-Cm bash\fP .EE .in .PP Från det nya skalet som startades av \fBunshare\fP(1) inspekterar vi sedan filerna \fI/proc/\fPpid\fI/cgroup\fP för det nya skalet, en process som finns i den initiala cgroup\-namnrymden (\fIinit\fP, med PID 1) respektive processen i syskon\-cgroup:en (\fIsub2\fP): .PP .in +4n .EX sh2# \fBcat /proc/self/cgroup | grep freezer\fP 7:freezer:/ sh2# \fBcat /proc/1/cgroup | grep freezer\fP 7:freezer:/.. sh2# \fBcat /proc/20124/cgroup | grep freezer\fP 7:freezer:/../sub2 .EE .in .PP 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 \fI/sub\fP, och rotkataloger i freezer\-cgroup\-hierarkin i den nya cgroup\-namnrymden är också \fI/sub\fP. Alltså, det nya skalets cgroup\-medlemskap visas som \[aq]/\[aq].) .PP Dock, när vi tittar i \fI/proc/self/mountinfo\fP ser vi följande anomali: .PP .in +4n .EX sh2# \fBcat /proc/self/mountinfo | grep freezer\fP 155 145 0:32 /.. /sys/fs/cgroup/freezer … .EE .in .PP Det fjärde fältet på denna rad (\fI/..\fP) 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 \[aq]/\[aq] 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 \fIsub\fP). 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: .PP .in +4n .EX sh2# \fBmount \-\-make\-rslave /\fP # Propagera inte monteringshändelser # till andra namnrymder sh2# \fBumount /sys/fs/cgroup/freezer\fP sh2# \fBmount \-t cgroup \-o freezer freezer /sys/fs/cgroup/freezer\fP sh2# \fBcat /proc/self/mountinfo | grep freezer\fP 155 145 0:32 / /sys/fs/cgroup/freezer rw,relatime … .EE .in .\" .SH STANDARDER Linux. .SH NOTERINGAR Användning av cgroup\-namnrymder kräver en kärna som är konfigurerad med alternativet \fBCONFIG_CGROUPS\fP. .PP Virtualiseringen som erbjuds av cgroup\-namnrymder tjänar ett antal syften: .IP \[bu] 3 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. .IP \[bu] 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 \fI/proc/self/cgroups\fP) 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. .IP \[bu] 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: .RS .IP \[bu] 3 Vi har en cgroup\-katalog, \fI/cg/1\fP, som ägs av användar\-ID 9000. .IP \[bu] Vi har en process, \fIX\fP, som också ägs av användar\-ID 9000, som har namnrymden under cgroup \fI/cg/1/2\fP (d.v.s., \fIX\fP placerades i en ny cgroup\-namnrymd via \fBclone\fP(2) eller \fBunshare\fP(2) med flagga \fBCLONE_NEWCGROUP\fP. .RE .IP I avsaknad av cgroup\-namnrymder skulle, eftersom cgroup\-katalogen \fI/cg/1\fP ägs (och är skrivbar) av AID 9000 och processen \fIX\fP också ägs av användar\-ID 9000, process \fIX\fP kunna ändra innehållet i cgroup\-filer (d.v.s., ändra cgroup\-inställningar) inte bara i \fI/cg/1/2\fP utan även i anfader\-cgroup\-katalogen \fI/cg/1\fP. Att namnrymda processen \fIX\fP under cgroup\-katalogen \fI/cg/1/2\fP, i kombination med lämpliga monteringsoperationer av cgroup\-filsystemet (som visas ovan), förhindrar den från att ändra filer i \fI/cg/1\fP, 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 \fIX\fP från att fly från begränsningarna som läggs på av anfader\-cgroup:er. .SH "SE ÄVEN" \fBunshare\fP(1), \fBclone\fP(2), \fBsetns\fP(2), \fBunshare\fP(2), \fBproc\fP(5), \fBcgroups\fP(7), \fBcredentials\fP(7), \fBnamespaces\fP(7), \fBuser_namespaces\fP(7) .PP .SH ÖVERSÄTTNING Den svenska översättningen av denna manualsida skapades av Göran Uddeborg . .PP Denna översättning är fri dokumentation; läs .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE eller senare för upphovsrättsvillkor. Vi tar INGET ANSVAR. .PP Om du hittar fel i översättningen av denna manualsida, skicka ett mail till .MT Tp-sv@listor.tp-sv.se .ME .