Compartiendo directorios

Llega el momento en que tienes un montón de vídeos, música y demás documentos que te gustaría compartir entre usuarios. Y es que con la llegada de televisores inteligentes, media boxes y demás artilugios resulta muy conveniente instalarse una media server (Media Tomb por ejemplo, o alguno de aquí) en la pc de casa y compartirlo todo con los demás dispositivos.

El problema llega cuando se tienen varios usuarios en dicha pc, como pasa en mi caso, cada integrante de la familia tiene una cuenta en la pc (o mejor dicho, mini servidor) de casa, estas personas tienen su contenido en sus directorios personales y eventualmente los compartirán con el directorio en el cual escucha el media server.

Aquí llegan los problemas con los permisos. Digamos que nuestro servidor UPnP (media server) exportará el contenido de /data por lo cual necesitamos que todo lo que llegue a ese directorio tenga permisos de lectura (y escritura, por si hace falta modificar algún id tag o algo) para el grupo que usaremos.

Primero creamos el grupo a usar:


# groupadd media

Creamos nuestros directorios:


# mkdir -p /data/Music
# mkdir -p /data/Videos
# mkdir -p /data/Pictures
# mkdir -p /data/Documents

Una vez que tenemos nuestra estructura de directorios principal, podemos pasar a definir permisos globales:


# chgrp -R media /data
# chmod -R /data
# chmod -R g+s /data

Con esto le damos permiso de lectura y escritura al dueño de los directorios (root, pero bien podría ser el usuario que usa nuestro UPnP), a los miembros del grupo media y a nadie más.

Ahora agregamos nuestros usuarios al grupo, pero nos encontramos que al copiar o mover archivos o directorios a /data/ se agregan con el grupo media pero con los permisos por defecto (umask) lo cual es un problema ya que los demás usuarios nos serán capaz de modificar los mismos.

En principio puede que esto no sea un problema, pero eventualmente lo será, imagine el caso en que el usuario1 convierte un cd de su artista favorito a ogg y lo agrega a /data/Music/ pero sin incluir los respectivos id tags, si el usuario2 se da cuenta de esto, tendrá que pedirle al usuario1 que lo modifique en lugar de poder hacerlo él mismo.

Para lidiar con esto hay dos posibles soluciones, usar bindfs o listas de acceso (ACL).

BindFS

BindFS es un sistema de archivos basado en FUSE que permite montar un directorio sobre otro modificando varios permisos. En el caso que dispongamos de él, podemos usarlo:


# bindfs --create-for-group=media -gmedia --create-with-perms=u+rw,g+rw,o-rwx -pu+rw,g+rw,o-rwx /data /data

Esto nos asegura que todos lo que se cree nuevo tendrá como grupo media (create-for-group) que el grupo con el cual se montará será media (g), que los permisos se mantendrán de escritura y lectura para el dueño y grupo (create-with-perms y p)

Ahora sólo debemos agregarlo a nuestro /etc/fstab con la siguiente línea:


bindfs#/data    /data    fuse    perms=u+rw:g+rw:o-rwx,create-with-perms=u+rw:g+rw:o-rwx,group=media,create-for-group=media    0    0

Listas de acceso

Las listas de control de acceso o atributos (permisos) extendidos se incluyeron a partir del kernel 2.6, las mismas permiten un mayor control de los permisos de cada archivo.

Para poder ser usadas nuestra partición debe estar montada con la opción acl (la cual debería ser por defecto), es posible usar el comando mount para comprobar las particiones que tenemos habilitadas:

<code
$ mount | grep acl

El comando a usar para modificar dichos permisos es setfacl y en nuestro caso podríamos usarlo de la siguiente forma:


# setfacl -R -d -m u::rw,g::rw,g:media:rwx,o::- /data

¡Y ya está!

Acerca de Paco

Manuel Argüelles, Panameño, programador, vegetariano, pervertido y buena gente.
Esta entrada fue publicada en Uncategorized. Guarda el enlace permanente.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *