Почему я не могу связать-монтировать «/» внутри пространства имен пользователя?

13

Почему это не работает?

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

Они работают хорошо:

$ 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
источник

Ответы:

16

Разница в том, что /есть крепления для детей. Внутри пространства имен пользователя вы не можете отделять унаследованные монтирования от их дочерних монтирований. Более очевидным примером является то, что вам не разрешено umount /proc. В противном случае он может внезапно предоставить вам доступ к файлам, которые были скрыты под другими монтируемыми устройствами. Надстройки иногда используются намеренно в качестве меры безопасности.

Вместо этого вы можете создать рекурсивное монтирование, которое сохраняет все дополнительные монтирования:

$ unshare -rm mount --rbind / /mnt
sourcejedi
источник