Tengo un montón de scripts y aplicaciones de larga duración que almacenan los resultados de salida en un directorio compartido entre algunos usuarios. Me gustaría una forma de asegurarme de que todos los archivos y directorios creados en este directorio compartido tengan u=rwxg=rwxo=rpermisos automáticamente .
Sé que podría usar umask 006al principio mis diversos scripts, pero no me gusta ese enfoque, ya que muchos usuarios escriben sus propios scripts y pueden olvidarse de configurar el umask ellos mismos.
Realmente solo quiero que el sistema de archivos configure los archivos y directorios recién creados con un permiso determinado si está en una carpeta determinada. ¿Es esto posible?
Actualización : creo que se puede hacer con POSIX ACL , utilizando la funcionalidad de ACL predeterminada, pero todo está un poco sobre mi cabeza en este momento. Si alguien puede explicar cómo usar las ACL predeterminadas, probablemente respondería muy bien a esta pregunta.
fuente

Respuestas:
Para obtener la propiedad correcta, puede establecer el grupo setuid bit en el directorio con
Esto asegurará que los archivos creados en el directorio sean propiedad del grupo. Luego debe asegurarse de que todos ejecuten umask 002 o 007 o algo de esa naturaleza, por eso Debian y muchos otros sistemas Linux están configurados con grupos por usuario de forma predeterminada.
No conozco una forma de forzar los permisos que desea si la umask del usuario es demasiado fuerte.
fuente
+spieza? Gracias.A continuación, se explica cómo hacerlo con las ACL predeterminadas, al menos en Linux.
Primero, es posible que deba habilitar la compatibilidad con ACL en su sistema de archivos. Si está utilizando ext4, entonces ya está habilitado. Otros sistemas de archivos (por ejemplo, ext3) deben montarse con la
aclopción. En ese caso, agregue la opción a su/etc/fstab. Por ejemplo, si el directorio está ubicado en su sistema de archivos raíz:Luego vuelva a montarlo:
Ahora, use el siguiente comando para establecer la ACL predeterminada:
Todos los archivos nuevos
/shared/directoryahora 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 de modo para la llamada open (2) o creat (2)), al igual que cuando se usa umask. Algunas utilidades comocp,taryrsynctratarán de preservar los permisos de los archivos de origen que enmascararán su ACL predeterminada si el archivo de origen no se puede escribir en grupo.¡Espero que esto ayude!
fuente
umaskpara todos los usuarios. = / unix.stackexchange.com/questions/71743/…cp, intentará copiar los permisos del archivo fuente. Ni siquieraumaskayuda cuando se usacp. He visto el mismo problema contar. Vea esta pregunta .umask.setfaclworks correctly, supongo que debería fallar, pero no estoy seguro, porque la respuesta no alcanza ese punto.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 acls para usuarios y grupos. Desafortunadamente, debe enumerar todos los usuarios (al menos no pude encontrar una manera de hacer que esto funcione de otra manera):
Nombra el archivo acl.lst y completa tus nombres de usuario reales en lugar de user_X.
Ahora puede configurar esos acls en su directorio emitiendo el siguiente comando:
fuente
en su script de shell (o
.bashrc) puede usar algo como:umask 022umaskes un comando que determina la configuración de una máscara que controla cómo se establecen los permisos de archivo para los archivos recién creados.fuente
umask 002en mi .bashrc.umask 002limita el acceso a otros, dejando el grupo sin cambios. Recuerde, esugo- ese es el grupo de usuarios otros. También recuerde que umask básicamente significa restar de los valores predeterminados. Para archivos:666 - 002significaría 664, lo que significa que el grupo no se ve afectado.