Baca hanya bind-mount?

9

Saya menggunakan mount -o bind untuk me-mount direktori di dalam chroot, yang berfungsi dengan sangat baik. Masalahnya adalah bahwa saya ingin beberapa direktori bind-mount ini dibaca hanya dalam chroot.

Apa itu mungkin? Jika tidak - cara lain untuk mencapainya?

Saya sedang berpikir tentang menggunakan NFS untuk localhost mounts, tetapi sepertinya berlebihan.


sumber

Jawaban:

6

Menurut artikel ini apakah mungkin. Anda memang membutuhkan kernel terbaru.

mount --bind -o ro /vital_data /untrusted_container/vital_data
Sakit kepala
sumber
16

Jawaban langsung dari artikel LWN :

mount --bind /vital_writable_data /untrusted_container/vital_data
mount -o bind,remount,ro /untrusted_container/vital_data

Didukung sejak Linux 2.6.26.

kebiru-biruan
sumber
4

Di Squeeze dulu hanya bekerja dengan:

mount --bind /src /dst

kemudian

mount -o remount,ro /dst

Sekarang di Debian Wheezy yang harus Anda lakukan:

mount -o remount,ro,bind /dst

untuk menyingkirkan pesan: resource busy.

Sunting: Sekarang di Debian Jessie, mount mencoba untuk menjadi pintar dan me-mount sub dirs, yang jika sudah di-mount dengan bind, menjadi rekursif dan hal-hal buruk terjadi :)

Ada opsi khusus yang memaksa util-linux menjadi 'bodoh' lagi. Solusi adalah ini:

mount --bind --make-rprivate /sbin/ $prefix/sbin/
mount -o remount,ro,bind $prefix/sbin/

Setelah itu Anda dapat me-mount --bind $ prefix / sbin ke direktori lain.

Dari halaman manual:

Operasi subtree bersama. Sejak Linux 2.6.15 dimungkinkan untuk menandai mount dan submountnya sebagai shared, private, slave atau unbindable. Mount yang dibagikan menyediakan kemampuan untuk membuat mirror dari mount tersebut sehingga mount dan unmount di dalam mirror yang merambat ke mirror lainnya. Slave mount menerima propagasi dari masternya, tetapi tidak sebaliknya. Mount pribadi tidak memiliki kemampuan propagasi. Mount yang tidak mengikat adalah mount pribadi yang tidak dapat dikloning melalui operasi bind. Semantik terperinci didokumentasikan dalam file Documentation / filesystems / sharedsubtree.txt di pohon sumber kernel. Operasi yang didukung adalah:

     mount --make-shared mountpoint
     mount --make-slave mountpoint
     mount --make-private mountpoint
     mount --make-unbindable mountpoint

Perintah berikut memungkinkan seseorang untuk secara rekursif mengubah tipe semua mount di bawah mountpoint yang diberikan.

     mount --make-rshared mountpoint
     mount --make-rslave mountpoint
     mount --make-rprivate mountpoint
     mount --make-runbindable mountpoint

mount (8) tidak membaca fstab (5) ketika operasi --make- * diminta. Semua informasi yang diperlukan harus ditentukan pada baris perintah. Perhatikan bahwa kernel Linux tidak memungkinkan untuk mengubah beberapa flag propagasi dengan syscall mount tunggal (2), dan flag tidak dapat dicampur dengan opsi mount lainnya.

Sejak util-linux 2.23 perintah mount memungkinkan untuk menggunakan beberapa flag propagasi bersama-sama dan juga bersama-sama dengan operasi mount lainnya. Fitur ini EKSPERIMENTAL. Bendera propagasi diterapkan oleh syscall mount tambahan (2) ketika operasi mount sebelumnya berhasil. Perhatikan bahwa use case ini bukan atom. Dimungkinkan untuk menentukan flag propagasi di fstab (5) sebagai opsi mount (privat, slave, shared, unbindable, rprivate, rslave, rsports, runbindable).

Anton Valqk
sumber
2

mount --bind / vital_data / untrusted_container / vital_data

mount -o remount, ro, bind / untrusted_container / vital_data

pada mount kedua Anda harus menggunakan "remount, ro, bind" jika tidak semua instance lain / vital_data akan dapat dibaca juga.

rexo
sumber
Tidak, Anda tidak (paling tidak di Linux 3.19). Di mana Anda mengalami perlunya menambahkan bindopsi?
Karl Richter
1
@KarlRichter - Saya belum mengujinya, tetapi man 2 mountmenunjukkan bahwa binddiperlukan: "Sejak Linux 2.6.26, MS_REMOUNTflag dapat digunakan MS_BINDuntuk memodifikasi hanya flag per-mount-point. Ini sangat berguna untuk mengatur atau menghapus" read -hanya "menandai pada titik mount tanpa mengubah sistem file yang mendasarinya. Menentukan mountflags sebagai: MS_REMOUNT | MS_BIND | MS_RDONLYakan membuat akses melalui mountpoint ini hanya-baca, tanpa mempengaruhi titik mount lainnya." (Dari Ubuntu 19.10, Linux man-pagesmerilis 5.0.2, tanggal 2019-08-02.)
mpb
1
@KarlRichter - Pembaruan: Menurut unix.stackexchange.com/a/128388 , versi yang lebih baru dari libmountpanggilan mount()fungsi dua kali selama satu permintaan /usr/bin/mountprogram. Jadi itu adalah versi libmount, bukan versi kernel, yang akan menentukan apakah dua doa /usr/bin/mountdiperlukan atau tidak .
mpb