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

NAMN

       namespaces — översikt över Linux namnrymder

BESKRIVNING

       En  namnrymd  slår  in  en global systemresurs i en abstraktion som gör att det ser ut för
       processer inuti namnrymden som att de har  sin  egen  isolerade  instans  av  den  globala
       resursen. Ändringar av den globala resursen är synlig för andra processer som är medlemmar
       i namnrymden, men är osynliga för andra processer. En  användning  av  namnrymder  är  att
       implementera behållare.

       Denna  sida  ger  pekare  till  information  om  de  olika  namnrymdstyperna, beskriver de
       tillhörande filerna i /proc och sammanfattar API:erna för att arbeta med namnrymder.

   Namnrymdstyper
       Följande tabell visar namnrymdstyperna som är tillgängliga i Linux. Den andra  kolumnen  i
       tabellen  visar  flaggvärdet  som används för att ange namnrymdstypen i de olika API:erna.
       Den tredje kolumnen identifierar manualsidan som ger detaljer om namnrymdstypen. Den sista
       kolumnen är en sammanfattning av de resurser som isoleras av namnrymdstypen.

       Namnrymd  Flagga          Sida                  Isolerar
       Cgroup    CLONE_NEWCGROUP cgroup_namespaces(7)  Cgroup-rotkatalog
       IPC       CLONE_NEWIPC    ipc_namespaces(7)     System V IPC, POSIX
                                                       meddelandeköer
       Nätverk   CLONE_NEWNET    network_namespaces(7) Nätverksenheter,
                                                       stackar,    portar,
                                                       etc.
       Montering CLONE_NEWNS     mount_namespaces(7)   Monteringspunkter
       PID       CLONE_NEWPID    pid_namespaces(7)     Process-ID:n
       Tid       CLONE_NEWTIME   time_namespaces(7)    Uppstarts-      och
                                                       monotona klockor
       Användare CLONE_NEWUSER   user_namespaces(7)    Användar-       och
                                                       grupp-ID:n
       UTS       CLONE_NEWUTS    uts_namespaces(7)     Värdnamn        och
                                                       NIS-domännamn

   Namnrymds-API:erna
       Förutom  olika  filer  i  /proc  som beskrivs nedan inkluderar namnrymds-API:erna följande
       systemanrop:

       clone(2)
              Systemanropet clone(2) skapar en ny process. Om  argumentet  flaggor  till  anropet
              anger  en  eller  flera  av  flaggorna  CLONE_NEW*  som  listas ovan, då skapas nya
              namnrymder för varje flagga,  och  barnprocessen  görs  till  en  medlem  av  dessa
              namnrymder.  (Detta  systemanrop  implementerar  även  ett  antal funktioner som är
              orelaterade till namnrymder.)

       setns(2)
              Systemanropet setns(2)  låter  den  anropande  processen  gå  med  i  en  befintlig
              namnrymd.  Namnrymden att gå med i anges via en filbeskrivare som refererar till en
              av filerna /proc/pid/ns som beskrivs nedan.

       unshare(2)
              Systemanropet unshare(2) förflyttar den anropande processen till en ny namnrymd. Om
              argumentet  flaggor  till  anropet anger en eller flera av flaggorna CLONE_NEW* som
              listas ovan, då skapas nya namnrymder för varje flagga, och den anropande processen
              görs  till en medlem av dessa namnrymder. (Detta systemanrop implementerar även ett
              antal funktioner som är orelaterade till namnrymder.)

       ioctl(2)
              Olika  åtgärder  med  ioctl(2)  kan  användas  för  att  upptäcka  information   om
              namnrymder. Dessa åtgärder beskrivs i ioctl_ns(2).

       Att  skapa  nya  namnrymder  med  clone(2) och unshare(2) kräver i de flesta fall förmågan
       CAP_SYS_ADMIN eftersom skaparen, i den  nya  namnrymden,  kommer  ha  förmågan  att  ändra
       globala  resurser  som  är  synliga  för  andra  processer  som  skapas  i eller går med i
       namnrymden. Användarnamnrymder är undantaget: från Linux 3.8 krävs  inga  privilegier  för
       att skapa en användarnamnrymd.

   Katalogen /proc/pid/ns/
       Varje  process har en underkatalog /proc/pid/ns/ som innehåller en post för varje namnrymd
       som stödjer att hanteras av setns(2):

           $ ls -l /proc/$$/ns | awk '{print $1, $9, $10, $11}'
           total 0
           lrwxrwxrwx. cgroup -> cgroup:[4026531835]
           lrwxrwxrwx. ipc -> ipc:[4026531839]
           lrwxrwxrwx. mnt -> mnt:[4026531840]
           lrwxrwxrwx. net -> net:[4026531969]
           lrwxrwxrwx. pid -> pid:[4026531836]
           lrwxrwxrwx. pid_for_children -> pid:[4026531834]
           lrwxrwxrwx. time -> time:[4026531834]
           lrwxrwxrwx. time_for_children -> time:[4026531834]
           lrwxrwxrwx. user -> user:[4026531837]
           lrwxrwxrwx. uts -> uts:[4026531838]

       Bindmontering (se mount(2)) av en av filerna i  denna  katalog  till  någon  annanstans  i
       filsystemet  håller den motsvarande namnrymden för processen som anges av pid vid liv även
       om alla processer som för närvarande finns i namnrymden avslutar.

       Att öppna en av filerna i denna katalog (eller en fil som är bindmonterad till en av dessa
       filer) returnerar ett filhandtag för den motsvarande namnrymden för processen som anges av
       pid. Så länge denna filbeskrivare är fortsatt öppen kommer namnrymden fortsätta  vara  vid
       liv,  även  om  alla  processer  i  namnrymden  avslutar.  Filbeskrivaren kan skickas till
       setns(2).

       I Linux 3.7 och tidigare var dessa filer synliga som hårda länkar. Från Linux 3.8 dyker de
       upp  som symboliska länkar. Om två processer finns i samma namnrymd, då kommer enhets-ID:n
       och inodsnummer för deras symboliska länkar /proc/pid/ns/xxx vara desamma; ett program kan
       kontrollera  detta  med  fälten  stat.st_dev  och  stat.st_ino  som returneras av stat(2).
       Innehållet för denna symboliska länk  är  en  sträng  som  innehåller  namnrymdstypen  och
       inodsnumret som i följande exempel:

           $ readlink /proc/$$/ns/uts
           uts:[4026531838]

       De symboliska länkarna i denna underkatalog är enligt följande:

       /proc/pid/ns/cgroup (från Linux 4.6)
              Denna fil är ett handtag till cgroup-namnrymden för processen.

       /proc/pid/ns/ipc (från Linux 3.0)
              Denna fil är ett handtag till IPC-namnrymden för processen.

       /proc/pid/ns/mnt (från Linux 3.8)
              Denna fil är ett handtag till monteringsnamnrymden för processen.

       /proc/pid/ns/net (från Linux 3.0)
              Denna fil är ett handtag till nätverksnamnrymden för processen.

       /proc/pid/ns/pid (från Linux 3.8)
              Denna  fil  är  ett  handtag  till  PID-namnrymden  för processen. Detta handtag är
              permanent under livstiden för processen (d.v.s., en process PID-namnrymdsmedlemskap
              ändras aldrig).

       /proc/pid/ns/pid_for_children (från Linux 4.12)
              Denna  fil är ett handtag till PID-namnrymden för barnprocesser som skapas av denna
              process. Detta kan ändras som ett resultat av anrop av unshare(2) och setns(2)  (se
              pid_namespaces(7)),  så  filen  kan  skilja  från  /proc/pid/ns/pid. Den symboliska
              länken får ett värde endast efter att den första barnprocessen skapas i namnrymden.
              (Före dess kommer readlink(2) av den symboliska länken returnera en tom buffert.)

       /proc/pid/ns/time (från Linux 5.6)
              Denna fil är ett handtag till tidsnamnrymden för processen.

       /proc/pid/ns/time_for_children (från Linux 5.6)
              Denna  fil är ett handtag till tidsnamnrymden för barnprocesser som skapas av denna
              process. Detta kan ändras som ett resultat av anrop av unshare(2) och setns(2)  (se
              time_namespaces(7)), så filen kan skilja från /proc/pid/ns/time.

       /proc/pid/ns/user (från Linux 3.8)
              Denna fil är ett handtag till användarnamnrymden för processen.

       /proc/pid/ns/uts (från Linux 3.0)
              Denna fil är ett handtag till UTS-namnrymden för processen.

       Rättigheter  att  dereferera  eller läsa (readlink(2)) dessa symboliska länkar styrs av en
       kontroll av åtkomstläget ptrace PTRACE_MODE_READ_FSCREDS; se ptrace(2).

   Katalogen /proc/sys/user
       Filerna i katalogen /proc/sys/user (som finns sedan Linux 4.9) visar  gränser  på  antalet
       namnrymder av olika typer som kan skapas. Filerna är som följer:

       max_cgroup_namespaces
              Värdet  i  denna fil definierar en gräns per användare på antalet cgroup-namnrymder
              som kan skapas i användarnamnrymden.

       max_ipc_namespaces
              Värdet i denna fil definierar en gräns per användare på antalet ipc-namnrymder  som
              kan skapas i användarnamnrymden.

       max_mnt_namespaces
              Värdet   i   denna   fil   definierar   en   gräns   per   användare   på   antalet
              monteringsnamnrymder som kan skapas i användarnamnrymden.

       max_net_namespaces
              Värdet i denna fil definierar en gräns per användare på antalet  nätverksnamnrymder
              som kan skapas i användarnamnrymden.

       max_pid_namespaces
              Värdet  i denna fil definierar en gräns per användare på antalet PID-namnrymder som
              kan skapas i användarnamnrymden.

       max_time_namespaces (från Linux 5.7)
              Värdet i denna fil definierar en gräns per användare på antalet tidsnamnrymder  som
              kan skapas i användarnamnrymden.

       max_user_namespaces
              Värdet  i denna fil definierar en gräns per användare på antalet användarnamnrymder
              som kan skapas i användarnamnrymden.

       max_uts_namespaces
              Värdet i denna fil definierar en gräns per användare på antalet uts-namnrymder  som
              kan skapas i användarnamnrymden.

       Observera följande detaljer om dessa filer:

       •  Värdena i dessa filer kan ändras av privilegierade processer.

       •  Värdena som visas av dessa filer är gränserna för användarnamnrymden i vilken processen
          som öppnar den finns.

       •  Gränserna är  per  användare.  Varje  användare  i  samma  användarnamnrymd  kan  skapa
          namnrymder upp till den definierade gränsen.

       •  Gränserna gäller alla användare, inklusive AID 0.

       •  Dessa  gränser  gäller  utöver  andra  gränser  per  användare  (såsom  de för PID- och
          användarnamnrymder) som kan upprätthållas.

       •  När man når dessa grånser misslyckas clone(2) och unshare(2) med felet ENOSPC.

       •  För den initiala användarnamnrymden är standardvärdet i  var  och  en  av  dessa  filer
          hälften  av  gränsen på antalet trådar som kan skapas (/proc/sys/kernel/threads-max). I
          alla nedstigande användarnamnrymder är standardvärdet i varje fil MAXINT.

       •  När en namnrymd skapas medräknas objektet även mot föräldranamnrymder. Mer precist:

          •  Varje användarnamnrymd har ett skapar-AID.

          •  När  en  namnrymd  skapas  räknas  den  mot   skapar-AID:n   i   var   och   en   av
             föräldranamnrymderna,  och  kärnan  säkerställer  att motsvarande namnrymdsgräns för
             skapar-AID:t i föräldranamnrymden inte överskrids.

          •  Ovannämnda punkt säkerställer att skapandet  av  en  ny  användarnamnrymd  inte  kan
             användas   som   ett   sätt   att  undvika  gränserna  som  gäller  i  den  aktuella
             användarnamnrymden.

   Namnrymders livslängd
       I avsaknad av några andra  faktorer  rivs  en  namnrymd  automatiskt  ner  när  den  sista
       processen  i  namnrymden  avslutar eller lämnar namnrymden. Dock finns det ett antal andra
       faktorer som kan fästa en namnrymd så att den finns  kvar  även  om  den  inte  har  några
       medlemsprocesser. Dessa faktorer inkluderar de följande:

       •  En   öppen   filbeskrivare   eller   bindmontering  finns  för  den  motsvarande  filen
          /proc/pid/ns/*.

       •  Namnrymden  är  hierarkisk  (d.v.s.,  en  PID-  eller  användarnamnrymd)  och  har   en
          barnnamnrymd.

       •  Det är en användarnamnrymd som äger en eller flera icke-användar-namnrymder.

       •  Det  är  en PID-namnrymd, och det finns en process som refererar till namnrymden via en
          symbolisk länk /proc/pid/ns/pid_for_children.

       •  Det är en tidsnamnrymd, och det finns en process som refererar till namnrymden  via  en
          symbolisk länk /proc/pid/ns/time_for_children.

       •  Det  är  en  IPC-namnrymd,  och  en  motsvarande  montering av ett mqueue-filsystem (se
          mq_overview(7)) refererar till denna namnrymd.

       •  Det är en PID-namnrymd, och en motsvarande montering av ett proc(5)-filsystem refererar
          till denna namnrymd.

EXEMPEL

       Se clone(2) och user_namespaces(7).

SE ÄVEN

       nsenter(1), readlink(1), unshare(1), clone(2), ioctl_ns(2), setns(2), unshare(2), proc(5),
       capabilities(7),  cgroup_namespaces(7),  cgroups(7),  credentials(7),   ipc_namespaces(7),
       network_namespaces(7),  pid_namespaces(7), user_namespaces(7), uts_namespaces(7), lsns(8),
       switch_root(8)

Ö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⟩.