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=r
permisos automáticamente .
Sé que podría usar umask 006
al 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
+s
pieza? 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
acl
opció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/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 de modo para la llamada open (2) o creat (2)), al igual que cuando se usa umask. Algunas utilidades comocp
,tar
yrsync
tratará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
umask
para todos los usuarios. = / unix.stackexchange.com/questions/71743/…cp
, intentará copiar los permisos del archivo fuente. Ni siquieraumask
ayuda cuando se usacp
. He visto el mismo problema contar
. Vea esta pregunta .umask
.setfacl
works 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 022
umask
es 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 002
en mi .bashrc.umask 002
limita 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 - 002
significaría 664, lo que significa que el grupo no se ve afectado.