umask
umask (abreviatura de user mask, máscara de usuario) es una orden y una función en entornos POSIX que establece los permisos por defecto para los nuevos archivos y directorios creados por el proceso actual.
Los sistemas Unix modernos permiten que las máscaras se especifiquen de dos modos:
- Un permiso por defecto, también llamado máscara simbólica. Por ejemplo, u=rwx,g=rwx,o=
- Un número en octal que controla qué permisos se enmascararán (no se establecerán) para cualquier nuevo archivo, por ejemplo, 007.
En ambos casos debe tenerse en cuenta que la mayoría de los sistemas Unix no permiten que nuevos archivos sean creados con permisos de ejecución activados, independientemente de la máscara.
Máscaras simbólicas
Una máscara establecida a u=rwx,g=rwx,o= implica que los nuevos archivos tendrán los permisos rw-rw----, y los nuevos directorios tendrán los permisos rwxrwx---.
Ejemplo de máscara simbólica
Máscara en octal
Las máscaras en octal se calculan a través del AND binario del complemento unario del argumento (utilizando el NOT binario) y los permisos completos.
Los cambios tendrán efecto únicamente durante la sesión actual.
El modo de acceso completo es 666 en el caso de archivos, y 777 en el caso de directorios. La mayoría de los shells de Unix proporcionan una orden umask que afecta a todos los procesos hijos ejecutados en ese shell.
Una máscara común es 022 (enmascarando los permisos de escritura para el grupo y para otros), lo que asegura que nuevos archivos sólo pueden modificarse por el propietario (es decir, el usuario que los creó). Otro valor de máscara común es 002, que deja permisos de escritura para los miembros del grupo al que pertenece el archivo. Esto puede utilizarse en archivos en áreas de trabajo compartidas, en las que varios usuarios trabajan con los mismos archivos.
Ejemplos de máscara en octal
Asumiendo que la máscara tiene el valor 174, cualquier nuevo archivo se creará con los permisos 602 y cualquier nuevo directorio tendrá permisos 603 porque:
6668 AND NOT(1748) = 6028
6668 = (110 110 110)2 1748 = (001 111 100)2 NOT(001 111 100)2 = (110 000 011)2 (110 110 110)2 AND (110 000 011)2 = (110 000 010)2 6668 NOT (174)8 (602)8
mientras que
7778 AND NOT(1748) = 6038
7778 = (111 111 111)2 1748 = (001 111 100)2 NOT(001 111 100)2 = (110 000 011)2 (111 111 111)2 AND (110 000 011)2 = (110 000 011)2 7778 NOT (174)8 (603)8
En Bash:
$ umask 0174 $ mkdir foo $ touch bar $ ls -l drw-----wx 2 dave 512 Sep 1 20:59 foo -rw-----w- 1 dave 0 Sep 1 20:59 bar
Utilizando la máscara anterior, el 1 octal previene que se establezca el bit de ejecución, el 7 octal previene que se establezca cualquier bit del grupo, y el 4 octal previene que se establezca el bit de lectura para otros.
Consejos
- Cuando se utiliza umask hay que tener en cuenta que sólo afecta al usuario con el que se está conectado en ese momento.
- Si se utiliza (S)FTP debe reiniciarse el demonio (S)FTP una vez que se establece la máscara. Adicionalmente, se debe reconectar al servidor para que la máscara tenga efecto.
Para saber que permisos se deben asignar, partamos de los permisos que se requieren:
Si partimos de que los permisos por defecto para archivos son 666 y necesitamos que nuestros archivos se creen con 660, entonces:
666 - 660 = 006
Véase también
Enlaces externos
- Página man de umask(2) de OpenBSD
- "Setting Permissions" de "The GNU C Library Reference Manual"
- "UMask details"