
¿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 user
y force group
habilitado. 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.