Come posso creare una vista di sola scrittura di una cartella?


12

Voglio avere un posto nel filesystem che presenta una "vista" di sola scrittura di un'altra cartella a cui ho accesso in lettura e scrittura.

Sto immaginando qualcosa di simile nel comportamento a una casella di riepilogo FTP, in cui i file possono essere copiati in esso ma non letti da esso, ad esempio:

$ 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/:

È importante che funzioni come nell'esempio: i contenuti sono ancora visibili quando si accede attraverso read-write-view/ed entrambe le "viste" sono funzionali per un singolo utente.

Come posso impostare qualcosa del genere? Qualche intelligente disposizione di collegamenti simbolici, forse? O una configurazione insolita di un attacco bind?

Risposte:


2

Ho fatto la stessa domanda per le caselle di rilascio degli studenti nella mailing list di samba qualche anno fa (http://lists.samba.org/archive/samba/2008-September/143610.html) e la risposta ha funzionato per noi. Hai bisogno di attributi acl estesi sul tuo filesystem (dal pacchetto acl), ecco la risposta di Jeremy Allison ...

Ok, il problema è che gli studenti devono essere in grado di leggere la directory di contenimento per poter trascinare e rilasciare i nuovi file lì. Il motivo è che Samba deve essere in grado di scansionare la directory per loro conto al fine di effettuare ricerche senza distinzione tra maiuscole e minuscole.

Ma finché non ti dispiace permettere agli studenti di vedere i nomi di ogni altro file, puoi impostare un DropBox in modo che gli studenti possano scrivere in esso (e i loro file) ma non modificare o vedere altri file.

Innanzitutto, si desidera assicurarsi che i file creati nella directory DropBox non siano di proprietà del gruppo primario dello studente, ma del proprietario del gruppo della directory DropBox. Così :

chgrp insegnanti DropBox

per renderlo di proprietà del gruppo di insegnanti. Quindi imposta il bit setgid nella directory DropBox per assicurarti che i file creati al suo interno abbiano un gruppo proprietario di insegnanti.

chmod g + s DropBox

Quindi assicurati che un file in DropBox possa essere rinominato o eliminato solo dal proprietario del file, dal proprietario della directory o dalla radice (stesse autorizzazioni di / tmp).

chmod + t DropBox

Quindi consentire agli studenti di scrivere nella directory aggiungendo un ACL

setfacl -mg: studenti: DropBox rwx

Finché il defaul acl è impostato in modo che "altri" non abbiano autorizzazioni, i file scritti da uno studente in quella directory saranno di proprietà di se stessi ma avranno un gruppo proprietario di "insegnanti" e gli studenti non saranno in grado di leggere ogni altri file.

Se è necessario che i file siano di proprietà del proprietario della directory, non degli studenti che li hanno creati, è necessario impostare una condivisione separata come descritto sopra, ma quindi aggiungere il parametro del livello di condivisione:

ereditare proprietario = sì

che farà sì che i file creati all'interno delle directory in quella condivisione siano di proprietà della directory contenente, non del proprietario che crea.


1

È possibile ottenere questo risultato impostando le autorizzazioni sulla cartella in modo tale che gli utenti di destinazione abbiano accesso in scrittura alla cartella ma non l'accesso in lettura.

Ad esempio, per consentire a chiunque di scrivere in una cartella ma non elencarne il contenuto, è possibile effettuare le seguenti operazioni:

chmod o=wx folder

O per dare a un determinato gruppo di utenti questo accesso:

chgrp groupname folder
chmod o=,g=wx folder

Ora quegli utenti non saranno in grado di elencare il contenuto della cartella ma saranno in grado di inserire i file nella cartella:

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

Questo non fa tutto quello che vuoi, dal momento che se gli utenti possono ancora accedere ai file nella cartella se possono indovinare il nome. È possibile ridurre al minimo questo rischio attraverso un processo cron che sposta regolarmente i file dalla cartella della casella a discesa in un percorso a cui altri utenti non hanno accesso.


1

È possibile creare una cartella di rilascio "sola lettura" con accesso rw e utilizzare cronjob o notifica inode per spostare il contenuto nell'altra "lettura-scrittura-vista".


1

Credo che potresti semplicemente usare l'inganno di bind mount, in /etc/fstab:

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

Quindi, probabilmente potresti:

chmod a=wx /path/to/write-only-view
chmod a=rwx /path/to/read-write-view

1

Utilizzare bindfs , progettato per "montare una directory in un'altra posizione e modificare i bit di autorizzazione".

Inizia con una cartella normale con accesso in lettura e scrittura:

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

Utilizzare bindfs per montare la cartella senza accesso in lettura:

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

Verificare che sia possibile elencare solo il contenuto della cartella originale:

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

Verifica che la cartella originale possa essere scritta tramite il mount:

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

Verifica che i file non possano essere letti tramite il mount:

$ cat write-only-view/d
cat: write-only-view/d: Permission denied

0

Innanzitutto, è più facile pensarlo al contrario. Hai una cartella rw per chiunque abbia bisogno dell'accesso in scrittura e una "vista" di sola lettura di questa cartella per coloro che hanno bisogno dell'accesso in sola lettura.

Non sono mai stato in grado di far funzionare correttamente l'opzione --bind -o ro. Il modo più affidabile per farlo è usare nfs. Aggiungi quanto segue a / etc / exports

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

quindi montare la "vista" di sola lettura con

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

Ora dovresti avere una vista di sola lettura della tua cartella originale.

Suppongo che potresti fare la stessa cosa con samba / cifs, ma questo avrebbe davvero senso solo per l'accesso alla rete.

Questa soluzione è stata ispirata da ( rubato da ) questo Howto . Spero possa essere d'aiuto.


Non sto chiedendo una vista di sola lettura, solo lettura-scrittura e sola scrittura.
ændrük,

0

Non credo sia possibile, dal momento che devi leggere un disco "solo scrittura" per visualizzare i contenuti.

Se dovessi vendere un dispositivo del genere, come farebbe qualcuno a verificarne il funzionamento? Forse questo è uno per kickstarter.


0

Questa non è una risposta, ma davvero più un pensiero e forse un'altra domanda. Per me questo suona come se potesse essere implementato attraverso una sorta di hook o trigger.

Alcuni programmi in background potrebbero guardare la cartella di sola scrittura (non tramite polling, può essere notificata con FAM o qualcosa del genere) e quindi spostare ogni file da esso nella cartella di sola lettura non appena appare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.