Hacer que todos los archivos nuevos en un directorio sean accesibles para un grupo


131

Supongamos que tengo dos usuarios Alice y Bob y un grupo GROUPNAME y una carpeta foo, ambos usuarios son miembros de GROUPNAME (que usan Linux y ext3).

Si ahorro como usuario Alice un fichero foo, los permisos son: -rw-r--r-- Alice Alice. Sin embargo, ¿es posible lograr que cada archivo guardado en algún subdirectorio footenga permisos -rwxrwx--- Alice GROUPNAME(es decir, la propietaria Alice, grupo GROUPNAME)?


Respuestas:


91

Puede controlar los bits de permiso asignados con umasky el grupo haciendo que el directorio se establezca en GROUPNAME.

$ umask 002            # allow group write; everyone must do this
$ chgrp GROUPNAME .    # set directory group to GROUPNAME
$ chmod g+s .          # files created in directory will be in group GROUPNAME

Tenga en cuenta que debe hacer chgrp/ chmodpara cada subdirectorio; no se propaga automáticamente (es decir, ni los directorios existentes ni los creados posteriormente bajo un directorio setgid serán setgid , aunque este último estará en el grupo GROUPNAME).

También tenga en cuenta que umaskes un atributo de proceso y se aplica a todos los archivos creados por ese proceso y sus hijos (que heredan el umaskefecto en su padre en ese fork()momento). Es posible que los usuarios necesiten configurar esto ~/.profiley que tengan que estar atentos a cosas no relacionadas con su directorio que necesitan permisos diferentes. Los módulos pueden ser útiles si necesita configuraciones diferentes al hacer cosas diferentes.

Puede controlar las cosas un poco mejor si puede usar ACL POSIX; debería ser posible especificar una máscara de permisos y un grupo, y hacer que se propaguen de manera sensata. Sin embargo, el soporte para las ACL POSIX es algo variable.


66
Los subdirectorios creados después de configurar setgid en el directorio padre tendrán setgid configurado automáticamente.
Arrowmaster

2
@Arrowmaster: En algunos sistemas, tal vez, pero no en todos; Probé en OSX y no se propaga, al menos para no root.
geekosaur

2
Bien en Debian (y supongo que la mayoría de las otras distribuciones de Linux) el setgid y el nombre del grupo se propagan.
Arrowmaster

3
En OS X, el bit setgid en un directorio simplemente se ignora; Los archivos y directorios nuevos siempre reciben el grupo de su directorio contenedor.
John Flatness

¿También es posible que los archivos copiados o movidos a foo (usando cp resp. Mv) obtengan los permisos deseados automáticamente ( -rwxrwx--- A G)?
estudiante

106

Si es posible, use listas de control de acceso (ACL) .

En Linux, asegúrese de que el sistema de archivos que está utilizando sea compatible con ACL (la mayoría de los sistemas de archivos Unix lo hacen). Es posible que deba cambiar las opciones de montaje para habilitar las ACL: con ext2 / ext3 / ext4, debe especificar la aclopción de montaje explícitamente, por lo que la entrada /etc/fstabdebería ser similar /dev/sda1 / ext4 errors=remount-ro,acl 0 1. Ejecutar mount -o remount,acl /para activar las ACL sin reiniciar. También instale las herramientas de línea de comandos de ACL getfacly setfacl, generalmente, se proporciona en un paquete llamado acl.

Ahora que ha finalizado la configuración única, cambie la ACL del directorio para otorgar al grupo permisos de escritura y hacer que estos permisos sean heredados por los archivos recién creados. Bajo Linux:

setfacl -d -m group:GROUPNAME:rwx /path/to/directory
setfacl -m group:GROUPNAME:rwx /path/to/directory

Si ACL no son una opción, hacer que el directorio propiedad del grupo GROUPNAME, y establecer sus permisos a 2775 o 2770: chmod g+rwxs /path/to/directory. El saquí significa el bit setgid; para un directorio, significa que los archivos creados en este directorio pertenecerán al grupo propietario del directorio.

También deberá configurar la máscara de Alice y Bob para que todos sus archivos se puedan escribir en grupo de forma predeterminada. La umask predeterminada en la mayoría de los sistemas es 022, lo que significa que los archivos pueden tener todos los permisos excepto escribir por grupo y otros. Cambie eso a 002, lo que significa prohibir solo el permiso de escritura por otro. Por lo general, pondría esa configuración en su ~/.profile:

umask 002    # or 007 to have files not readable by others

66
+1 - Respuesta muy completa. Nunca supe que se podía volver a montar / sobre la marcha. Bueno saber.
boehj

1
El comando setfacl -d no funciona para mí porque los archivos contenidos en ese directorio tienen una máscara r que niega cualquier permiso de escritura. Me encantaría algo de ayuda. Ver unix.stackexchange.com/questions/71743/…
Ben McCann

2
@its_me Q1: Muestro un mountcomando con la remountopción, por lo que no se usa fstab. Tener acldos veces significa que el sistema de archivos ya estaba montado con la aclopción, y es inofensivo. acl es el valor predeterminado para ext4 en los núcleos recientes, por cierto (el parche todavía era nuevo cuando escribí esta respuesta). P2: Puede ejecutar los comandos en cualquier orden.
Gilles

1
@its_me Sí, su comprensión es correcta, es solo que no importa en qué orden agregue las entradas
Gilles

8
deberías mejorar la respuesta y luego usarla en GROUPNAMElugar de hacerlo G, para que quede más claro
llama el

24

Esta pregunta es una buena opción para Linux acl. Como no declaras tu sistema operativo, asumiré Linux en lo que sigue. Aquí hay una sesión de ejemplo.

No conozco un acltutorial realmente bueno , pero podrías hacerlo peor que http://www.vanemery.com/Linux/ACL/linux-acl.html

Tenga en cuenta que el valor predeterminado se aclcomporta como una máscara de usuario local. Dado que, al menos en Linux, las máscaras de u se aplican a nivel mundial, esta es la única forma que sé para obtener el efecto de una máscara de usuario local. Por alguna razón, esta es una característica poco conocida. La red está llena de personas que preguntan sobre una anulación de umask local, pero casi nadie parece pensar en usarla acl.

También tenga en cuenta que necesita montar la partición en la que está trabajando con aclsoporte, por ejemplo.

/dev/mapper/debian-acl /mnt/acl        ext3    defaults,acl        0       2

La sesión sigue:

/mnt/acl$ mkdir foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: faheem
user::rwx
group::r-x
other::r-x

Establezca el grupo de footo be staffy establezca la acl de group y user of footo rwx.

/mnt/acl$ chgrp staff foo
/mnt/acl$ setfacl -R -m u::rwx,g::rwx foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: staff
user::rwx
group::rwx
other::r-x

Establezca también las acls predeterminadas de usuario y grupo rwx. Esto define los permisos de los que los archivos y directorios heredan foo. Por lo tanto, todos los archivos y directorios creados bajo foo tendrán permisos de grupo rw.

/mnt/acl$ setfacl -d --set u::rwx,g::rwx,o::- foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: staff
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::---

Ahora cree algunos archivos foocomo usuarios faheemy john.

/mnt/acl$ cd foo
/mnt/acl/foo$ touch bar

# switch to user john for this next command.

/mnt/acl/foo$ touch baz

Lista de archivos. Tenga en cuenta que tanto los archivos de propiedad faheemcomo los archivos de propiedad johnse crean con permisos de grupo rw.

/mnt/acl/foo$ ls -la
total 3
drwxrwxr-x+ 2 faheem staff  1024 May  9 01:22 .
drwxr-xr-x  4 faheem faheem 1024 May  9 01:20 ..
-rw-rw----  1 faheem faheem    0 May  9 01:20 bar
-rw-rw----  1 john   john      0 May  9 01:22 baz
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.