Dlaczego nie mogę zamontować binda „/” w przestrzeni nazw użytkownika?

13

Dlaczego to nie działa?

$ unshare -rm mount --bind / /mnt
mount: /mnt: wrong fs type, bad option, bad superblock on /, missing codepage or helper program, or other error.

Te działają ok:

$ unshare -rm mount --bind /tmp /mnt
$ unshare -rm mount --bind /root /mnt
$

$ uname -r  # Linux kernel version
4.17.3-200.fc28.x86_64
sourcejedi
źródło

Odpowiedzi:

16

Różnica polega na tym, że /ma elementy potomne. W przestrzeni nazw użytkownika nie wolno oddzielać odziedziczonych uchwytów od ich potomków. Bardziej oczywistym przykładem jest to, że nie wolno ci umount /proc. W przeciwnym razie może nagle dać ci dostęp do plików ukrytych pod innymi wierzchowcami. Overmount są czasami celowo stosowane jako środek bezpieczeństwa.

Zamiast tego możesz utworzyć rekurencyjne mocowanie wiązania, które zachowuje wszystkie podpięcia:

$ unshare -rm mount --rbind / /mnt
sourcejedi
źródło