Provided by: manpages-sv_4.21.0-2_all bug

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

       Namnrymder är en Linux-specifik funktion.

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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  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⟩.