Bagaimana cara membuat tautan read-only ke direktori?

18

Salah satu skrip saya secara dinamis membuat symlink seperti:

ln -s /home/hosting/projects/images /home/hosting/projects/demo/images

Bagaimana saya membuatnya sehingga akses melalui tautan hanya baca?

Elmor
sumber

Jawaban:

18

Anda dapat membuat bind-mount read-only .

mount --bind /path/to/source/ /path/to/dest/
mount -o bind,remount,ro /path/to/dest

Ya, ini harus dilakukan dalam dua langkah di kernel setelah kernel Linux 2.6.25 (lihat tautan di atas untuk alasannya).

Atau, sebagai alternatif, sebagai /etc/fstabcontoh baris ref :

/path/to/source/ /path/to/dest/ none bind,ro

Dalam pendekatan mana pun, bind mount hidup di lapisan Virtual Filesystem (VFS), jadi ini tidak spesifik untuk sistem file apa pun, Anda juga tidak benar-benar 'me-mount' apa pun. Jadi, pada dasarnya, ini membuat semacam tautan simbolis untuk Anda, tetapi ini tidak muncul seperti itu.

Dan untuk membalas komentar di bawah tentang kehilangan data ... tidak, instruksi ini tidak menghapus file apa pun. Jika Anda memiliki file yang ada di jalur tujuan, mount ini akan meletakkan ini. Lepaskan saja untuk dapat membuat daftar file Anda di jalur pada sistem file di bawahnya. Bahkan lebih baik; secara umum, hindari pemasangan di atas jalur tujuan yang tidak kosong.

gertvdijk
sumber
1
Hati-hati. Ikuti langkah-langkah ini dan menghapus seluruh direktori cadangan saya dan membuatnya tidak dapat ditulis oleh daemon cadangan saya.
dapatkah Anda memberikan solusi ini sebagai entri fstab?
Throoze
@Throoze Ini dia;)
gertvdijk
Perintah remount mungkin harus: mount -o bind,remount,ro /path/to/destLihat lwn.net/Articles/637501 dari utas yang sama.
anon
mount -o remount,ro /path/to/destmemberi saya kesalahan berikut: mount: mount point is busy.@gertvdijk
alper
2

untuk memasang binding dibaca hanya dengan satu perintah:

mount --bind -r /path/to/source/ /path/to/dest/

untuk melepas

umount /path/to/dest/
Shimon Doodkin
sumber