Man page - namespaces(7)

Packages contains this manual

Available languages:

en fr pl sv ja ru de

Manual

namespaces

NAMN
BESKRIVNING
Namnrymdstyper
Namnrymds-API:erna
Katalogen /proc/pid/ns/
Katalogen /proc/sys/user
Namnrymders livslÀngd
EXEMPEL
SE ÄVEN
ÖVERSÄTTNING

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.

Image grohtml-4182571-1.png

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_nsfs (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_nsfs (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 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 .