Man page - mount_namespaces(7)

Packages contains this manual

Available languages:

en fr sv de

Manual

mount_namespaces

NAMN
BESKRIVNING
DELADE UNDERTRÄD
Exempel pÄ MS_SHARED och MS_PRIVATE
Exempel pÄ MS_SLAVE
Exempel pÄ MS_UNBINDABLE
SpridningstypsövergÄngar
Bindsemantik (MS_BIND)
Flyttsemantik (MS_MOVE)
Monteringssemantik
Avmonteringssemantik
Taggen propagate_from i /proc/ pid /mountinfo
STANDARDER
HISTORIK
NOTERINGAR
BegrÀnsningar för monteringsnamnrymder
EXEMPEL
SE ÄVEN
ÖVERSÄTTNING

NAMN

mount_namespaces — översikt över Linux monteringsnamnrymder

BESKRIVNING

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

Monteringsnamnrymder ger isolering av listan över monteringar som ses av processerna i varje namnrymdsinstans. AlltsÄ, processerna i var och en av instanserna av monteringsnamnrymder kommer se distinkta enkatalogershierarkier.

Vyerna som ges av filerna /proc/ pid /mounts , /proc/ pid /mountinfo och /proc/ pid /mountstats (som alla beskrivs i proc (5)) motsvarar monteringsnamnrymden i vilken processen med PID pid bor. (Alla processerna som bor i samma monteringsnamnrymd kommer se samma vy i dessa filer.)

En ny monteringsnamnrymd skapas genom att anvÀnda antingen clone (2) eller unshare (2) med flaggan CLONE_NEWNS . NÀr en ny monteringsnamnrymd skapas initieras dess monteringslista enligt följande:

‱

Om namnrymden skapas med clone (2) Àr monteringslistan för barnets namnrymd en kopia av monteringslistan i förÀldraprocessens monteringsnamnrymd.

‱

Om namnrymden skapas med unshare (2) Àr monteringslistan för den nya namnrymden en kopia av monteringslistan i anroparens tidigare monteringsnamnrymd.

Senare Àndringar av monteringslistan ( mount (2) och umount (2)) i endera monteringsnamnrymden kommer inte (som standard) att pÄverka monteringslistan som ses i den andra namnrymden (men se följande diskussion om delade undertrÀd).

DELADE UNDERTRÄD

Efter implementationen av monteringsnamnrymder var klar visade erfarenheterna att isoleringen som de gav var, i nÄgra fall, för stor. Till exempel, för att göra en nyss laddad optisk disk tillgÀnglig i alla monteringsnamnrymder krÀvdes en monteringsÄtgÀrd i varje namnrymd. För detta anvÀndningsfall, och andra, introducerades funktionen med delade undertrÀd i Linux 2.6.15. Denna funktion tillÄter automatisk, kontrollerad spridning av hÀndelserna mount (2) och umount (2) mellan namnrymder (eller, mer exakt, mellan monteringar som Àr medlemmar av en partnergrupp som sprider hÀndelser till varandra).

Varje montering markeras (via mount (2)) som att ha en av följande spridningstyper :
MS_SHARED

Denna montering delar hÀndelser med medlemmar av en partnergrupp. HÀndelserna mount (2) och umount (2) omedelbart under denna montering kommer spridas till andra monteringar som Àr medlemmar av partnergruppen. Spridning betyder hÀr att samma mount (2) eller umount (2) automatiskt kommer ske under alla de andra monteringarna i partnergruppen. OmvÀnt kommer hÀndelserna mount (2) och umount (2) som sker under partnermonteringar att spridas till denna montering.

MS_PRIVATE

Denna montering Àr privat; den har inte nÄgon partnergrupp. HÀndelserna mount (2) och umount (2) sprids inte in i eller ut frÄn denna montering.

MS_SLAVE

HÀndelserna mount (2) och umount (2) sprids in i denna montering frÄn en delad (huvud)partnergrupp. HÀndelserna mount (2) och umount (2) under denna montering sprids inte till nÄgon partner.

Observera att en montering kan vara slav till en annan partnergrupp och pÄ samma gÄng dela hÀndelserna mount (2) och umount (2) med en partnergrupp som den Àr medlem i. (Mer exakt, en partnergrupp kan vara slav till en annan partnergrupp.)

MS_UNBINDABLE

Detta Àr som en privat montering, och dessutom kan denna montering inte bindmonteras. Försök att bindmontera denna montering ( mount (2) med flaggan MS_BIND ) kommer att misslyckas.

NÀr en rekursiv bindningsmontering ( mount (2) med flaggorna MS_BIND och MS_REC ) utförs pÄ ett katalogundertrÀd ansas automatiskt eventuella bindningsmonteringar inuti undertrÀdet (d.v.s., replikeras inte) nÀr det undertrÀdet replikeras för att skapa ett mÄlundertrÀd.

För en diskussion om spridningstypen tilldelad till en ny montering, se NOTERINGAR.

Spridningstypen Àr en instÀllning per monteringspunkt; nÄgra monteringar kan markeras som delade (med varje delad montering en medlem av en distinkt partnergrupp), medan andra Àr privata (eller slavar eller obindbara).

Observera att en monterings spridningstyp avgör huruvida mount (2) och umount (2) av monteringar omedelbart under monteringen sprids. AlltsÄ, spridningstypen pÄverkar inte spridningen av hÀndelser för barnbarn och mer avlÀgsna avkommemonteringar. Vad som hÀnder om monteringen sjÀlv avmonteras avgörs av spridningstypen som gÀller för förÀldern till monteringen.

Medlemmar lÀggs till i en partnergrupp nÀr en montering markeras som delad och antingen:

(a)

monteringen replikeras nÀr en ny monteringsnamnrymd skapas; eller

(b)

en ny bindmontering skapas frÄn monteringen.

I bÄda dessa fall gÄr den nya monteringen med i partnergruppen som den befintliga monteringen Àr medlem i.

En ny partnergrupp skapas ocksÄ nÀr en barnmontering skapas under en befintlig montering som Àr markerad som delad. I detta fall markeras Àven barnmonteringen som delad och den resulterande partnergruppen bestÄr av alla monteringar som replikeras under partner till förÀldramonteringarna.

En montering upphör att vara medlem i en partnergrupp nÀr antingen monteringen uttryckligen avmonteras, eller nÀr monteringen implicit avmonteras för att en monteringsnamnrymd tas bort (för att den inte har nÄgra fler medlemsprocesser).

Spridningstypen för monteringen i en monteringsnamnrymd kan upptĂ€ckas via de ”valfria fĂ€lten” som visas i /proc/ pid /mountinfo . (Se proc (5) för detaljer om denna fil.) Följande taggar kan förekomma i de valfria fĂ€lten för en post i den filen:
shared:X

Denna montering delas i partnergruppen X . Varje partnergrupp har ett unikt ID som automatiskt genereras av kÀrnan, och alla monteringar i samma partnergrupp kommer visa samma ID. (Dessa ID:n tilldelas med början frÄn vÀrdet 1, och kan ÄteranvÀndas nÀr en partnergrupp upphör att ha nÄgra medlemmar.)

master:X

Denna montering Àr en slav till den delade partnergruppen X .

propagate_from:X (frÄn Linux 2.6.26)

Denna montering Àr en slav och tar emot spridningar frÄn den delade partnergruppen X . Denna tagg kommer alltid förekomma tillsammans med en tagg master:X . HÀr Àr X den nÀrmaste dominanta partnergruppen under processens rotkatalog. Om X Àr det omedelbara huvudet av monteringen, eller om det inte finns nÄgon dominant partnergrupp under samma rot, dÄ finns bara fÀltet master:X och inte fÀltet propagate_from:X . För fler detaljer, se nedan.

unbindable

Detta Àr en obindbar montering.

Om ingen av ovanstÄende flaggor finns, dÄ Àr detta en privat montering.

Exempel pÄ MS_SHARED och MS_PRIVATE

Anta att vi i en terminal i den initiala monteringsnamnrymden markerar en montering som delad och en annan som privat, och sedan betraktar monteringarna i /proc/self/mountinfo :

sh1# mount --make-shared /mntD
sh1# mount --make-private /mntP
sh1# cat /proc/self/mountinfo | grep '/mnt' | sed 's/ - .*//'
77 61 8:17 / /mntD rw,relatime shared:1
83 61 8:15 / /mntP rw,relatime

Av utdata frÄn /proc/self/mountinfo ser vi att /mntD Àr en delad montering i partnergrupp 1, och att /mntP inte har nÄgra valfria taggar, vilket indikerar att det Àr en privat montering. De första tvÄ fÀlten i varje post i denna fil Àr det unika ID:t för denna montering, och monterings-ID för förÀldramonteringen. Vi kan vidare inspektera denna fil för att se att förÀldramonteringen till /mntD och /mntP Àr rotkatalogen, / , vilken Àr monterad privat:

sh1# cat /proc/self/mountinfo | awk '$1 == 61' | sed 's/ - .*//'
61 0 8:2 / / rw,relatime

I en andra terminal skapar vi en ny monteringsnamnrymd dÀr vi kör ett andra skal och inspekterar monteringarna:

$ PS1='sh2# ' sudo unshare -m --propagation unchanged sh
sh2# cat /proc/self/mountinfo | grep '/mnt' | sed 's/ - .*//'
222 145 8:17 / /mntD rw,relatime shared:1
225 145 8:15 / /mntP rw,relatime

Den nya monteringsnamnrymden fick en kopia av den initiala monteringsnamnrymdens monteringar. Dessa nya monteringar behÄller samma spridningstyper, men har unika monterings-ID:n. (Flaggan --propagation unchanged förhindrar att unshare (1) markerar alla monteringar som privata nÀr den skapar en ny monteringsnamnrymd, vilket den gör som standard.)

I den andra terminalen skapar vi sedan undermonteringar under vardera av /mntD och /mntP och inspekterar uppsÀttningen:

sh2# mkdir /mntD/a
sh2# mount /dev/sdb6 /mntD/a
sh2# mkdir /mntP/b
sh2# mount /dev/sdb7 /mntP/b
sh2# cat /proc/self/mountinfo | grep '/mnt' | sed 's/ - .*//'
222 145 8:17 / /mntD rw,relatime shared:1
225 145 8:15 / /mntP rw,relatime
178 222 8:22 / /mntD/a rw,relatime shared:2
230 225 8:23 / /mntP/b rw,relatime

