¿Puedo portar permisos de usuario a través de computadoras para un disco duro externo ext4?

16

Tengo una unidad de disco USB 3 externa (capacidad de 2 TB) que probablemente se trasladará de una máquina a otra. El disco tiene una tabla de particiones GUID y una partición ext4. No puedo escribir en el disco a menos que eleve el proceso ( sudo).

A partir de ahora estoy pensando en probar uno o ambos de los siguientes y me gustaría saber las desventajas de cada uno:

  1. chmod 777 /mnt/externalDrive
  2. chown nobody:nogroup /mnt/externalDrive

Si le doy permiso a 777 y el usuario1 (UID: 1005) escribe en él y luego muevo el disco a otra computadora donde user7 es UID: 1005, ¿qué sucede? ¿Se convierte user7 en el propietario del archivo en esa computadora? Me parece que periódicamente tendré que ejecutar chown -R nobody:nogroup /mnt/externalDriveel disco.

¿Algo de lo que estoy considerando es una mala práctica obvia? Lo más probable es que el disco contenga videos, música e imágenes; ninguno de ellos necesita protección como algunos datos financieros.

Lord Loh
fuente
No estoy seguro si te sigo. ¿Intentó configurar los permisos en la unidad externa?
Ramesh
1
Si. ¿Eso es algo bueno?
Lord Loh

Respuestas:

19

Ese es el problema con los sistemas multiusuario, especialmente si tiene más de uno. ;) No hay una forma realmente agradable de hacer lo que quieres. Los enfoques que vienen a la mente serían

  • tener el mismo UID para su cuenta en cada máquina que esté usando su unidad externa (en realidad no es factible, ya que probablemente no todas las máquinas están bajo su control)
  • utilizando un sistema de archivos que desconoce el propietario / grupo conecpt (FAT o NTFS viene a la mente, pero ... aaah, no)

El enfoque más efectivo sería volver a las prácticas comunes. En la mayoría de los sistemas Linux (al menos), existen algunos grupos que generalmente tienen GID comunes. Un ejemplo sería users, que tiene GID 100en la mayoría de las distribuciones de Linux. Si pudieras tener tu respectiva cuenta de usuario en este grupo, podrías

  1. haga que todos los archivos y directorios en su unidad sean propiedad de este grupo
  2. de alguna manera logran tener permisos de grupo apropiados en esos archivos y directorios
  3. de alguna manera logran crear nuevos archivos con la propiedad de grupo apropiada resp. permisos

El primer y segundo punto son fáciles de lograr ( chown, chmod). El tercer punto es un poco más complicado.

La parte de "propiedad de grupo" es relativamente fácil: puede configurar el bit SGID en todos los directorios de la unidad. El bit SGID aplicado a los directorios le dice al núcleo que se comporte de una manera BSDish: BSD hace que cada archivo / directorio creado bajo un grupo de directorios específico pertenezca no al grupo primario del proceso que crea el archivo / directorio (como lo hace Linux), pero por el propietario del directorio padre.

El bit de permiso es un poco difícil. Los permisos de los archivos / directorios recién creados están (entre otros) influenciados por umaskuna máscara de bits que indica qué bits no establecer si no se indica explícitamente. Un umaskvalor común por ejemplo es 022, lo que significa que los bits de escritura para »grupo« y »otros« generalmente no deberían establecerse. Puede cambiar umaska 002, diciéndole que no desea que se borren los permisos de escritura para el grupo, pero la desventaja es que no puede establecer este valor basado en el directorio y, por lo general, no desea tener permisos de escritura para su grupo primario establecido para cada archivo que cree.

Esto podría resolverse utilizando ACL: en una ACL puede establecer un conjunto de permisos masky uno default, que se aplica a todos los archivos y directorios creados dentro de un directorio con este conjunto de ACL. Entonces, una posible solución a su problema sería

  • asegurándose de ser miembro de un grupo común en todos los sistemas en los que desea usar su unidad externa
  • cree todos los archivos y directorios en su unidad propiedad de este grupo y configure el bit SGID en todos los directorios
  • cambie la ACL de todos los directorios para incluir una máscara y permisos predeterminados que le indiquen al kernel que cree cada nuevo archivo / directorio con permisos de escritura establecidos para el grupo.

Ver setfacl(1)y acl(5)para más detalles.

Andreas Wiese
fuente
1
Había un parche flotando para su mapeo y gid en ext4, spinics.net/lists/linux-fsdevel/msg57240.html , pero no creo que haya llegado ...
Rmano
11

Hay otra pregunta similar y se sugiere bindfs allí:

mkdir /home/$user/sda1
bindfs -u $user -g $group /mnt/sda1 /home/$user/sda1

Los usuarios de OSX sugieren la noownersopción de montaje descrita así:

Ignora el campo de propiedad para todo el volumen. Esto hace que todos los objetos aparezcan como propiedad de la ID de usuario 99 y la ID de grupo 99. La ID de usuario 99 se interpreta como la ID de usuario efectiva actual, mientras que la ID de grupo 99 se usa directamente y se traduce como `` desconocido ''.

Michael Shigorin
fuente
bindfs es bastante lento. Probablemente porque es un sistema de archivos FUSE.
Navin
4

El propietario y el grupo de un archivo se almacenan como números. Por lo tanto, el archivo será propiedad de uid = 1005, independientemente del usuario (o ninguno) que esté conectado en el sistema.

Cambiar el usuario / grupo a nadie no solucionará su problema. Entonces solo el usuario de nadie (o miembros del grupo de nadie) podría acceder a los archivos.

Desafortunadamente, no creo que haya una forma de deshabilitar las verificaciones de permisos en ext4. Consulte, por ejemplo, ¿Es posible deshabilitar los permisos de archivo en un sistema de archivos ext3 o ext4?

derobert
fuente
2

Andreas Wiese dice que si tiene una identificación de grupo común en todos los hosts, puede resolver su problema con setgidbit y ACL

Hago una pregunta ¿ ID de grupo predefinidos en las distribuciones de Linux?

Después de que la propia investigación descubriera que dicho grupo existe en todas las distribuciones tocadas: sysidentificación de grupo compartido 3en Debian, Ubuntu, RedHat, Fedora, CentOS, Suse, FreeBSD, OpenBSD, NetBSD, MacOSX, Solaris.

Con este:

$ sudo chgrp -R sys /mnt/data/dir
$ sudo chmod -R g+s /mnt/data/dir
$ sudo setfacl -R -m g:sys:rwx /mnt/data/dir
$ sudo setfacl -R -d -m g:sys:rwx /mnt/data/dir

y sabor de esto:

$ sudo adduser user sys

usted userserá capaz de leer / escribir en cualquier archivo /dir.

La mayoría del trabajo puede ser setgidpoco útil, pero desafortunadamente generalmente tiene poco control sobre umask. Entonces ACL se usa para proporcionar una solución completa.

Ver también:

gavenkoa
fuente