mount_namespaces(7) | Miscellaneous Information Manual | mount_namespaces(7) |
mount_namespaces — översikt över Linux monteringsnamnrymder
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:
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).
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:
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:
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:
Om ingen av ovanstående flaggor finns, då är detta en privat montering.
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
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
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. In some cases useful info is found in syslog - try dmesg | tail or so.
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
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”.
make-shared | make-slave | make-priv | make-unbind | |
delad | delad | slav/priv [1] | priv | obind |
slav | slav+delad | slav [2] | priv | obind |
slav+delad | slav+delad | slav | priv | obind |
privat | delad | priv [2] | priv | obind |
obindbar | delad | obind [2] | priv | obind |
Observera följande detaljer om tabellen:
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.
källa(A) | |||||
delad | privat | slav | obind | ||
mål(B) | delad | delad | delad | slav+delad | otillåten |
odelad | delad | privat | slav | otillåten |
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.
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.
källa(A) | |||||
delad | privat | slav | obind | ||
mål(B) | delad | delad | delad | slav+delad | otillåten |
odelad | delad | privat | slav | obindbar |
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.
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.
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: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).
Monteringsnamnrymder förekom först i Linux 2.4.19.
Namnrymder är en Linux-specifik funktion.
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.
Observera följande punkter med avseende på monteringsnamnrymder:
$ sudo sh # mount --bind /dev/null /etc/shadow # cat /etc/shadow # Ger ingen utdata
# 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)
# 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
$ 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
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
$ 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
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
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
$ 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.
Se pivot_root(2).
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.
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.
10 februari 2023 | Linux man-pages 6.03 |