FrÄn ovanstÄende kan man se att /mntD/a skapades som delad (Àrvde denna instÀllning frÄn sin förÀldramontering) och /mntP/b skapades som en privat montering.

Om vi ÄtergÄr till den första terminalen och inspekterar uppsÀttningen ser vi att den nya monteringen som skapades under den delade monteringen /mntD spreds till sin partnermontering (i den initiala monteringsnamnrymden), men den nya monteringen som skapades under den privata monteringen /mntP spreds inte:

sh1# cat /proc/self/mountinfo | grep '/mnt' | sed 's/ - .*//'
77 61 8:17 / /mntD rw,relatime shared:1
83 61 8:15 / /mntP rw,relatime
179 77 8:22 / /mntD/a rw,relatime shared:2

Exempel pÄ MS_SLAVE

Att skapa en montering som slav lÄter den ta emot hÀndelser mount (2) och umount (2) som sprids frÄn den delade huvudpartnergruppen, samtidigt som den förhindras frÄn att sprida hÀndelser till huvudet. Detta Àr anvÀndbart om vi vill (exempelvis) ta emot en monteringshÀndelse nÀr en optisk skiva monteras i den delade huvudpartnergruppen (i en annan monteringsnamnrymd), men vill förhindra hÀndelser mount (2) och umount (2) under slavmonteringen frÄn att ha sidoeffekter i andra namnrymder.

Vi kan demonstrera effekten av slavförhÄllandet genom att först markera tvÄ monteringar som delade i den initiala monteringsnamnrymden:

sh1# mount --make-shared /mntX
sh1# mount --make-shared /mntY
sh1# cat /proc/self/mountinfo | grep '/mnt' | sed 's/ - .*//'
132 83 8:23 / /mntX rw,relatime shared:1
133 83 8:22 / /mntY rw,relatime shared:2

I en andra terminal skapar vi en ny monteringsnamnrymd och inspekterar monteringarna:

sh2# unshare -m --propagation unchanged sh
sh2# cat /proc/self/mountinfo | grep '/mnt' | sed 's/ - .*//'
168 167 8:23 / /mntX rw,relatime shared:1
169 167 8:22 / /mntY rw,relatime shared:2

I den nya monteringsnamnrymden markerar vi sedan en av monteringarna som en slav:

sh2# mount --make-slave /mntY
sh2# cat /proc/self/mountinfo | grep '/mnt' | sed 's/ - .*//'
168 167 8:23 / /mntX rw,relatime shared:1
169 167 8:22 / /mntY rw,relatime master:2

FrÄn ovanstÄende utdata ser vi att /mntY nu Àr en slavmontering som tar emot spridningshÀndelser frÄn den delade partnergruppen med ID:t 2.

Fortfarande i den nya namnrymden skapar vi undermonteringar under var och en av /mntX och /mntY :

sh2# mkdir /mntX/a
sh2# mount /dev/sda3 /mntX/a
sh2# mkdir /mntY/b
sh2# mount /dev/sda5 /mntY/b

NÀr vi granskar tillstÄnden hos monteringarna i den nya monteringsnamnrymden ser vi att /mntX/a skapades som en ny delad montering (Àrvde instÀllningen "shared" frÄn sin förÀldramontering) och /mntY/b skapades som en privat montering:

sh2# cat /proc/self/mountinfo | grep '/mnt' | sed 's/ - .*//'
168 167 8:23 / /mntX rw,relatime shared:1
169 167 8:22 / /mntY rw,relatime master:2
173 168 8:3 / /mntX/a rw,relatime shared:3
175 169 8:5 / /mntY/b rw,relatime

Tillbaka i den första terminalen (i den initiala monteringsnamnrymden) ser vi att monteringen /mntX/a spreds till partnern (den delade /mntX ), men att monteringen /mntY/b inte spreds:

sh1# cat /proc/self/mountinfo | grep '/mnt' | sed 's/ - .*//'
132 83 8:23 / /mntX rw,relatime shared:1
133 83 8:22 / /mntY rw,relatime shared:2
174 132 8:3 / /mntX/a rw,relatime shared:3

Nu skapar vi en ny montering under /mntY i det första skalet:

sh1# mkdir /mntY/c
sh1# mount /dev/sda1 /mntY/c
sh1# cat /proc/self/mountinfo | grep '/mnt' | sed 's/ - .*//'
132 83 8:23 / /mntX rw,relatime shared:1
133 83 8:22 / /mntY rw,relatime shared:2
174 132 8:3 / /mntX/a rw,relatime shared:3
178 133 8:1 / /mntY/c rw,relatime shared:4

NÀr vi undersöker monteringarna i den andra monteringsnamnrymden ser vi att i detta fall har den nya monteringen spritts till slavmonteringen, och att monteringen sjÀlv Àr en slavmontering (till partnergrupp 4):

sh2# cat /proc/self/mountinfo | grep '/mnt' | sed 's/ - .*//'
168 167 8:23 / /mntX rw,relatime shared:1
169 167 8:22 / /mntY rw,relatime master:2
173 168 8:3 / /mntX/a rw,relatime shared:3
175 169 8:5 / /mntY/b rw,relatime
179 169 8:1 / /mntY/c rw,relatime master:4

Exempel pÄ MS_UNBINDABLE

