Man page - mount_namespaces(7)
Packages contains this manual
- shm_overview(7)
- nss(5)
- proc_mtrr(5)
- intro(7)
- tcp(7)
- iso_8859-9(7)
- armscii-8(7)
- proc_kpagecount(5)
- initrd(4)
- mouse(4)
- proc_stat(5)
- x25(7)
- proc_interrupts(5)
- fifo(7)
- repertoiremap(5)
- icmp(7)
- futex(7)
- feature_test_macros(7)
- lp(4)
- bpf-helpers(7)
- epoll(7)
- proc_sys_dev(5)
- namespaces(7)
- proc_sysrq-trigger(5)
- proc_bus(5)
- cp1251(7)
- proc_pid_maps(5)
- proc_sys_vm(5)
- proc_pid_projid_map(5)
- st(4)
- proc_pid(5)
- issue(5)
- pid_namespaces(7)
- unicode(7)
- inode(7)
- hosts.equiv(5)
- iso-8859-13(7)
- proc_fb(5)
- proc_modules(5)
- proc_pid_autogroup(5)
- keyrings(7)
- sysvipc(7)
- proc_kmsg(5)
- cgroups(7)
- latin6(7)
- proc_pid_uid_map(5)
- unix(7)
- proc_pid_io(5)
- pts(4)
- packet(7)
- ld-linux.so(8)
- tzselect(8)
- iconv(1)
- proc_pid_syscall(5)
- proc_pid_net(5)
- proc_pid_pagemap(5)
- tty(4)
- proc_profile(5)
- standards(7)
- proc_pid_mounts(5)
- filesystems(5)
- iso-8859-15(7)
- locale(5)
- iso_8859_3(7)
- xattr(7)
- iso-8859-2(7)
- proc_uptime(5)
- persistent-keyring(7)
- credentials(7)
- proc_pid_timers(5)
- utmpx(5)
- vcsa(4)
- proc_pid_exe(5)
- proc_net(5)
- proc_timer_stats(5)
- ip(7)
- proc_pid_fd(5)
- ptmx(4)
- user_namespaces(7)
- resolv.conf(5)
- url(7)
- iso_8859_5(7)
- iso_8859-8(7)
- urn(7)
- process-keyring(7)
- proc_pid_auxv(5)
- proc_ksyms(5)
- proc_ide(5)
- veth(4)
- ldd(1)
- proc_swaps(5)
- landlock(7)
- proc_vmstat(5)
- system_data_types(7)
- cp1252(7)
- lirc(4)
- proc_kpageflags(5)
- random(7)
- precedence(7)
- cpuset(7)
- proc_pid_ns(5)
- acct(5)
- latin4(7)
- proc_pid_cgroup(5)
- proc_cpuinfo(5)
- iso_8859-2(7)
- proc_keys(5)
- charsets(7)
- pldd(1)
- proc_pid_stat(5)
- rtnetlink(7)
- netlink(7)
- ram(4)
- mem(4)
- iso-8859-6(7)
- proc_key-users(5)
- iso_8859_15(7)
- fanotify(7)
- proc_sys_net(5)
- sysfs(5)
- math_error(7)
- latin1(7)
- proc_pid_root(5)
- nptl(7)
- proc_cgroups(5)
- proc_iomem(5)
- proc_pid_statm(5)
- sem_overview(7)
- hier(7)
- full(4)
- proc_pid_status(5)
- proc_pid_cwd(5)
- proc_pid_cpuset(5)
- proc_scsi(5)
- uri(7)
- proc_diskstats(5)
- iso_8859_6(7)
- latin2(7)
- latin5(7)
- man-pages(7)
- ld.so(8)
- uts_namespaces(7)
- proc_pid_mountstats(5)
- intro(3)
- proc_pid_seccomp(5)
- proc_pid_wchan(5)
- attributes(7)
- symlink(7)
- mount_namespaces(7)
- charmap(5)
- tis-620(7)
- iso-8859-10(7)
- getent(1)
- proc_buddyinfo(5)
- ttytype(5)
- rtc(4)
- proc_malloc(5)
- suffixes(7)
- sln(8)
- signal(7)
- proc_sys_abi(5)
- signal-safety(7)
- time_namespaces(7)
- proc_pid_comm(5)
- raw(7)
- gai.conf(5)
- proc_crypto(5)
- locale(1)
- iso-8859-3(7)
- motd(5)
- proc_meminfo(5)
- iso-8859-8(7)
- protocols(5)
- proc_pid_map_files(5)
- pthreads(7)
- null(4)
- proc(5)
- zdump(8)
- socket(7)
- proc_sys_kernel(5)
- ddp(7)
- memusagestat(1)
- hd(4)
- iso-8859-14(7)
- shells(5)
- pipe(7)
- glob(7)
- proc_self(5)
- network_namespaces(7)
- utmp(5)
- proc_kcore(5)
- nsswitch.conf(5)
- sd(4)
- iso-8859-5(7)
- iso_8859_16(7)
- man(7)
- iso_8859-6(7)
- dir_colors(5)
- mq_overview(7)
- vsock(7)
- ascii(7)
- thread-keyring(7)
- fs(5)
- proc_pid_attr(5)
- proc_sys_debug(5)
- proc_sys(5)
- proc_pid_cmdline(5)
- pty(7)
- services(5)
- cgroup_namespaces(7)
- securetty(5)
- netdevice(7)
- iso_8859_13(7)
- host.conf(5)
- proc_pid_setgroups(5)
- proc_slabinfo(5)
- sock_diag(7)
- iso_8859-14(7)
- iso-8859-11(7)
- iso_8859_11(7)
- operator(7)
- regex(7)
- wavelan(4)
- proc_sys_fs(5)
- nologin(5)
- proc_pci(5)
- koi8-r(7)
- erofs(5)
- intro(2)
- utf8(7)
- proc_kallsyms(5)
- proc_sysvipc(5)
- queue(7)
- proc_sys_sunrpc(5)
- intro(5)
- latin8(7)
- mtrace(1)
- ipc_namespaces(7)
- dsp56k(4)
- iso_8859_4(7)
- proc_pid_smaps(5)
- proc_cmdline(5)
- rpc(5)
- proc_tty(5)
- proc_version(5)
- smartpqi(4)
- proc_pid_timerslack_ns(5)
- aio(7)
- session-keyring(7)
- resolver(5)
- slabinfo(5)
- wtmp(5)
- iso_8859_9(7)
- proc_locks(5)
- mailaddr(7)
- proc_pid_oom_score(5)
- kmem(4)
- iconvconfig(8)
- iso_8859-7(7)
- glibc(7)
- hostname(7)
- proc_thread-self(5)
- ipv6(7)
- iso_8859_7(7)
- proc_kpagecgroup(5)
- core(5)
- time(7)
- units(7)
- proc_dma(5)
- loop(4)
- address_families(7)
- zero(4)
- intro(4)
- procfs(5)
- iso_8859-4(7)
- vdso(7)
- tmpfs(5)
- iso-8859-16(7)
- iso_8859_10(7)
- user-session-keyring(7)
- libc(7)
- proc_fs(5)
- koi8-u(7)
- latin3(7)
- proc_tid_children(5)
- proc_pid_limits(5)
- proc_pid_coredump_filter(5)
- iso_8859-15(7)
- arp(7)
- urandom(4)
- iso_8859-10(7)
- hpsa(4)
- proc_pid_environ(5)
- boot(7)
- ftm(7)
- ld-linux(8)
- proc_driver(5)
- loop-control(4)
- iso_8859-16(7)
- proc_filesystems(5)
- tzfile(5)
- sprof(1)
- proc_pid_task(5)
- proc_pid_oom_score_adj(5)
- proc_mounts(5)
- iso-8859-4(7)
- iso_8859-1(7)
- utf-8(7)
- iso_8859-13(7)
- intro(6)
- proc_timer_list(5)
- rtld-audit(7)
- iso_8859-3(7)
- group(5)
- sched(7)
- proc_pid_clear_refs(5)
- hosts(5)
- iso_8859-11(7)
- numa(7)
- iso_8859_2(7)
- locale(7)
- iso-8859-1(7)
- fuse(4)
- proc_tid(5)
- proc_execdomains(5)
- proc_pid_mountinfo(5)
- intro(8)
- iso_8859_8(7)
- proc_loadavg(5)
- proc_pid_oom_adj(5)
- re_format(7)
- iso_8859_14(7)
- zic(8)
- bootparam(7)
- inotify(7)
- posixoptions(7)
- proc_partitions(5)
- iso-8859-9(7)
- proc_pid_mem(5)
- networks(5)
- proc_sys_user(5)
- udp(7)
- proc_zoneinfo(5)
- latin10(7)
- proc_pid_fdinfo(5)
- proc_pid_stack(5)
- memusage(1)
- spufs(7)
- pkeys(7)
- path_resolution(7)
- proc_ioports(5)
- intro(1)
- ldconfig(8)
- msr(4)
- svipc(7)
- port(4)
- proc_pid_personality(5)
- cciss(4)
- latin9(7)
- capabilities(7)
- localedef(1)
- vcs(4)
- iso_8859-5(7)
- elf(5)
- proc_sys_proc(5)
- console_codes(4)
- random(4)
- iso-8859-7(7)
- termcap(5)
- cpuid(4)
- environ(7)
- string_copying(7)
- proc_pid_gid_map(5)
- queue(3)
- termio(7)
- user-keyring(7)
- complex(7)
- latin7(7)
- proc_config.gz(5)
- udplite(7)
- kernel_lockdown(7)
- proc_devices(5)
- proc_apm(5)
- iso_8859_1(7)
- proc_pid_numa_maps(5)
apt-get install manpages
Available languages:
en fr sv deManual
mount_namespaces
NOMDESCRIPTION
SOUS-ARBRES PARTAGĂS
Exemples pour MS_SHARED et MS_PRIVATE
Exemples pour MS_SLAVE
Exemples pour MS_UNBINDABLE
Transitions de type de propagation
Sémantiques de Bind (MS_BIND)
Sémantiques de Move (MS_MOVE)
Sémantiques de montage
Sémantiques de démontage
LâĂ©tiquette /proc/ pid /mountinfo propagate_from
STANDARDS
HISTORIQUE
NOTES
Restrictions sur les espaces de noms montage
EXEMPLES
VOIR AUSSI
TRADUCTION
NOM
mount_namespaces â Aperçu des espaces de noms montage de Linux
DESCRIPTION
Pour une présentation générale des espaces de noms, consultez namespaces (7).
Les espaces de noms montage permettent dâisoler la liste des montages vus par les processus dans chaque instance dâespace de noms. Ainsi, les processus dans chacune des instances dâespace de noms montage verront les hiĂ©rarchies distinctes dâun rĂ©pertoire unique.
Les vues fournies par les fichiers /proc/ pid /mounts , /proc/ pid /mountinfo , et /proc/ pid /mountstats (tous dĂ©crits dans proc (5)) correspondent Ă lâespace de noms montage dans lequel le processus avec le PID pid rĂ©side (tous les processus dans le mĂȘme espace de noms montage voient la mĂȘme chose dans ces fichiers).
Un nouvel espace de noms montage est créé en utilisant soit clone (2) ou unshare (2) avec lâattribut CLONE_NEWNS . Quand un nouvel espace de noms montage est créé, sa liste de montages est initialisĂ©e comme suit :
|
- |
si lâespace de noms est créé en utilisant clone (2), la liste de montages de lâespace de noms de lâenfant est une copie de la liste de montages dans lâespace de noms montage du processus parent ; |
||
|
- |
si lâespace de noms est créé en utilisant unshare (2), la liste de montages est une copie de la liste de montages dans lâespace de noms montage prĂ©cĂ©dent de lâappelant. |
Des modifications ultĂ©rieures de la liste de montages ( mount (2) et umount (2)) dans chaque espace de noms montage nâaffecteront pas (par dĂ©faut) la liste de montages vue dans lâautre espace de noms (mais voir les explications ci-aprĂšs sur les sous-arbres partagĂ©s).
SOUS-ARBRES PARTAGĂS
Une fois lâimplĂ©mentation des espaces de noms montage terminĂ©e, lâexpĂ©rience a montrĂ© que, dans certains cas, lâisolation quâils fournissaient Ă©tait trop importante. Par exemple, pour rendre un nouveau disque optique nouvellement chargĂ© disponible dans tous les espaces de noms montage, une opĂ©ration de montage Ă©tait requise pour chaque espace de noms. Pour un tel cas dâutilisation, et quelques autres, la fonctionnalitĂ© sous-arbre partagĂ© a Ă©tĂ© introduite dans Linux 2.6.15. Cette fonctionnalitĂ© permet une propagation automatique et contrĂŽlĂ©e des Ă©vĂšnements mount (2) et umount (2) entre espaces de noms (ou, plus prĂ©cisĂ©ment, entre les montages qui sont membres dâun groupe de pairs qui propagent les Ă©vĂšnements des uns aux autres).
Chaque montage
est marquĂ© (Ă lâaide de
mount
(2))
comme ayant un des
types de propagation
suivants :
MS_SHARED
Ce montage partage les Ă©vĂšnements avec les membres dâun groupe de pairs. Les Ă©vĂšnements mount (2) et umount (2) immĂ©diatement sous ce montage se propageront vers les autres montages qui sont membres du groupe de pairs. Propagation signifie ici que le mĂȘme mount (2) ou umount (2) se produira automatiquement sous tous les autres montages dans le groupe de pairs. Inversement, les Ă©vĂšnements mount (2) et umount (2) qui se produiront sous des montages de pair se propageront vers ce montage.
MS_PRIVATE
Ce montage est privé, il ne possÚde pas de groupe de pairs. Les évÚnements mount (2) et umount (2) ne se propageront pas vers ou hors de ce montage.
MS_SLAVE
Les Ă©vĂšnements mount (2) et umount (2) se propageront dans ce montage Ă partir dâun groupe de pairs partagĂ© (maĂźtre). Les Ă©vĂšnements mount (2) et umount (2) sous ce montage ne se propagent vers aucun pair.
Il est Ă remarquer quâun montage peut ĂȘtre lâesclave dâun autre groupe de pairs tout en partageant en mĂȘme temps des Ă©vĂšnements mount (2) et umount (2) avec un groupe de pairs dont il est membre (plus prĂ©cisĂ©ment, un groupe de pairs peut ĂȘtre lâesclave dâun autre groupe de pairs).
MS_UNBINDABLE
Identique Ă un montage privé ; de plus, ce montage ne peut ĂȘtre montĂ© liĂ© (montage bind). Les essais de monter liĂ© ce montage ( mount (2) avec lâattribut MS_BIND ) Ă©choueront.
Quand un montage bind rĂ©cursif ( mount (2) avec les attributs MS_BIND et MS_REC ) est rĂ©alisĂ© dans un sous-arbre de rĂ©pertoire, tout montage bind dans le sous-arbre est automatiquement Ă©laguĂ© (câest-Ă -dire, pas rĂ©pliquĂ©) lors de la rĂ©plication de ce sous-arbre pour produire le sous-arbre cible.
Pour des explications sur le type de propagation assigné à un nouveau montage, consulter la section NOTES.
Le type de propagation est un rĂ©glage spĂ©cifique Ă chaque point de montage. Certains montages peuvent ĂȘtre marquĂ©s comme partagĂ©s (chaque montage partagĂ© Ă©tant un membre dâun groupe de pairs distinct) tandis que dâautres sont privĂ©s (ou esclaves ou non liables).
Il est Ă noter que le type de propagation dâun montage dĂ©termine si les mount (2) et umount (2) de montages immĂ©diatement sous le montage sont propagĂ©es. Par consĂ©quent, le type de propagation nâaffecte pas la propagation dâĂ©vĂšnements pour les petits-enfants et les futurs montages de descendants supprimĂ©s. Ce qui se passe si le montage lui-mĂȘme est dĂ©montĂ© dĂ©pend du type de propagation en vigueur pour le parent du montage.
Des membres sont ajoutés à un groupe de pairs quand un montage est marqué comme partagé et soit :
|
(a) |
le montage est rĂ©pliquĂ© pendant la crĂ©ation dâun nouvel espace de noms montage ; |
||
|
(b) |
un nouveau montage bind est créé à partir du montage. |
Dans les deux cas, le nouveau montage rejoint le groupe de pairs dont le montage existant est membre.
Un nouveau groupe de pairs est aussi créé quand un montage enfant est créé sous un montage existant marqué comme partagé. Dans ce cas, le nouveau montage enfant est aussi marqué comme partagé et le nouveau groupe de pairs résultant est constitué de tous les montages qui sont répliqués sous les pairs des montages parents.
Un montage cesse dâĂȘtre membre dâun groupe de pairs quand le montage est explicitement dĂ©montĂ© ou quand le montage est implicitement dĂ©montĂ© parce quâun espace de noms montage est supprimĂ© (parce quâil nâa plus de processus membre).
Le type de
propagation des montages dans lâespace de noms montage
peut ĂȘtre obtenu Ă lâaide des
« champs facultatifs » exposés
dans
/proc/
pid
/mountinfo
(consulter
proc
(5) pour plus de détails sur ce fichier).
Les étiquettes suivantes peuvent apparaitre dans ces
champs facultatifs pour un enregistrement de ce
fichier :
shared:X
Ce montage est partagĂ© dans le groupe de pairs X . Chaque groupe de pairs a un ID unique qui est automatiquement gĂ©rĂ© par le noyau, et tous les montages dans le mĂȘme groupe de pairs afficheront le mĂȘme ID (ces ID sont assignĂ©s en partant de la valeur 1 et peuvent ĂȘtre recyclĂ©s quand un groupe de pairs nâa plus aucun membre).
master:X
Ce montage est un esclave du groupe de pairs X partagé.
propagate_from:X (depuis Linux 2.6.26)
Ce montage est un esclave et reçoit des propagations du groupe de pairs X partagĂ©. Cette Ă©tiquette apparaitra toujours en conjonction avec lâĂ©tiquette master:X . Ici, X est le plus proche groupe de pairs dominant sous le rĂ©pertoire racine du processus. Si X est le maitre immĂ©diat du montage ou sâil nâexiste aucun groupe de pairs dominant sous la mĂȘme racine, seul le champ master:X est prĂ©sent, alors que le champ propagate_from:X est absent. Pour plus de dĂ©tails, voir ci-aprĂšs.
unbindable
Ce montage ne peut ĂȘtre liĂ© (bind).
Si aucune de ces Ă©tiquettes nâest prĂ©sente, alors câest un montage privĂ©.
Exemples pour MS_SHARED et MS_PRIVATE
En supposant que dans un terminal dans lâespace de noms montage initial, un montage soit marquĂ© comme partagĂ© (mntS) et un autre privĂ© (mntP), et en affichant les montages dans /proc/self/mountinfo :
sh1#
mount
--make-shared /mntS
sh1#
mount --make-private /mntP
sh1#
cat /proc/self/mountinfo | grep '/mnt' | sed 's/ -
.*//'
77 61 8:17 / /mntS rw,relatime shared:1
83 61 8:15 / /mntP rw,relatime
Dans la sortie /proc/self/mountinfo , on voit que /mntS est un montage partagĂ© dans le groupe de pairs 1 et que /mntP nâa pas dâĂ©tiquette facultative, indiquant que câest un montage privĂ©. Les deux premiers champs de chaque enregistrement dans ce fichier sont lâID unique pour ce montage et lâID de montage du montage parent. Ce fichier peut ĂȘtre inspectĂ© ultĂ©rieurement pour vĂ©rifier que le montage parent de /mntS et /mntP est le rĂ©pertoire racine / , qui est montĂ© comme privé :
sh1#
cat
/proc/self/mountinfo | awk '$1 == 61' | sed 's/ - .*//'
61 0 8:2 / / rw,relatime
Dans un second terminal, crĂ©ons un nouvel espace de noms montage oĂč un deuxiĂšme interprĂ©teur est exĂ©cutĂ© et inspectons les montages :
$
PS1='sh2#
' sudo unshare -m --propagation unchanged sh
sh2#
cat /proc/self/mountinfo | grep '/mnt' | sed 's/ -
.*//'
222 145 8:17 / /mntS rw,relatime shared:1
225 145 8:15 / /mntP rw,relatime
Le nouvel espace de noms montage reçoit une copie des montages initiaux dâespace de noms montage. Ces nouveaux montages conservent les mĂȘmes types de propagation, mais ont des ID uniques de montage (lâoption --propagation unchanged empĂȘche unshare (1) de marquer tous les montages comme privĂ©s lors de la crĂ©ation dâun nouvel espace de noms montage, ce qui est rĂ©alisĂ© par dĂ©faut).
Dans le second terminal, créons alors des sous-montages sous chacun des /mntS et /mntP et inspectons la configuration :
sh2#
mkdir
/mntS/a
sh2#
mount /dev/sdb6 /mntS/a
sh2#
mkdir /mntP/b
sh2#
mount /dev/sdb7 /mntP/b
sh2#
cat /proc/self/mountinfo | grep '/mnt' | sed 's/ -
.*//'
222 145 8:17 / /mntS rw,relatime shared:1
225 145 8:15 / /mntP rw,relatime
178 222 8:22 / /mntS/a rw,relatime shared:2
230 225 8:23 / /mntP/b rw,relatime
Dans ce qui précÚde, on peut voir que /mntS/a a été créé comme partagé (héritant ce réglage de son montage parent) et que /mntP/b a été créé comme montage privé.
En retournant dans le premier terminal et en inspectant la configuration, on peut voir que le nouveau montage créé sous le montage partagĂ© /mntS sâest propagĂ© vers son montage pair (dans lâespace de noms montage initial), mais que le nouveau montage créé sous le montage privĂ© /mntP ne sâest pas propagé :
sh1#
cat
/proc/self/mountinfo | grep '/mnt' | sed 's/ - .*//'
77 61 8:17 / /mntS rw,relatime shared:1
83 61 8:15 / /mntP rw,relatime
179 77 8:22 / /mntS/a rw,relatime shared:2
Exemples pour MS_SLAVE
Faire dâun montage un esclave lui permet de recevoir des Ă©vĂšnements mount (2) et umount (2) propagĂ©s Ă partir dâun groupe de pairs partagĂ© maitre, tout en lâempĂȘchant de propager des Ă©vĂšnements vers ce maitre. Cela est utile, par exemple, si on veut recevoir un Ă©vĂšnement de montage quand un disque optique est montĂ© dans un groupe de pairs partagĂ© maitre (dans un autre espace de noms montage), mais en voulant empĂȘcher que des Ă©vĂšnements mount (2) et umount (2) dans le montage esclave nâaient des effets de bord dans dâautres espaces de noms.
Lâeffet de lâasservissement peut ĂȘtre dĂ©montrĂ© en dâabord marquant deux montages comme partagĂ©s dans lâespace de noms montage initial :
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
Dans un second terminal, créons un nouvel espace de noms montage et inspectons les montages :
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
Dans le nouvel espace de noms montage marquons un des montages comme esclave :
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
Dans la sortie ci-dessus, nous voyons que /mntY est dĂ©sormais un montage esclave qui reçoit les Ă©vĂšnements de propagation du groupe de pairs partagĂ© avec lâID 2.
En continuant dans le nouvel espace de noms, créons des sous-montages sous chaque /mntX et /mntY :
sh2#
mkdir
/mntX/a
sh2#
mount /dev/sda3 /mntX/a
sh2#
mkdir /mntY/b
sh2#
mount /dev/sda5 /mntY/b
Si nous inspectons lâĂ©tat des montages dans le nouvel espace de noms montage, nous voyons que /mntX/a a Ă©tĂ© créé comme nouveau montage partagĂ© (hĂ©ritant du rĂ©glage « partagé » de son montage parent) et que /mntY/b a Ă©tĂ© créé comme montage privé :
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
En retournant dans le premier terminal (dans lâespace de noms montage initial) nous voyons que le montage /mntX/a sâest propagĂ© au pair (le /mntX partagĂ©), mais que le montage /mntY/b ne sâest pas propagé :
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
Créons maintenant un nouveau montage sous /mntY dans le premier interpréteur :
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
Quand nous examinons les montages dans le second espace de noms montage, nous voyons que dans ce cas le nouveau montage sâest propagĂ© au montage esclave et que le nouveau montage lui-mĂȘme est un montage esclave (au groupe de pairs 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
Exemples pour MS_UNBINDABLE
Une des premiĂšres utilitĂ©s des montages non liables (non bind) est dâĂ©viter le problĂšme « dâexplosion de montages » lors de rĂ©alisation de maniĂšre rĂ©pĂ©tĂ©e de montages bind dâun sous-arbre de haut niveau dans un montage de bas niveau. Le problĂšme est illustrĂ© par la session dâinterprĂ©teur suivante :
En supposant lâexistence dâun systĂšme avec les montages suivants :
#
mount |
awk '{print $1, $2, $3}'
/dev/sda1 on /
/dev/sdb6 on /mntX
/dev/sdb7 on /mntY
Supposons de plus que nous voulons de maniĂšre rĂ©cursive monter liĂ© (bind) le rĂ©pertoire racine sous plusieurs rĂ©pertoires home dâutilisateurs. Faisons-le pour le premier utilisateur et inspectons les montages :
#
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
Lorsque nous rĂ©pĂ©tons cette opĂ©ration pour le second utilisateur, le problĂšme de lâexplosion commence Ă apparaitre :
#
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
Sous /home/henry , nous nâavons pas seulement ajoutĂ© rĂ©cursivement les montages /mntX et /mntY , mais aussi les montages rĂ©cursifs de ces rĂ©pertoires sous /home/cecilia qui ont Ă©tĂ© créés dans lâĂ©tape prĂ©cĂ©dente. Si nous rĂ©pĂ©tons cela pour un troisiĂšme utilisateur, il devient Ă©vident que lâexplosion est de nature exponentielle :
#
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
Le problĂšme de lâexplosion de montages dans le scĂ©nario prĂ©cĂ©dent peut ĂȘtre Ă©vitĂ© en rendant chaque nouveau montage non liable. Ainsi les montages rĂ©cursifs du rĂ©pertoire racine ne rĂ©pliqueront pas les montages non liables. Un tel montage pour le premier utilisateur peut ĂȘtre effectuĂ© ainsi :
# mount --rbind --make-unbindable / /home/cecilia
Avant dâaller plus loin, nous montrons que les montages non liables le sont effectivement :
#
mkdir
/mntZ
#
mount --bind /home/cecilia /mntZ
mount: wrong fs type, bad option, bad superblock on
/home/cecilia,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so.
Maintenant nous créons des montages bind récursifs non liables pour les deux autres utilisateurs :
#
mount
--rbind --make-unbindable / /home/henry
#
mount --rbind --make-unbindable / /home/otto
Un examen de la liste des montages permet de voir quâil nây a eu aucune explosion des montages parce que les montages non liables nâont pas Ă©tĂ© rĂ©pliquĂ©s sous chaque rĂ©pertoire dâutilisateur :
#
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
Transitions de type de propagation
|
La table suivante montre les effets que lâapplication dâun nouveau type de propagation (câest-Ă -dire mount --make-xxxx ) a sur un type de propagation existant dâun montage. Les lignes correspondent aux types de programmation existants et les colonnes aux nouveaux rĂ©glages de propagation. Pour des raisons dâespace, « private » est abrĂ©gĂ© en « priv » et « unbindable » en « unbind ». |
Prenez note des détails suivants à propos de la table :
|
[1] |
Si un montage partagĂ© est lâunique montage dans son groupe de pairs, faire de lui un esclave le rend automatiquement privĂ©. |
||
|
[2] |
Rendre esclave un montage non partagĂ© nâa aucun effet sur le montage. |
Sémantiques de Bind (MS_BIND)
Supposons que la commande suivante soit exécutée :
mount --bind A/a B/b
Ici, A est le montage source, B est le montage de destination, a est un chemin de sous-répertoire sous le point de montage A et b est un chemin de sous-répertoire sous le point de montage B . Le type de propagation du montage résultant, B/b , dépend des types de propagation des montages A et B , et cela est résumé dans la table suivante.
Remarquez quâun bind rĂ©cursif dâun sous-arbre suit les mĂȘmes sĂ©mantiques que pour une opĂ©ration bind sur chaque montage dans le sous-arbre (les montages non liables sont automatiquement Ă©laguĂ©s Ă la cible du montage cible).
Pour de plus amples explications, consulter Documentation/filesystems/sharedsubtree.rst dans lâarbre des sources du noyau.
Sémantiques de Move (MS_MOVE)
Supposons que la commande suivante soit exécutée :
mount --move A B/b
Ici, A est le montage source, B est le montage de destination et b est un chemin de sous-répertoire sous le point de montage B . Le type de propagation du montage résultant, B/b , dépend des types de propagation des montages A et B , et cela est résumé dans la table suivante.
Remarque : dĂ©placer un montage qui rĂ©side sous un montage partagĂ© nâest pas autorisĂ©.
Pour de plus amples explications, consulter Documentation/filesystems/sharedsubtree.rst dans lâarbre des sources du noyau.
Sémantiques de montage
Supposons que la commande suivante soit utilisée pour créer un montage :
mount device B/b
Ici, B est le montage de destination et b est un chemin de sous-rĂ©pertoire sous le point de montage B . Le type de propagation du montage rĂ©sultant, B/b , suit les mĂȘmes rĂšgles que pour un montage bind oĂč le type de propagation du montage source est toujours considĂ©rĂ© comme privĂ©.
Sémantiques de démontage
Supposons que la commande suivante soit utilisée pour défaire un montage :
umount A
Ici, A est un montage dans B/b , oĂč B est le montage parent et b est un chemin de sous-rĂ©pertoire sous le point de montage B . Si B est partagĂ©, alors tous les montages les plus rĂ©cemment montĂ©s dans b sur des montages qui reçoivent la propagation du montage B et qui nâont pas de sous-montages sous eux sont dĂ©montĂ©s.
LâĂ©tiquette /proc/ pid /mountinfo propagate_from
LâĂ©tiquette propagate_from:X est affichĂ©e dans les champs facultatifs dâun enregistrement /proc/ pid /mountinfo dans le cas oĂč un processus ne peut voir un maitre immĂ©diat dâesclave (câest-Ă -dire, le chemin du maitre nâest pas accessible Ă partir du rĂ©pertoire racine du systĂšme de fichiers) et ainsi ne peut pas dĂ©terminer la chaine de propagation entre les montages quâil peut voir.
Dans lâexemple suivant, crĂ©ons dâabord une chaine maitre-esclave Ă deux liens entre les montages /mnt , /tmp/etc et /mnt/tmp/etc . Ensuite la commande chroot (1) est utilisĂ©e pour rendre le point de montage /tmp/etc inaccessible Ă partir du rĂ©pertoire racine, crĂ©ant une situation oĂč le maitre de /mnt/tmp/etc nâest pas accessible Ă partir du (nouveau) rĂ©pertoire racine du processus.
Dâabord mous montons liĂ© (bind) le rĂ©pertoire racine sur /mnt , puis nous montons liĂ© /proc sous /mnt/proc de telle façon quâaprĂšs le chroot (1) ultĂ©rieur, le systĂšme de fichiers proc (5) demeure visible dans lâemplacement correct de lâenvironnement chrootĂ©.
#
mkdir -p
/mnt/proc
#
mount --bind / /mnt
#
mount --bind /proc /mnt/proc
Ensuite, nous nous assurons que le montage /mnt est un montage partagé dans un nouveau groupe de pairs (sans aucun pair) :
#
mount
--make-private /mnt
# Isolation de nâimporte quel
groupe de pairs précédent
#
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
Ensuite, nous montons lié /mnt/etc sur /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
Initialement, ces deux montages sont dans le mĂȘme groupe de pairs, mais nous rendons /tmp/etc esclave de /mnt/etc et nous rendons aussi /tmp/etc partagĂ©, de telle façon quâil puisse propager les Ă©vĂšnements au prochain esclave dans la chaine :
#
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
Ensuite nous montons liĂ© /tmp/etc sur /mnt/tmp/etc . De nouveau, les deux montages sont initialement dans le mĂȘme groupe de pairs, mais nous faisons alors de /mnt/tmp/etc un esclave de /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
De ce qui prĂ©cĂšde, nous voyons que /mnt est le maitre de lâesclave /tmp/etc , qui Ă son tour est le maitre de lâesclave /mnt/tmp/etc .
Puis nous effectuons un chroot (1) sur le rĂ©pertoire /mnt , ce qui rend le montage avec lâID 267 inaccessible Ă partir du (nouveau) rĂ©pertoire racine :
# chroot /mnt
Lorsque nous examinons lâĂ©tat des montages Ă lâintĂ©rieur de lâenvironnement chrootĂ©, nous voyons ce qui suit :
#
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
Ci-dessus, nous voyons que le montage avec lâID 273 est un esclave dont le maitre est le groupe de pairs 105. Le point de montage pour ce maitre est inaccessible, et donc, une Ă©tiquette propagate_from est affichĂ©e, indiquant que le groupe de pairs dominant le plus proche (câest-Ă -dire le montage accessible le plus proche dans la chaine esclave) est le groupe de pairs avec lâID 102 (correspondant au point de montage /mnt avant que le chroot (1) soit rĂ©alisĂ©).
STANDARDS
Linux.
HISTORIQUE
Linux 2.4.19.
NOTES
Le type de propagation assignĂ© Ă un nouveau montage dĂ©pend du type de propagation du montage parent. Si le montage a un parent (câest-Ă -dire que ce nâest pas un point de montage racine) et si le type de propagation du parent est MS_SHARED , alors le type de propagation du nouveau montage est aussi MS_SHARED . Sinon, le type de propagation du nouveau montage est MS_PRIVATE .
Malgré le fait que le type de propagation par défaut pour le nouveau montage soit dans de nombreux cas MS_PRIVATE , MS_SHARED est en général plus utile. Pour cette raison, systemd (1) remonte automatiquement tous les montages en MS_SHARED au démarrage du systÚme. Par conséquent, sur la plupart des systÚmes modernes, le type de propagation par défaut est en pratique MS_SHARED .
Puisque lorsquâon utilise unshare (1) pour crĂ©er un espace de noms montage, le but est couramment de fournir une isolation totale des montages dans le nouvel espace de noms, unshare (1) (depuis util-linux 2.27) Ă son tour inverse lâĂ©tape rĂ©alisĂ©e par systemd (1), en rendant tous les montages privĂ©s dans le nouvel espace de noms. Câest-Ă -dire que unshare (1) rĂ©alise lâĂ©quivalent de ce qui suit dans le nouvel espace de noms montage :
mount --make-rprivate /
Pour empĂȘcher cela, on peut utiliser lâoption --propagation unchanged de unshare (1).
Une application qui crĂ©e un nouvel espace de noms montage directement en utilisant clone (2) ou unshare (2) peut vouloir empĂȘcher la propagation dâĂ©vĂšnements de montage aux autres espaces de noms montage (comme cela est rĂ©alisĂ© par unshare (1)). Cela peut ĂȘtre effectuĂ© en changeant le type de propagation de montages dans le nouvel espace de noms Ă MS_SLAVE ou MS_PRIVATE , en utilisant lâappel suivant :
mount(NULL, "/", MS_SLAVE | MS_REC, NULL);
Pour des explications sur les types de propagation lors de déplacements de montages ( MS_MOVE ) et de créations de montages liés ( MS_BIND ), consulter Documentation/filesystems/sharedsubtree.rst .
Restrictions sur les espaces de noms montage
Prenez note des points suivants concernant les espaces de noms montage :
|
[1] |
Chaque espace de noms montage a un espace de noms utilisateur propriĂ©taire. Comme expliquĂ© ci-dessus, quand un nouvel espace de noms montage est créé, sa liste de montages est initialisĂ©e comme copie de la liste de montages dâun autre espace de noms montage. Si le nouvel espace de noms et lâespace de noms depuis lequel la liste de montages a Ă©tĂ© copiĂ©e sont possĂ©dĂ©s par des espaces de noms utilisateur diffĂ©rents, alors le nouvel espace de noms montage est considĂ©rĂ© comme moins privilĂ©giĂ© . |
||
|
[2] |
Lors de la crĂ©ation dâun espace de noms moins privilĂ©giĂ©, les montages partagĂ©s sont rĂ©duits Ă des montages esclaves. Cela permet de sâassurer que les mappages rĂ©alisĂ©s dans des espaces de noms moins privilĂ©giĂ©s ne se propageront pas vers des espaces de noms montage plus privilĂ©giĂ©s. |
||
|
[3] |
Les montages qui viennent sous forme dâunitĂ© unique dâun espace de noms montage plus privilĂ©giĂ© sont verrouillĂ©s ensemble et ne peuvent pas ĂȘtre sĂ©parĂ©s dans un espace de noms montage moins privilĂ©giĂ©. LâopĂ©ration CLONE_NEWNS de unshare (2) circule Ă travers tous les montages de lâespace de noms montage originel comme unitĂ© unique, et les montages rĂ©cursifs se propageant entre les espaces de noms montage se propagent comme unitĂ© unique. |
Dans ce contexte, « ne peuvent pas ĂȘtre sĂ©parĂ©s » signifie que les montages sont verrouillĂ©s de telle façon quâils ne puissent ĂȘtre dĂ©montĂ©s individuellement. En considĂ©rant lâexemple suivant :
$
sudo
sh
#
mount --bind /dev/null /etc/shadow
#
cat /etc/shadow
# Aucune sortie
Les Ă©tapes ci-dessus, rĂ©alisĂ©es dans un espace de noms plus privilĂ©giĂ©, ont créé un montage liĂ© qui dissimule le contenu du fichier dâhachage des mots de passe, /etc/shadow . Pour des raisons de sĂ©curitĂ©, il ne doit pas ĂȘtre possible dâeffectuer un umount (2) de ce montage dans un espace de noms montage moins privilĂ©giĂ© puisque cela permettrait de dĂ©voiler le contenu de /etc/shadow .
Supposons que nous crĂ©ons un nouvel espace de noms montage propriĂ©tĂ© dâun espace de noms utilisateur. Le nouvel espace de noms montage hĂ©ritera des copies de tous les espaces de noms montage prĂ©cĂ©dents. Cependant, ces montages seront verrouillĂ©s parce que le nouvel espace de noms montage est moins privilĂ©giĂ©. Par consĂ©quent, un essai dâ umount (2) du montage Ă©chouera comme cela est montrĂ© dans lâĂ©tape suivante :
#
unshare
--user --map-root-user --mount \
strace -o /tmp/log \
umount /mnt/dir
umount: /etc/shadow: not mounted.
#
grep '^umount' /tmp/log
umount2("/etc/shadow", 0) = -1 EINVAL (Invalid
argument)
Le message dâerreur de mount (8) est un peu dĂ©routant, mais la sortie de strace (1) rĂ©vĂšle que lâappel systĂšme umount2 (2) sous-jacent Ă©choue avec lâerreur EINVAL qui est lâerreur que le noyau renvoie pour indiquer que le montage est verrouillĂ©.
Cependant, il est Ă remarquer quâil est possible dâempiler (et dĂ©sempiler) un montage au-dessus dâun des montages verrouillĂ©s hĂ©ritĂ©s dans un espace de noms montage moins privilĂ©giĂ©.
#
echo
'aaaaa' > /tmp/a
# Fichier Ă monter sur
/etc/shadow
#
unshare --user --map-root-user --mount
sh -c 'mount --bind /tmp/a /etc/shadow; cat /etc/shadow'
aaaaa
# umount /etc/shadow
La commande finale umount (8) ci-dessus, qui est rĂ©alisĂ©e dans lâespace de noms montage initial, rend le fichier /etc/shadow originel Ă nouveau visible dans cet espace de noms.
|
[4] |
Dans le prolongement du point [3], remarquez quâil est possible dâeffectuer un umount (2) sur un sous-arbre entier de montages qui se sont propagĂ©s comme unitĂ© dans un espace de noms montage moins privilĂ©giĂ©, comme cela est illustrĂ© dans lâexemple suivant. |
Dâabord, crĂ©ons un nouvel espace de noms utilisateur et un nouvel espace de noms montage en utilisant unshare (1). Dans le nouvel espace de noms montage, le type de propagation de tous les montages est dĂ©fini comme privĂ©. CrĂ©ons alors un montage liĂ© partagĂ© sur /mnt et une petite hiĂ©rarchie de montages sous ce montage.
$
PS1='ns1#
' sudo unshare --user --map-root-user
--mount --propagation private bash
ns1# echo $$ # PID de lâinterprĂ©teur
nécessaire par la suite
778501
ns1# mount --make-shared --bind /mnt /mnt
ns1# mkdir /mnt/x
ns1# mount --make-private -t tmpfs none /mnt/x
ns1# mkdir /mnt/x/y
ns1# mount --make-private -t tmpfs none /mnt/x/y
ns1# 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
En continuant dans la mĂȘme session dâinterprĂ©teur, crĂ©ons alors un second interprĂ©teur dans un nouvel espace de noms utilisateur et un nouvel espace (moins privilĂ©giĂ©) de noms montage, et vĂ©rifions lâĂ©tat des montages propagĂ©s ayant pour racine /mnt .
ns1#
PS1='ns2# ' unshare --user --map-root-user
--mount --propagation unchanged bash
ns2# 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
Il est à noter dans le résultat ci-dessus que le type de propagation du montage /mnt a été réduit à esclave comme expliqué dans le point [2]. Cela signifie que les évÚnements de sous-montage se propageront du maitre /mnt dans « ns1 », mais que la propagation ne se produira pas dans la direction opposée.
Ă partir dâune fenĂȘtre Ă part du terminal, utilisons alors nsenter (1) pour saisir des espaces de noms montage et utilisateur correspondant à « ns1 ». Dans cette fenĂȘtre de terminal, lions rĂ©cursivement les montages /mnt/x Ă lâemplacement /mnt/ppp .
$
PS1='ns3#
' sudo nsenter -t 778501 --user --mount
ns3#
mount --rbind --make-private /mnt/x /mnt/ppp
ns3#
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
Parce que le type de propagation du montage parent, /mnt , Ă©tait partagĂ©, le montage rĂ©cursif liĂ© propage un petit sous-arbre de montages sous le montage esclave /mnt dans « ns2 », comme cela peut ĂȘtre vĂ©rifiĂ© en exĂ©cutant la commande suivante dans cette session dâinterprĂ©teur :
ns2#
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
Bien quâil ne soit pas possible dâeffectuer un umount (2) sur une partie du sous-arbre propagĂ© ( /mnt/ppp/y ) dans « ns2 », il est possible dâeffectuer un umount (2) sur le sous-arbre en entier comme cela est montrĂ© avec les commandes suivantes :
ns2#
umount
/mnt/ppp/y
umount: /mnt/ppp/y: not mounted.
ns2#
umount -l /mnt/ppp | sed 's/ - .*//'
#
SuccĂšs...
ns2#
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] |
Les rĂ©glages des attributs de mount (2) MS_RDONLY , MS_NOSUID , MS_NOEXEC et des attributs « atime » ( MS_NOATIME , MS_NODIRATIME , MS_RELATIME ) deviennent verrouillĂ©s quand ils sont propagĂ©s depuis un espace de noms montage plus privilĂ©giĂ© vers un autre espace moins privilĂ©giĂ© et ne peuvent ĂȘtre changĂ©s dans lâespace de noms montage moins privilĂ©giĂ©. |
Ce point est illustrĂ© par lâexemple suivant oĂč, dans un espace de noms montage plus privilĂ©giĂ©, nous crĂ©ons un montage liĂ© qui est marquĂ© comme en lecture seule. Pour des raisons de sĂ©curitĂ©, il ne devrait pas ĂȘtre possible de permettre lâĂ©criture dans le montage dans un espace de noms montage moins privilĂ©giĂ©, et en effet le noyau empĂȘche cela :
$
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: permission denied.
|
[6] |
Un fichier ou un rĂ©pertoire qui est un point de montage dans un espace de noms qui nâest pas un point de montage dans un autre espace de noms peut ĂȘtre renommĂ©, dĂ©liĂ© ou supprimĂ© ( rmdir (2)) dans lâespace de noms montage dans lequel il nâest pas un point de montage (sous rĂ©serve des vĂ©rifications habituelles de permissions). Par consĂ©quent, le point de montage est supprimĂ© dans lâespace de noms montage oĂč il nâest pas un point de montage. |
Auparavant (avant Linux 3.18), essayer de dĂ©lier, renommer ou supprimer un fichier ou un rĂ©pertoire qui Ă©tait un point de montage dans un autre espace de noms montage aboutissait Ă une erreur EBUSY . Ce comportement rencontre des problĂšmes techniques dâapplication (par exemple, pour NFS) et permet des attaques par dĂ©ni de service sur des utilisateurs plus privilĂ©giĂ©s (câest-Ă -dire empĂȘchant des fichiers individuels dâĂȘtre mis Ă jour en utilisant un montage liĂ© au-dessus dâeux).
EXEMPLES
Consulter pivot_root (2).
VOIR AUSSI
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 dans lâarbre des sources du noyau.
TRADUCTION
La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Paul Guillonneau <guillonneau.jeanpaul@free.fr>
Cette traduction est une documentation libre ; veuillez vous reporter Ă la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il nây a aucune RESPONSABILITĂ LĂGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .