Mengapa saya tidak dapat mengikat "/" di dalam namespace pengguna?

13

Mengapa ini tidak berhasil?

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

Ini berfungsi 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
sumber

Jawaban:

16

Perbedaannya adalah bahwa /memiliki tunggangan anak. Di dalam namespace pengguna, Anda tidak diizinkan untuk memisahkan tatanan bawaan dari tunggangan anak mereka. Contoh yang lebih jelas adalah bahwa Anda tidak diizinkan melakukannya umount /proc. Jika tidak, itu bisa tiba-tiba memberi Anda akses ke file yang disembunyikan di bawah mount lain. Overmount terkadang digunakan dengan sengaja sebagai langkah pengamanan.

Anda diizinkan membuat bind mount rekursif sebagai gantinya, yang mempertahankan semua sub-mount:

$ unshare -rm mount --rbind / /mnt
sourcejedi
sumber