Ett av de primĂ€ra syftena med obindbara monteringar Ă€r att undvika problemet med en ”monteringsexplosion” nĂ€r man upprepat utför bindmonteringar av ett undertrĂ€d pĂ„ en högre nivĂ„ till en lĂ€gre nivĂ„s montering. Problemet illustreras av följande skalsession.

Anta att vi har ett system med följande monteringar:

# mount | awk '{print $1, $2, $3}'
/dev/sda1 on /
/dev/sdb6 on /mntX
/dev/sdb7 on /mntY

Anta vidare att vi önskar bindningsmontera rotkatalogen rekursivt under flera anvÀndares hemkataloger. Vi gör detta för den första anvÀndaren och granskar monteringarna:

# mount --rbind / /home/cecilia/
# mount | awk '{print $1, $2, $3}'
/dev/sda1 on /
/dev/sdb6 on /mntX
/dev/sdb7 on /mntY
/dev/sda1 on /home/cecilia
/dev/sdb6 on /home/cecilia/mntX
/dev/sdb7 on /home/cecilia/mntY

NÀr vi upprepar denna ÄtgÀrd för den andra anvÀndaren börjar vi se explosionsproblemet:

# mount --rbind / /home/henry
# mount | awk '{print $1, $2, $3}'
/dev/sda1 on /
/dev/sdb6 on /mntX
/dev/sdb7 on /mntY
/dev/sda1 on /home/cecilia
/dev/sdb6 on /home/cecilia/mntX
/dev/sdb7 on /home/cecilia/mntY
/dev/sda1 on /home/henry
/dev/sdb6 on /home/henry/mntX
/dev/sdb7 on /home/henry/mntY
/dev/sda1 on /home/henry/home/cecilia
/dev/sdb6 on /home/henry/home/cecilia/mntX
/dev/sdb7 on /home/henry/home/cecilia/mntY

Under /home/henry har vi inte bara rekursivt lagt till monteringarna /mntX och /mntY , utan Àven de rekursiva monteringarna av dessa kataloger under /home/cecilia som skapades i förestÄende steg. Vid upprepning av steget för en tredje anvÀndare blir det uppenbart att explosionen Àr exponentiell till sin natur:

# mount --rbind / /home/otto
# mount | awk '{print $1, $2, $3}'
/dev/sda1 on /
/dev/sdb6 on /mntX
/dev/sdb7 on /mntY
/dev/sda1 on /home/cecilia
/dev/sdb6 on /home/cecilia/mntX
/dev/sdb7 on /home/cecilia/mntY
/dev/sda1 on /home/henry
/dev/sdb6 on /home/henry/mntX
/dev/sdb7 on /home/henry/mntY
/dev/sda1 on /home/henry/home/cecilia
/dev/sdb6 on /home/henry/home/cecilia/mntX
/dev/sdb7 on /home/henry/home/cecilia/mntY
/dev/sda1 on /home/otto
/dev/sdb6 on /home/otto/mntX
/dev/sdb7 on /home/otto/mntY
/dev/sda1 on /home/otto/home/cecilia
/dev/sdb6 on /home/otto/home/cecilia/mntX
/dev/sdb7 on /home/otto/home/cecilia/mntY
/dev/sda1 on /home/otto/home/henry
/dev/sdb6 on /home/otto/home/henry/mntX
/dev/sdb7 on /home/otto/home/henry/mntY
/dev/sda1 on /home/otto/home/henry/home/cecilia
/dev/sdb6 on /home/otto/home/henry/home/cecilia/mntX
/dev/sdb7 on /home/otto/home/henry/home/cecilia/mntY

Problemet med monteringexplosionen i ovanstÄende scenario kan lösas genom att göra varje ny montering obindbar. Effekten av att göra detta Àr att rekursiva monteringar av rotkatalogen inte kommer replikera de obindbara monteringarna. Vi gör en sÄdan montering för den första anvÀndaren:

# mount --rbind --make-unbindable / /home/cecilia

Före vi gÄr vidare visar vi att obindbara monteringar verkligen Àr obindbara:

# mkdir /mntZ
# mount --bind /home/cecilia /mntZ
mount: /mntZ: fel filsystemstyp, felaktig flagga,
felaktigt superblock pÄ /home/cecilia,
teckentabell eller hjÀlpprogram saknas, eller annat fel.
dmesg(1) may have more information after failed mount system call.

Nu skapar vi obindbara rekursiva bindmonteringar för de andra tvÄ anvÀndarna:

# mount --rbind --make-unbindable / /home/henry
# mount --rbind --make-unbindable / /home/otto

Vid granskning av listan av monteringar ser vi att det inte har varit nÄgon explosion av monteringar eftersom de obindbara monteringarna inte replikerades under varje anvÀndares katalog:

# mount | awk '{print $1, $2, $3}'
/dev/sda1 on /
/dev/sdb6 on /mntX
/dev/sdb7 on /mntY
/dev/sda1 on /home/cecilia
/dev/sdb6 on /home/cecilia/mntX
/dev/sdb7 on /home/cecilia/mntY
/dev/sda1 on /home/henry
/dev/sdb6 on /home/henry/mntX
/dev/sdb7 on /home/henry/mntY
/dev/sda1 on /home/otto
/dev/sdb6 on /home/otto/mntX
/dev/sdb7 on /home/otto/mntY

