¿Cómo puedo hacer una vista de solo escritura de una carpeta?

12

Quiero tener un lugar en el sistema de archivos que presente una "vista" de solo escritura de otra carpeta a la que tenga acceso de lectura-escritura.

Me imagino algo que tiene un comportamiento similar a un cuadro desplegable de FTP, donde los archivos se pueden copiar pero no leer, por ejemplo:

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

Es importante que esto funcione como en el ejemplo: los contenidos aún son visibles cuando se accede a ellos read-write-view/, y ambas "vistas" son funcionales para un solo usuario.

¿Cómo puedo configurar algo como esto? ¿Algún arreglo inteligente de enlaces simbólicos, tal vez? ¿O una configuración inusual de un montaje de unión?

ændrük
fuente

Respuestas:

2

Hice esta misma pregunta para los buzones de los estudiantes en la lista de correo de samba hace unos años (http://lists.samba.org/archive/samba/2008-September/143610.html) y la respuesta ha funcionado para nosotros. Necesita atributos acl extendidos en su sistema de archivos (del paquete acl), aquí está la respuesta de Jeremy Allison ...

Ok, el problema es que los estudiantes necesitan poder leer el directorio que contiene para poder arrastrar y soltar nuevos archivos allí. La razón es que Samba necesita poder escanear el directorio en su nombre para realizar búsquedas que no distinguen entre mayúsculas y minúsculas.

Pero siempre y cuando no le importe permitir que los estudiantes vean los nombres de los archivos de los demás, puede configurar un DropBox para que los estudiantes puedan escribir en él (y sus propios archivos) pero no editar o ver otros archivos.

En primer lugar, debe asegurarse de que los archivos creados en el directorio de DropBox no sean propiedad del grupo primario del alumno, sino del propietario del grupo del directorio de DropBox. Entonces :

profesores chgrp DropBox

para que sea propiedad del grupo de profesores. Luego configure el bit setgid en el directorio de DropBox para asegurarse de que los archivos creados allí tengan un grupo propietario de maestros.

chmod g + s DropBox

Luego, asegúrese de que un archivo en DropBox pueda ser renombrado o eliminado solo por el propietario del archivo, o por el propietario del directorio, o por root (los mismos permisos que tiene / tmp).

chmod + t DropBox

Luego, permita que los estudiantes escriban en el directorio agregando una ACL

setfacl -mg: estudiantes: rwx DropBox

Siempre y cuando el acl predeterminado esté configurado para que "otros" no tengan permisos, los archivos escritos por un estudiante en ese directorio serán de su propiedad pero tendrán un grupo propietario de "maestros", y los estudiantes no podrán leer cada uno de ellos. otros archivos

Si necesita que los archivos sean propiedad del propietario del directorio, no de los estudiantes que los crearon, debe configurar un recurso compartido por separado como se describe anteriormente, pero luego agregar el parámetro de nivel de recurso compartido:

heredar propietario = sí

lo que hará que los archivos creados dentro de los directorios en ese recurso compartido sean propiedad del directorio contenedor, no del propietario creador.

usuario55604
fuente
1

Puede lograr algo de esto estableciendo los permisos en la carpeta de modo que los usuarios de destino tengan acceso de escritura a la carpeta pero no acceso de lectura.

Por ejemplo, para permitir que cualquiera escriba en una carpeta pero no enumere su contenido, puede hacer lo siguiente:

chmod o=wx folder

O solo para dar acceso a un grupo particular de usuarios:

chgrp groupname folder
chmod o=,g=wx folder

Ahora esos usuarios no podrán enumerar el contenido de la carpeta pero podrán colocar archivos en la carpeta:

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

Esto no hace todo lo que desea, ya que si los usuarios aún pueden acceder a los archivos en la carpeta si pueden adivinar el nombre. Puede minimizar este riesgo a través de un trabajo cron que regularmente mueve archivos de la carpeta del buzón a una ubicación a la que otros usuarios no tienen acceso.

James Henstridge
fuente
1

Puede crear una carpeta desplegable "write-only-view" con acceso rw y usar cronjob o notificación de inodo para mover el contenido a la otra "lectura-escritura-vista".

chorro
fuente
1

Creo que simplemente podría usar el truco de montaje de unión, en /etc/fstab:

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

Entonces, probablemente podrías:

chmod a=wx /path/to/write-only-view
chmod a=rwx /path/to/read-write-view
Cañada
fuente
1

Utilice bindfs , que está diseñado para "montar un directorio en otra ubicación y alterar los bits de permiso".

Comience con una carpeta normal que tenga acceso de lectura y escritura:

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

Use bindfs para montar la carpeta sin acceso de lectura:

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

Verifique que solo se pueda enumerar el contenido de la carpeta original:

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

Verifique que se pueda escribir en la carpeta original a través del montaje:

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

Verifique que los archivos no se puedan leer a través del montaje:

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

Primero, es más fácil pensar en esto a la inversa. Tiene una carpeta que es rw para quien necesita acceso de escritura, y una "vista" de solo lectura de esta carpeta para aquellos que necesitan acceso de solo lectura.

Nunca he podido hacer que la opción mount --bind -o ro funcione correctamente. La forma más confiable de hacerlo es usar nfs. Agregue lo siguiente a / etc / exports

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

luego monte la "vista" de solo lectura con

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

Ahora debería tener una vista de solo lectura de su carpeta original.

Supongo que podría hacer lo mismo con samba / cifs, pero esto solo tendría sentido para el acceso a la red.

Esta solución fue inspirada ( robada ) de este Howto . Espero que ayude.

Chris
fuente
No estoy preguntando por una vista de solo lectura, solo lectura-escritura y solo escritura.
ændrük
0

No creo que esto sea posible, ya que tienes que leer un disco "solo de escritura" para mostrar el contenido.

Si tuviera que vender dicho dispositivo, ¿cómo podría alguien verificar que funcionara? Quizás este sea uno para kickstarter.


fuente
0

Esta no es una respuesta, sino más bien un pensamiento y posiblemente otra pregunta. Para mí, esto suena como si se pudiera implementar a través de algún tipo de gancho o disparador.

Algunos programas en segundo plano pueden ver la carpeta de solo escritura (no mediante sondeo, se puede notificar con FAM o algo así) y luego mover cada archivo fuera de la carpeta de solo lectura tan pronto como aparezca.

MPi
fuente