¿Puede alguien explicarme cómo umask
afecta la máscara predeterminada de los archivos recién creados si las ACL están activadas? ¿Hay alguna documentación sobre esto?
Ejemplo:
$ mkdir test_dir && cd test_dir
$ setfacl -m d:someuser:rwx -m u:someuser:rwx . # give access to some user
$ getfacl .
# file: .
# owner: myUsername
# group: myGroup
user::rwx
user:someuser:rwx
group::---
mask::rwx
other::---
default:user::rwx
default:user:someuser:rwx
default:group::---
default:mask::rwx
default:other::---
$ umask # show my umask
077
$ echo "main(){}" > x.c # minimal C program
$ make x # build it
cc x.c -o x
$ getfacl x
# file: x
# owner: myUsername
# group: myGroup
user::rwx
user:someuser:rwx #effective:rw-
group::---
mask::rw-
other::---
Yo esperaría mask:rwx
. En realidad, después de configurar, umask
por ejemplo 027
, obtengo el comportamiento esperado.
linux
permissions
posix
acl
jofel
fuente
fuente
mask::rw-
. Pero esa no es realmente tu pregunta, ¿correcto?mask::rw-
y nomask::rwx
cuál era la máscara predeterminada del directorio.Respuestas:
Encontré este ejemplo, titulado: ACL y MASK en Linux . En este artículo se demuestran los siguientes ejemplos que creo que ayudan a comprender cómo
umask
interactúan los ACL e interactúan entre sí.Antecedentes
Cuando se crea un archivo en un sistema Linux,
0666
se aplican los permisos predeterminados, mientras que cuando se crea un directorio,0777
se aplican los permisos predeterminados .ejemplo 1 - archivo
Supongamos que configuramos nuestra umask en 077 y tocamos un archivo. Podemos usar
strace
para ver qué sucede realmente cuando hacemos esto:En este ejemplo, podemos ver que la llamada al sistema
open()
se realiza con los permisos 0666, sin embargo, cuandoumask 077
el núcleo la aplica, los siguientes permisos se eliminan (---rwxrwx
) y nos queda conrw-------
aka 0600.ejemplo - 2 directorio
El mismo concepto se puede aplicar a los directorios, excepto que en lugar de que los permisos predeterminados sean 0666, son 0777.
Esta vez estamos usando el
mkdir
comando. Elmkdir
comando luego llamó a la llamada al sistemamkdir()
. En el ejemplo anterior, podemos ver que elmkdir
comando llamó a la llamada almkdir()
sistema con los permisos predeterminados0777
(rwxrwxrwx
). Esta vez con una umask de022
los siguientes permisos se eliminan (----w--w-
), por lo que nos queda 0755 (rwxr-xr-x
) cuando se crean los directorios.ejemplo 3 (Aplicación de ACL predeterminada)
Ahora creemos un directorio y demostremos qué sucede cuando se le aplica la ACL predeterminada junto con un archivo dentro.
Ahora creemos el archivo
aclfile
:Ahora obtenga permisos del archivo recién creado:
Note la máscara,
mask::rw-
. ¿Por qué no esmask::rwx
como cuando se creó el directorio?Verifique el
luvly
archivo de registro para ver qué permisos predeterminados se usaron para la creación del archivo:Aquí es donde se pone un poco confuso. Con la máscara establecida
rwx
cuando se creó el directorio, esperaría el mismo comportamiento para la creación del archivo, pero no funciona de esa manera. Es porque el núcleo está llamando a laopen()
función con los permisos predeterminados de0666
.Para resumir
chmod
.Referencias
fuente
chmod("file",0760)
->mask:rw
,chmod("file",0770)
->mask:rwx
). Tal vez debería comenzar una nueva pregunta sobre esto ...Por razones de seguridad, el sistema operativo Linux no permite la creación automática de un archivo con un bit de ejecución. Esto es para evitar que los ciberatacantes escriban programas en dichos archivos y los ejecuten si obtienen acceso a su servidor. Es solo una precaución de seguridad. Siempre tendrá que configurar manualmente el bit de ejecución en los archivos después de crearlos con la utilidad chmod
fuente