SpridningstypsövergÄngar

Följande tabell visar effekten tillĂ€mpning av en ny spridningstyp (d.v.s., mount --make-xxxx ) har pĂ„ den befintliga spridningstypen hos en montering. Raderna motsvarar de befintliga spridningstyperna, och kolumnerna Ă€r den nya spridningsinstĂ€llningen. Av utrymmesskĂ€l förkortas ”privat” som ”priv” och ”obindbar” som ”obind”.

Image grohtml-4182544-1.png

Observera följande detaljer om tabellen:

[1]

Om en delad montering Àr den enda monteringen i sin partnergrupp görs den automatiskt privat om den görs till en slav.

[2]

Att göra en odelad montering till slav har ingen effekt pÄ monteringen.

Bindsemantik (MS_BIND)

Anta att följande kommando utförs:

mount --bind A/a B/b

HÀr Àr A kÀllmonteringen, B Àr mÄlmonteringen, a Àr en underkatalogsökvÀg under monteringspunkten A och b Àr en underkatalogsökvÀg under monteringspunkten B . Spridningstypen för den resulterande monteringen, B/b , beror pÄ spridningstyperna för monteringarna A och B , och sammanfattas i följande tabell.

Image grohtml-4182544-2.png

Observera att en rekursiv bindning av ett undertrÀd följer samma semantik som vid en bindningsÄtgÀrd pÄ varje montering i undertrÀdet. (Obindbara monteringar ansas automatiskt frÄn mÄlmonteringspunkten.)

För vidare detaljer, se Documentation/filesystems/sharedsubtree.rst i kÀrnans kÀlltrÀd.

Flyttsemantik (MS_MOVE)

Anta att följande kommando utförs:

mount --move A B/b

HÀr Àr A kÀllmonteringen, B Àr mÄlmonteringen och b Àr en underkatalogsökvÀg under monteringspunkten B . Spridningstypen för den resulterande monteringen, B/b , beror pÄ spridningstyperna för monteringarna A och B , och sammanfattas i följande tabell.

Image grohtml-4182544-3.png

Observera: att flytta en montering som bor under en delad montering Àr inte tillÄtet.

För vidare detaljer, se Documentation/filesystems/sharedsubtree.rst i kÀrnans kÀlltrÀd.

Monteringssemantik

Anta att vi anvÀnder följande kommando för att skapa en montering:

mount enhet B/b

HÀr Àr B mÄlmonteringen och b Àr en underkatalogsökvÀg under monteringspunkten B . Spridningstypen för den resulterande monteringen, B/b , följer samma regler som för en bindmontering dÀr spridningstypen för kÀllmonteringen alltid anses vara privat.

Avmonteringssemantik

Anta att vi anvÀnder följande kommando för att riva ner en montering:

umount A

HÀr Àr A en montering pÄ B/b , dÀr B Àr förÀldramonteringen och b Àr en underkatalogsökvÀg under monteringspunkten B . Om B Àr delad, dÄ avmonteras alla senast monterade monteringar vid b pÄ monteringar som tar emot spridningar frÄn monteringen B och inte har undermonteringar under sig.

Taggen propagate_from i /proc/ pid /mountinfo

Taggen propagate_from:X visas i de valfria fÀlten av en post i /proc/ pid /mountinfo i fall dÄ en process inte kan se en slavs omedelbara huvud (d.v.s., sökvÀgen för huvudet kan inte nÄs frÄn filsystemets rotkatalog) och dÀrför inte kan avgöra spridningskedjan mellan monteringarna den kan se.

I följande exempel skapar vi först en tvÄlÀnks huvud-slav-kedja mellan monteringarna /mnt , /tmp/etc och /mnt/tmp/etc . Sedan anvÀnds kommandot chroot (1) för att göra monteringspunkten /tmp/etc onÄbar frÄn rotkatalogen, vilket skapar en situation dÀr huvudet för /mnt/tmp/etc inte Àr nÄbart frÄn den (nya) rotkatalogen för processen.

Först bindmonterar vi rotkatalogen pÄ /mnt och sedan bindmonterar vi /proc pÄ /mnt/proc sÄ att efter en senare chroot (1) filsystemet proc (5) fortsÀtter att vara synligt pÄ rÀtt plats i den chroot:ade miljön.

# mkdir -p /mnt/proc
# mount --bind / /mnt
# mount --bind /proc /mnt/proc

DÀrefter ser vi till att monteringen /mnt Àr en delad montering i den nya partnergruppen (utan nÄgon partner):

# mount --make-private /mnt # Isolera frÄn eventuell tidigare partnergrupp
# mount --make-shared /mnt
# cat /proc/self/mountinfo | grep '/mnt' | sed 's/ - .*//'
239 61 8:2 / /mnt ... shared:102
248 239 0:4 / /mnt/proc ... shared:5

DÀrefter bindmonterar vi /mnt/etc pÄ /tmp/etc :

# mkdir -p /tmp/etc
# mount --bind /mnt/etc /tmp/etc
# cat /proc/self/mountinfo | egrep '/mnt|/tmp/' | sed 's/ - .*//'
239 61 8:2 / /mnt ... shared:102
248 239 0:4 / /mnt/proc ... shared:5
267 40 8:2 /etc /tmp/etc ... shared:102

