Bagaimana saya bisa membuat tampilan folder hanya-tulis?

12

Saya ingin memiliki tempat di sistem file yang menyajikan "tampilan" hanya-tulis dari folder lain yang saya miliki akses baca-tulis.

Saya membayangkan sesuatu yang mirip perilaku dengan kotak drop FTP, di mana file dapat disalin ke dalamnya tetapi tidak membacanya, misalnya:

$ ls read-write-view/ write-only-view/
read-write-view/:
a  b  c

write-only-view/:

$ cp d write-only-view/
$ ls read-write-view/ write-only-view/
read-write-view/:
a  b  c  d

write-only-view/:

Penting bahwa ini berfungsi seperti pada contoh - konten masih terlihat saat diakses read-write-view/, dan kedua "tampilan" berfungsi untuk satu pengguna.

Bagaimana saya bisa mengatur sesuatu seperti ini? Beberapa pengaturan tautan simbolik yang pintar, mungkin? Atau konfigurasi bind mount yang tidak biasa?

ændrük
sumber

Jawaban:

2

Saya mengajukan pertanyaan yang sama untuk kotak drop siswa di milis samba beberapa tahun yang lalu (http://lists.samba.org/archive/samba/2008-September/143610.html) dan jawabannya telah berhasil bagi kami. Anda memerlukan atribut acl yang diperluas pada sistem file Anda (dari paket acl), inilah jawaban Jeremy Allison ...

Ok, masalahnya adalah bahwa siswa harus dapat membaca direktori yang berisi agar dapat menarik dan melepaskan file baru di sana. Alasannya adalah bahwa Samba harus dapat memindai direktori atas nama mereka untuk melakukan pencarian case-sensitive.

Tetapi selama Anda tidak keberatan mengizinkan siswa untuk melihat nama file masing-masing, Anda dapat mengatur DropBox sehingga siswa dapat menulis ke dalamnya (dan file mereka sendiri) tetapi tidak mengedit atau melihat file orang lain.

Pertama, Anda ingin memastikan bahwa file yang dibuat di direktori DropBox tidak dimiliki oleh grup utama siswa, tetapi oleh pemilik grup dari direcotry DropBox. Jadi:

guru chgrp DropBox

untuk membuatnya dimiliki oleh kelompok guru. Kemudian atur bit setgid pada direktori DropBox untuk memastikan bahwa file yang dibuat di dalamnya memiliki kelompok guru yang memiliki.

chmod g + s DropBox

Kemudian pastikan bahwa file di DropBox dapat diganti nama atau dihapus hanya oleh pemilik file, atau oleh pemilik direktori, atau dengan root (izin yang sama yang dimiliki / tmp).

chmod + t DropBox

Kemudian izinkan siswa untuk menulis ke direktori dengan menambahkan ACL

setfacl -mg: students: rwx DropBox

Selama defaul acl diatur sehingga "orang lain" tidak memiliki izin, file yang ditulis oleh siswa ke direktori itu akan dimiliki sendiri tetapi akan memiliki grup "guru" yang dimiliki, dan siswa tidak akan dapat membaca masing-masing file lain.

Jika Anda perlu menyebabkan file dimiliki oleh pemilik direktori, bukan oleh siswa yang membuatnya, Anda perlu menyiapkan share terpisah seperti dijelaskan di atas, tetapi kemudian menambahkan parameter level share:

pemilik warisan = ya

yang akan menyebabkan file yang dibuat dalam direktori di bagian itu dimiliki oleh direktori yang berisi, bukan pemilik yang membuat.

user55604
sumber
1

Anda dapat mencapai beberapa hal ini dengan mengatur izin pada folder sedemikian rupa sehingga target pengguna memiliki akses tulis ke folder tetapi tidak membaca akses.

Misalnya, untuk mengizinkan siapa saja menulis ke folder tetapi tidak mencantumkan isinya, Anda dapat melakukan hal berikut:

chmod o=wx folder

Atau untuk hanya memberikan grup pengguna tertentu akses ini:

chgrp groupname folder
chmod o=,g=wx folder

Sekarang para pengguna tidak akan dapat membuat daftar isi folder tetapi akan dapat menempatkan file di folder:

$ ls folder
ls: cannot open directory folder: Permission denied
$ touch folder/filename

Ini tidak melakukan semua yang Anda inginkan, karena jika pengguna masih dapat mengakses file di folder jika mereka dapat menebak namanya. Anda dapat meminimalkan risiko ini melalui pekerjaan cron yang memindahkan file secara teratur dari folder drop box ke lokasi yang tidak dapat diakses oleh pengguna lain.

James Henstridge
sumber
1

Anda dapat membuat folder drop "tampilan-saja-lihat" dengan akses rw dan gunakan cronjob atau notifikasi inode untuk memindahkan konten ke "baca-tulis-tampilan" lainnya.

jet
sumber
1

Saya yakin Anda bisa menggunakan tipuan bind mount, di /etc/fstab:

/path/to/read-write-view /path/to/write-only-view none bind 0 0

Jadi, Anda mungkin bisa:

chmod a=wx /path/to/write-only-view
chmod a=rwx /path/to/read-write-view
Lembah kecil
sumber
1

Gunakan bindfs , yang dirancang untuk "me-mount direktori ke lokasi lain dan mengubah bit izin."

Mulai dengan folder normal yang memiliki akses baca dan tulis:

$ mkdir read-write-view && touch read-write-view/{a,b,c}
$ ls read-write-view
a  b  c

Gunakan bindf untuk memasang folder tanpa akses baca:

$ mkdir write-only-view
$ sudo bindfs --perms=a-r read-write-view write-only-view

Verifikasi bahwa hanya konten folder asli yang dapat dicantumkan:

$ ls read-write-view write-only-view
read-write-view:
a  b  c
ls: cannot open directory write-only-view: Permission denied

Verifikasi bahwa folder asli dapat ditulis melalui mount:

$ echo 'Can you read this?' > write-only-view/d
$ cat read-write-view/d
Can you read this?

Verifikasi bahwa file tidak dapat dibaca melalui mount:

$ cat write-only-view/d
cat: write-only-view/d: Permission denied
ændrük
sumber
0

Pertama, lebih mudah untuk memikirkan hal ini secara terbalik. Anda memiliki folder yang tepat untuk siapa saja yang memerlukan akses tulis, dan "tampilan" folder ini hanya dibaca untuk mereka yang membutuhkan akses hanya baca.

Saya tidak pernah bisa mendapatkan opsi mount --bind -o ro untuk bekerja dengan benar. Cara yang paling dapat diandalkan untuk melakukan ini adalah dengan menggunakan nfs. Tambahkan yang berikut ke / etc / ekspor

/path-to-folder/folder 127.0.0.1(secure,ro,no_root_squash)

lalu pasang "tampilan" hanya baca dengan

mount -o ro 127.0.0.1:/path-to-folder/folder /read-only-folder

Anda seharusnya sekarang memiliki tampilan hanya baca dari folder asli Anda.

Saya kira Anda bisa melakukan hal yang sama dengan samba / cifs, tetapi ini hanya akan masuk akal untuk akses jaringan.

Solusi ini terinspirasi oleh ( dicuri dari ) Howto ini . Saya harap ini membantu.

Chris
sumber
Saya tidak bertanya tentang tampilan baca-saja, hanya baca-tulis dan tulis-saja.
ændrük
0

Saya rasa ini tidak mungkin, karena Anda harus membaca disk "tulis saja" untuk menampilkan isinya.

Jika saya menjual perangkat seperti itu, bagaimana orang dapat memverifikasi bahwa itu berfungsi? Mungkin ini satu untuk kickstarter.


sumber
0

Ini bukan jawaban, tetapi lebih merupakan pemikiran dan mungkin pertanyaan lain. Bagi saya ini terdengar seperti dapat diimplementasikan melalui semacam kait atau pemicu.

Beberapa program di latar belakang mungkin menonton folder write-only (bukan dengan polling, itu dapat diberitahukan dengan FAM atau sesuatu seperti itu) dan kemudian memindahkan setiap file keluar dari itu ke dalam folder read-only segera setelah muncul.

MPi
sumber