2009-02-24 26 views
91

Tengo un montón de scripts y aplicaciones de larga duración que almacenan resultados de salida en un directorio compartido entre unos pocos usuarios. Me gustaría una forma de asegurarme de que todos los archivos y directorios creados bajo este directorio compartido tengan automáticamente los permisos u=rwxg=rwxo=r.¿Establecer permisos predeterminados para los archivos y subdirectorios recién creados en un directorio de Linux?

Sé que podría usar umask 006 en la parte superior de mis diferentes scripts, pero no me gusta ese enfoque ya que muchos usuarios escriben sus propios scripts y pueden olvidarse de configurar la umask ellos mismos.

Realmente quiero que el sistema de archivos establezca archivos y directorios recientemente creados con un cierto permiso si está en una carpeta determinada. ¿Es esto posible?

actualización: yo creo se puede hacer con POSIX ACLs, utilizando la funcionalidad de la ACL por defecto, pero es todo un poco por encima de mi cabeza en este momento. Si alguien puede explicar cómo usar las ACL predeterminadas, probablemente responderá esta pregunta muy bien.

+1

Las ACL de POSIX son agradables, sin embargo, un buen 60% de las máquinas que encuentre no las tendrán activadas para ciertos sistemas de archivos, dependiendo de la distribución. Aquí hay una muy buena introducción y ejemplo: http://www.suse.de/~agruen/acl/linux-acls/online/ –

+1

Te refieres al mismo documento que he vinculado :) No he tenido un cambio para leerlo aún pero gracias por la cabeza en el problema de disponibilidad. –

+1

Parece que el enlace en el comentario de Tim Post está muerto, pero gracias a Internet Archive, pude verlo y verificar que http://www.vanemery.com/Linux/ACL/POSIX_ACL_on_Linux.html contenga exactamente el mismo documento. Editaré la pregunta para actualizar el enlace. – rmunn

Respuesta

70

Para obtener el derecho de propiedad, puede establecer el bit setuid grupo en el directorio con

chmod g+rwxs dirname 

Esto asegurará que los archivos creados en el directorio son propiedad del grupo. Debería asegurarse de que todos se ejecuten con umask 002 o 007 o algo por el estilo. Por eso, Debian y muchos otros sistemas Linux están configurados por grupos de usuarios por defecto.

No conozco una forma de forzar los permisos que desea si la umask del usuario es demasiado fuerte.

+20

Esto realmente no proporciona una solución; pregunta por los permisos, no por la propiedad, y la única forma de hacerlo es [con ACL] (http://stackoverflow.com/a/13906099/165673) – Yarin

+2

"... hacer Seguro que todos corren con umask 002 o 007 o algo de esa naturaleza "- eso es un poco exagerado ... ¿Cómo hacer que Postfix, Dovecot, Clam y Spam Assassin hagan esto? – jww

+1

¿Qué hace la parte '+ s'? Gracias. –

4

Es feo, pero puede usar el comando setfacl para lograr exactamente lo que desea.

En una máquina Solaris, tengo un archivo que contiene las aclas para usuarios y grupos. Por desgracia, hay que enumerar todos los usuarios (al menos yo no pude encontrar una manera de hacer que esto funcione de otra manera):

user::rwx 
user:user_a:rwx 
user:user_b:rwx 
... 
group::rwx 
mask:rwx 
other:r-x 
default:user:user_a:rwx 
default:user:user_b:rwx 
.... 
default:group::rwx 
default:user::rwx 
default:mask:rwx 
default:other:r-x 

Nombre del archivo acl.lst y rellene sus nombres reales de los usuarios en lugar de user_X .

Ahora puede establecer los ACL en el directorio mediante la ejecución del siguiente comando:

setfacl -f acl.lst /your/dir/here 
+0

¿Puedes dejar la lista de usuarios si todos son miembros del mismo grupo y solo usar los permisos del grupo? –

+0

Me estaba haciendo la misma pregunta. Ha pasado un tiempo desde que configuré esto. Pero cada vez que obtengo un nuevo usuario (en el mismo grupo que los demás), olvido actualizar la lista y recibo quejas sobre que el nuevo usuario no puede escribir/eliminar archivos. Entonces la respuesta es: No, no puedes. – innaM

54

continuación se explica cómo hacerlo utilizando ACL por defecto, al menos en Linux.

En primer lugar, usted podría necesita habilitar el soporte de ACL en su sistema de archivos. Si está utilizando ext4, ya está habilitado. Otros sistemas de archivos (por ejemplo, ext3) deben montarse con la opción acl. En ese caso, agregue la opción a su /etc/fstab.Por ejemplo, si el directorio se encuentra en su sistema de ficheros raíz:

/dev/mapper/qz-root / ext3 errors=remount-ro,acl 0 1 

A continuación, vuelva a montarla:

mount -oremount/

Ahora, utilice el siguiente comando para establecer la ACL por defecto:

setfacl -dm u::rwx,g::rwx,o::r /shared/directory 

Todos los archivos nuevos en /shared/directory ahora deberían obtener los permisos deseados. Por supuesto, también depende de la aplicación que crea el archivo. Por ejemplo, la mayoría de los archivos no serán ejecutables por nadie desde el principio (dependiendo del argumento del modo para la llamada abierta (2) o creat (2)), al igual que cuando se usa umask. Algunas utilidades como cp, tar y rsync intentarán preservar los permisos de los archivos de origen que enmascararán su ACL predeterminada si el archivo de origen no se pudo escribir en grupo.

Espero que esto ayude!

+0

Parece que esto todavía requiere 'umask' apropiado para todos los usuarios. =/http://unix.stackexchange.com/questions/71743/using-setfacl-to-allow-group-members-to-write-to-any-file-in-a-directory –

+1

@techtonik Como escribí, depende de la aplicación que crea el archivo. Por ejemplo, si usa 'cp', intentará copiar los permisos del archivo fuente. Ni siquiera 'umask' ayuda cuando se usa' cp'. He visto el mismo problema con 'tar'. Ver [esta pregunta] (http://serverfault.com/questions/183800/why-does-cp-not-respect-acls). – pelle

+0

@techtonik He agregado una oración sobre esto en mi respuesta ahora. – pelle

2

en el script de shell (o .bashrc) puede usar algo como:

umask 022

umask es un comando que determina la configuración de una máscara que controla cómo los permisos de archivo se establecen para los archivos recién creados.

+0

Esto no es correcto porque umask limita los permisos que no puede agregar permisos – ACV

Cuestiones relacionadas