FrÄn början Àr dessa tvÄ monteringar i samma partnergrupp, men sedan gör vi /tmp/etc till en slav till /mnt/etc , och dÀrefter gör vi Àven /tmp/etc delad, sÄ att den kan sprida hÀndelser till nÀsta slav i kedjan:

# mount --make-slave /tmp/etc
# mount --make-shared /tmp/etc
# cat /proc/self/mountinfo | egrep '/mnt|/tmp/' | sed 's/ - .*//'
239 61 8:2 / /mnt ... shared:102
248 239 0:4 / /mnt/proc ... shared:5
267 40 8:2 /etc /tmp/etc ... shared:105 master:102

DĂ€refter bindmonterar vi /tmp/etc pĂ„ /mnt/tmp/etc . Återigen Ă€r de tvĂ„ monteringarna initialt i samma partnergrupp, men vi gör sedan /mnt/tmp/etc till en slav till /tmp/etc :

# mkdir -p /mnt/tmp/etc
# mount --bind /tmp/etc /mnt/tmp/etc
# mount --make-slave /mnt/tmp/etc
# cat /proc/self/mountinfo | egrep '/mnt|/tmp/' | sed 's/ - .*//'
239 61 8:2 / /mnt ... shared:102
248 239 0:4 / /mnt/proc ... shared:5
267 40 8:2 /etc /tmp/etc ... shared:105 master:102
273 239 8:2 /etc /mnt/tmp/etc ... master:105

FrÄn det ovanstÄende ser vi att /mnt Àr huvud till slaven /tmp/etc , vilken i sin tur Àr huvud till slaven /mnt/tmp/etc .

DÀrefter gör vi chroot (1) till katalogen /mnt , vilket medför att monteringen med ID 267 blir onÄbar frÄn den (nya) rotkatalogen:

# chroot /mnt

NÀr vi sedan undersöker tillstÄndet för monteringarna inuti den chroot:ade miljön ser vi följande:

# cat /proc/self/mountinfo | sed 's/ - .*//'
239 61 8:2 / / ... shared:102
248 239 0:4 / /proc ... shared:5
273 239 8:2 /etc /tmp/etc ... master:105 propagate_from:102

Ovan ser vi att monteringen med ID 273 Àr en slav vars huvud Àr partnergrupp 105. Monteringspunkten för det huvudet Àr onÄbar, och dÀrför visas en tagg propagate_from , vilket indikerar att den nÀrmaste dominanta partnergruppen (d.v.s., den nÀrmaste nÄbara monteringen i slavkedjan) Àr partnergruppen med ID 102 (vilket motsvarar monteringspunkten /mnt före chroot (1) gjordes).

STANDARDER

Linux.

HISTORIK

Linux 2.4.19.

NOTERINGAR

Spridningstypen som tilldelas en ny montering beror pÄ spridningstypen hos förÀldramonteringen. Om monteringen har en förÀlder (d.v.s., det Àr en annan monteringspunkt Àn roten) och spridningstypen hos förÀldern Àr MS_SHARED , dÄ Àr spridningstypen för den nya monteringen ocksÄ MS_SHARED . Annars Àr spridningstypen för den nya monteringen MS_PRIVATE .

Oaktat det faktum att standardsspridningstypen för nya monteringar i mÄnga fall Àr MS_PRIVATE sÄ Àr MS_SHARED typiskt mer anvÀndbart. Av detta skÀl monterar systemd (1) automatiskt om alla monteringar som MS_SHARED vid systemstart. PÄ de flesta moderna system Àr alltsÄ standardspridningstypen i praktiken MS_SHARED .

Eftersom att nÀr man anvÀnder unshare (1) för att skapa en ny monteringsnamnrymd sÄ Àr mÄlet vanligtvis att ge fullstÀndig isolering av monteringarna i den nya namnrymden ÄterstÀller unshare (1) (sedan util-linux 2.27) i sin tur stegen som utfördes av systemd (1), genom att göra alla monteringar privata i den nya namnrymden. Det vill sÀga, unshare (1) utför motsvarande följande i den nya monteringsnamnrymden:

mount --make-rprivate /

För att förhindra detta kan man anvÀnda flaggan --propagation unchanged till unshare (1).

Ett program som skapar en ny monteringsnamnrymd direkt med clone (2) eller unshare (2) kan vilja förhindra spridning av monteringshÀndelser till andra monteringsnamnrymder (sÄ som unshare (1) gör). Detta kan göras genom att Àndra spridningstypen för monteringar i den nya namnrymden till antingen MS_SLAVE eller MS_PRIVATE med ett anrop som det följande:

mount(NULL, "/", MS_SLAVE | MS_REC, NULL);

För en diskussion om spridningstyper nÀr monteringar flyttas ( MS_MOVE ) och nÀr bindmonteringar skapas ( MS_BIND ), se Documentation/filesystems/sharedsubtree.rst .

BegrÀnsningar för monteringsnamnrymder

Observera följande punkter med avseende pÄ monteringsnamnrymder:

[1]

