Carpeta compartida en Linux

Carpeta compartida en Linux

¿Cómo creo una carpeta verdaderamente compartida en un servidor Linux? Quiero que los miembros de un equipo de proyecto puedan leer y escribir cada archivo como si fuera suyo, independientemente de si copiaron o movieron el archivo a la carpeta, si lo crearon ellos mismos dentro de la carpeta o si el archivo fue creado por otros.

Hasta ahora me encontré con los siguientes problemas:

  • umask solo funciona a nivel de todo el sistema e ignora los archivos existentes
  • Las ACL ignoran los archivos movidos a la carpeta por el usuario
  • inotify parece un truco porque luego arregla los permisos, lo que puede causar problemas con algunos documentos de Office
  • regularmente chgrp -R projectteam /folder/causa problemas con el rendimiento, retrasos y copias de seguridad.

Mi solución actual es un recurso compartido SAMBA montado en el mismo servidor force usery force grouphabilitado. Sin embargo, esto es engorroso de administrar para múltiples grupos de proyectos y creo que estoy sufriendo un impacto en el rendimiento.

Cualquier ayuda o idea sería muy apreciada. Ejecuto Debian 10.

Saludos cordiales desde Hamburgo, Alemania.

Miguel

Respuesta1

Si todos los usuarios del proyecto tienen asignado un grupo de proyecto común, puede configurar el bit setgid en el directorio de su proyecto (así como en sus subdirectorios):

find /path/to/teamfolder -type d -exec chmod g+s '{}' \;

También configure permisos ACL en el directorio del proyecto, algo como:

setfacl -d -m u::rwx,g::rwx,o::r-x /path/to/teamfolder

Cuando el bit setgid se establece en un directorio, todos los archivos creados dentro de ese directorio heredarán la propiedad del grupo de ese directorio. Los permisos ACL permitirán que los archivos creados dentro del directorio del proyecto tengan permisos de escritura para el grupo.

Se puede agregar un nuevo usuario como:

sudo usermod -a -G projgrp newuser

Espero que esto ayude.

Respuesta2

Tiene varias capas de configuración para alinear y se puede hacer para que la administración sea bastante simple.

Como sugirió Abhishek, configurar el bit setgid para un directorio es muy útil porque hace que la propiedad del grupo del directorio sea heredable de forma predeterminada para los archivos y directorios recién creados.

Sin embargo, los archivos copiados conservan su propiedad, como habrá observado. Para restablecer la propiedad del grupo, el enfoque incrontab es bueno. Un enfoque más moderno usaría un archivo .path systemd para monitorear las modificaciones y un archivo .service correspondiente para ejecutar chgrp.

Para abordar su pregunta sobre la configuración para admitir muchos grupos de proyectos, considere lo siguiente:

Primero, recuerde que Samba sólo proporciona autenticación y depende de los permisos del sistema de archivos y de las cuentas de usuario del host.

Establezca umask en 0002, lo que permite permisos de escritura grupal de forma predeterminada.

Cree una cuenta de host para cada usuario:

sudo useradd andreas
sudo useradd beatrix
sudo useradd ciela

Cree un "superusuario" de datos distinto del raíz para fines administrativos:

sudo useradd oberst

Crea un grupo para cada proyecto:

sudo groupadd hund
sudo groupadd katz

Cree un directorio de datos para cada proyecto, establezca permisos (incluido el bit setguid) y propiedad. Lo siguiente establece el bit setgid (2), otorga permisos completos (7) al superusuario oberst y al grupo especificado, y no otorga permisos a otros (0), por lo que los miembros que no pertenecen al grupo no pueden leer, escribir o ejecutar:

sudo mkdir /srv/hund
sudo chown oberst:hund /srv/hund
sudo chmod 2770 /srv/hund
sudo mkdir /srv/katz
sudo chown oberst:katz /srv/katz
sudo chmod 2770 /srv/katz 

Agregar usuarios a grupos:

sudo usermod -a -G hund andreas
sudo usermod -a -G hund beatrix
sudo usermod -a -G katz beatrix
sudo usermod -a -G katz ciela

Agregar usuarios a Samba:

sudo smbpasswd -a andreas
sudo smbpasswd -e andreas
sudo smbpasswd -a beatrix
sudo smbpasswd -e beatrix
sudo smbpasswd -a ciela
sudo smbpasswd -e ciela

Edite smb.conf para crear recursos compartidos. Sólo lectura=no permite acceso de escritura y navegable=no impide que otros (es decir, no miembros del grupo) exploren el recurso compartido. Tenga en cuenta el prefijo "@" en la directiva de usuarios válidos, que define el acceso por referencia a grupos de hosts:

[hund]
    path=/srv/hund
    read only=no
    browsable=no
    force group=hund
    valid users=@hund

[katz]
    path=/srv/katz
    read only=no
    browsable=no
    force group=katz
    valid users=@katz

Ahora (quizás después de reiniciar), andreas y beatrix pueden acceder (lectura/escritura) a /srv/hund, pero no ciela, y beatrix y ciela pueden acceder (lectura/escritura) a /srv/katz, pero no andreas.

Todo lo que se necesita para cambiar el acceso de un usuario es simplemente cambiar la membresía del grupo usando usermod.

Por supuesto, también debes configurar contraseñas para las cuentas de host y las cuentas de Samba.

Espero que esto sea útil.

información relacionada