Varje monteringsnamnrymd har en anvÀndarnamnrymd som Àgare. Som förklaras ovan, nÀr en ny monteringsnamnrymd skapas Àr dess monteringslista initierad som en kopia av monteringslistan frÄn en annan monteringsnamnrymd. Om den nya namnrymden och den namnrymd som monteringslistan kopierades ifrÄn Àgs av olika anvÀndarnamnrymder, dÄ betraktas den nya monteringsnamnrymden som mindre privilegierad .

[2]

NÀr en mindre privilegierad monteringsnamnrymd skapas reduceras delade monteringar till slavmonteringar. Detta sÀkerstÀller att avbildningar som utförs i mindre privilegierade monteringsnamnrymder inte kommer spridas till mer privilegierade monteringsnamnrymder.

[3]

Monteringar som kommer som en enda enhet frĂ„n en mer privilegierad monteringsnamnrymd lĂ„ses ihop och kan inte separeras i en mindre privilegierad monteringsnamnrymd. (ÅtgĂ€rden unshare (2) CLONE_NEWNS för med sig alla monteringarna frĂ„n originalmonteringsnamnrymden som en enda enhet, och rekursiva monteringar som sprids mellan monteringsnamnrymder sprids som en enda enhet.)

I detta sammanhang betyder ”kan inte separeras” att monteringarna lĂ„ses sĂ„ att de inte kan avmonteras individuellt. Betrakta följande exempel:

$ sudo sh
# mount --bind /dev/null /etc/shadow
# cat /etc/shadow # Ger ingen utdata

De ovanstÄende stegen, utförda i en mer privilegierad monteringsnamnrymd, har skapat en bindmontering som döljer innehÄllet av skugglösenordsfilen, /etc/shadow . Av sÀkerhetsskÀl skall det inte vara möjligt att göra umount (2) av den monteringen i en mindre privilegierad monteringsnamnrymd, eftersom det skulle avslöja innehÄllet i /etc/shadow .

Anta att vi nu skapar en ny monteringsnamnrymd som Àgs av en ny anvÀndarnamnrymd. Den nya monteringsnamnrymden kommer Àrva kopior av alla monteringarna frÄn den föregÄende monteringsnamnrymden. Dock kommer dessa monteringar vara lÄsta eftersom den nya monteringsnamnrymden Àr mindre privilegierad. Som en konsekvens misslyckas ett försök att göra umount (2) av monteringen sÄ som visas av följande steg:

# unshare --user --map-root-user --mount \
strace -o /tmp/log \
umount /etc/shadow

umount: /etc/shadow: inte monterad.
# grep '^umount' /tmp/log
umount2("/etc/shadow", 0) = -1 EINVAL (Ogiltigt argument)

Felmeddelandet frÄn mount (8) Àr lite förvirrande, men utdata frÄn strace (1) avslöjar att det underliggande systemanropet umount2 (2) misslyckades med felet EINVAL , vilket Àr det fel som kÀrnan returnerar för att indikera att monteringen Àr lÄst.

Observera dock att det Àr möjligt att stacka upp (och ta bort frÄn stacken) en montering ovanpÄ en av de Àrvda lÄsta monteringarna i en mindre privilegierad monteringsnamnrymd:

# echo 'aaaaa' > /tmp/a # Fil att montera pÄ /etc/shadow
# unshare --user --map-root-user --mount \
sh -c 'mount --bind /tmp/a /etc/shadow; cat /etc/shadow'

aaaaa
# umount /etc/shadow

Det sista kommandot umount (8) ovan, vilket utförs i den initiala monteringsnamnrymden, gör att den ursprungliga filen /etc/shadow Äterigen Àr synlig i den namnrymden.

[4]

Som en uppföljning av punkt [3], observera att det Àr möjligt att göra umount (2) av ett helt undertrÀd av monteringar som spreds som en enhet in i en mindre privilegierad monteringsnamnrymd, sÄsom illustreras i följande exempel.

Först skapar vi nya anvÀndar- och monteringsnamnrymder med unshare (1). I den nya monteringsnamnrymden sÀtts spridningstypen för alla monteringar till privat. Vi skapar sedan en delad bindmontering pÄ /mnt , och en liten hierarki av monteringar nedanför den monteringen.

$ PS1='nr1# ' sudo unshare --user --map-root-user \
--mount --propagation private bash

nr1# echo $$ # Vi behöver PID:en för detta skal senare
778501
nr1# mount --make-shared --bind /mnt /mnt
nr1# mkdir /mnt/x
nr1# mount --make-private -t tmpfs none /mnt/x
nr1# mkdir /mnt/x/y
nr1# mount --make-private -t tmpfs none /mnt/x/y
nr1# grep /mnt /proc/self/mountinfo | sed 's/ - .*//'
986 83 8:5 /mnt /mnt rw,relatime shared:344
989 986 0:56 / /mnt/x rw,relatime
990 989 0:57 / /mnt/x/y rw,relatime

Fortfarande i samma skalsession skapar vi sedan ett andra skal i en ny anvÀndarnamnrymd och en ny (mindre privilegierad) monteringsnamnrymd och kontrollerar tillstÄndet hos den spridda monteringen med rot pÄ /mnt .

nr1# PS1='nr2# ' unshare --user --map-root-user \
--mount --propagation unchanged bash

nr2# grep /mnt /proc/self/mountinfo | sed 's/ - .*//'
1239 1204 8:5 /mnt /mnt rw,relatime master:344
1240 1239 0:56 / /mnt/x rw,relatime
1241 1240 0:57 / /mnt/x/y rw,relatime

Att notera i ovanstĂ„ende utdata Ă€r att spridningstypen för monteringen /mnt har reducerats till slav, sĂ„ som förklarades i punkt [2]. Detta betyder att undermonteringshĂ€ndelser kommer spridas frĂ„n huvudets /mnt i ”nr1”, men spridning kommer inte ske i den omvĂ€nda riktningen.

FrĂ„n ett separat terminalfönster anvĂ€nder vi sedan nsenter (1) för att gĂ„ in i monterings- och anvĂ€ndarnamnrymderna som motsvarar ”nr1”. I det terminalfönstret kan vi rekursivt bindmontera /mnt/x pĂ„ platsen /mnt/ppp .

$ PS1='nr3# ' sudo nsenter -t 778501 --user --mount
nr3# mount --rbind --make-private /mnt/x /mnt/ppp
nr3# grep /mnt /proc/self/mountinfo | sed 's/ - .*//'
986 83 8:5 /mnt /mnt rw,relatime shared:344
989 986 0:56 / /mnt/x rw,relatime
990 989 0:57 / /mnt/x/y rw,relatime
1242 986 0:56 / /mnt/ppp rw,relatime
1243 1242 0:57 / /mnt/ppp/y rw,relatime shared:518

Eftersom spridningstypen hos förĂ€ldramonteringen, /mnt , var delad spred den rekursiva bindmonteringen ett litet undertrĂ€d av monteringar under slavmonteringen /mnt in i ”nr2”, vilket kan verifieras genom att köra följande kommando i den skalsessionen:

nr2# grep /mnt /proc/self/mountinfo | sed 's/ - .*//'
1239 1204 8:5 /mnt /mnt rw,relatime master:344
1240 1239 0:56 / /mnt/x rw,relatime
1241 1240 0:57 / /mnt/x/y rw,relatime
1244 1239 0:56 / /mnt/ppp rw,relatime
1245 1244 0:57 / /mnt/ppp/y rw,relatime master:518

FastĂ€n det inte Ă€r möjligt att göra umount (2) av en del av det spridda undertrĂ€det ( /mnt/ppp/y ) i ”nr2” Ă€r det möjligt att göra umount (2) av hela undertrĂ€det som visas med följande kommandon:

nr2# umount /mnt/ppp/y
umount: /mnt/ppp/y: inte monterad.
nr2# umount -l /mnt/ppp | sed 's/ - .*//' # Lyckas 

nr2# grep /mnt /proc/self/mountinfo
1239 1204 8:5 /mnt /mnt rw,relatime master:344
1240 1239 0:56 / /mnt/x rw,relatime
1241 1240 0:57 / /mnt/x/y rw,relatime

[5]

FlagginstĂ€llningarna av MS_RDONLY , MS_NOSUID , MS_NOEXEC och ”atime-flaggorna” ( MS_NOATIME , MS_NODIRATIME , MS_RELATIME ) till mount (2) blir lĂ„sta nĂ€r de sprids frĂ„n en mer privilegierad till en mindre privilegierad monteringsnamnrymd, och kan inte Ă€ndras i den mindre privilegierade monteringsnamnrymden.

Denna punkt illustreras i följande exempel dÀr vi, i en mer privilegierad monteringsnamnrymd, skapar en bindmontering som markeras som endast lÀsbar. Av sÀkerhetsskÀl skall det inte vara möjligt att göra monteringen skrivbar i en mindre privlegierad monteringsnamnrymd, och kÀrnan hindrar mycket riktigt detta.

$ sudo mkdir /mnt/dir
$ sudo mount --bind -o ro /some/path /mnt/dir
$ sudo unshare --user --map-root-user --mount \
mount -o remount,rw /mnt/dir

mount: /mnt/dir: Ätkomst nekas.

[6]

En fil eller katalog som Àr en monteringspunkt i en namnrymd som inte Àr en monteringspunkt i en annan namnrymd gÄr att byta namn pÄ, ta bort lÀnken till eller tas bort ( rmdir (2)) i monteringsnamnrymden i vilken den inte Àr en monteringspunkt (under de vanliga rÀttighetskontrollerna). Som en konsekvens tas monteringspunkten bort i monteringsnamnrymden dÀr den var en monteringspunkt.

Tidigare (före Linux 3.18) resulterade försök att ta bort lÀnken till, byta namn pÄ eller ta bort en fil eller katalog som var en monteringspunkt i en annan monteringsnamnrymd i felet EBUSY . Det beteendet hade tekniska problem att vidmakthÄllas (t.ex., för NFS) och möjliggjorde tjÀnstevÀgransattacker (DoS) mot mer privilegierade anvÀndare (d.v.s., förhindra enskilda filer frÄn att uppdateras genom att bindmontera ovanpÄ dem).

EXEMPEL

Se pivot_root (2).

SE ÄVEN

unshare (1), clone (2), mount (2), mount_setattr (2), pivot_root (2), setns (2), umount (2), unshare (2), proc (5), namespaces (7), user_namespaces (7), findmnt (8), mount (8), pam_namespace (8), pivot_root (8), umount (8)

Documentation/filesystems/sharedsubtree.rst i kÀrnans kÀllkodstrÀd.

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