This article needs additional citations for verification. (March 2017) |
Autor(es) original(es) | Laboratorios Bell de AT&T |
---|---|
Desarrollador(es) | Varios desarrolladores comerciales y de código abierto |
Lanzamiento inicial | 1978 (1978) |
Sistema operativo | Unix y similares |
Plataforma | Multiplataforma |
Tipo | Dominio |
En informática, umask
es un comando que determina la configuración de una máscara que controla cómo se establecen los permisos de archivoumask
para los archivos recién creados. También puede afectar la forma en que se cambian explícitamente los permisos de archivo. también es una función que establece la máscara, o puede hacer referencia a la máscara en sí, que se conoce formalmente como máscara de creación del modo de archivo . La máscara es una agrupación de bits , cada uno de los cuales restringe cómo se establece su permiso correspondiente para los archivos recién creados. Los bits de la máscara se pueden cambiar invocando el umask
comando.
En sistemas tipo Unix , cada archivo tiene un conjunto de atributos que controlan quién puede leerlo, escribirlo o ejecutarlo. Cuando un programa crea un archivo, los permisos del archivo están restringidos por la máscara. Si la máscara tiene un bit establecido en "1", entonces el permiso de archivo inicial correspondiente estará deshabilitado . Un bit establecido en "0" en la máscara significa que el permiso correspondiente será determinado por el programa y el sistema de archivos . En otras palabras, la máscara actúa como un filtro de última etapa que elimina los permisos a medida que se crea un archivo; cada bit que se establece en "1" elimina su permiso correspondiente. Los permisos pueden ser cambiados más tarde por los usuarios y los programas que utilicen chmod
.
Cada programa (técnicamente llamado proceso ) tiene su propia máscara y puede cambiar sus configuraciones mediante una llamada de función. Cuando el proceso es un shell , la máscara se establece con el umask
comando. Cuando un shell o proceso lanza un nuevo proceso, el proceso hijo hereda la máscara de su proceso padre. Generalmente, la máscara solo afecta los permisos de archivo durante la creación de nuevos archivos y no tiene efecto cuando se cambian los permisos de archivo en archivos existentes; sin embargo, el chmod
comando verificará la máscara cuando las opciones de modo se especifiquen mediante el modo simbólico y no se especifique una referencia a una clase de usuarios.
La máscara se almacena como un grupo de bits. Puede representarse como notación binaria , octal o simbólicaumask
. El comando permite configurar la máscara como notación octal (eg 0754
) o simbólica (eg u=,g=w,o=wx
).
El umask
comando se utiliza con sistemas operativos tipo Unix y la umask
función está definida en la especificación POSIX.1 .
La máscara, el umask
comando y la umask
función no formaban parte de la implementación original de UNIX . El sistema operativo evolucionó en un entorno de centro informático relativamente pequeño, donde la seguridad no era un problema. Con el tiempo, creció hasta dar servicio a cientos de usuarios de diferentes organizaciones. Al principio, los desarrolladores hicieron que los modos de creación de archivos clave fueran más restrictivos, especialmente para los casos de violaciones de seguridad reales, pero esta no fue una solución general. La máscara y el umask
comando se introdujeron alrededor de 1978, en la séptima edición del sistema operativo, [1] para que pudiera permitir a los sitios, grupos e individuos elegir sus propios valores predeterminados. Desde entonces, la máscara se ha implementado en la mayoría, si no en todas, las implementaciones contemporáneas de sistemas operativos similares a Unix.
En un shell, la máscara se configura mediante el umask
comando. La sintaxis del comando es: [2]
umask [ -S ] [ expresión de máscara ]
(Los elementos entre paréntesis son opcionales).
Si umask
se invoca el comando sin argumentos, se mostrará la máscara actual. La salida estará en notación octal o simbólica , según el sistema operativo. [3]
En la mayoría de los shells , pero no en el shell C , el -S
argumento (ie umask -S
) indicará umask
que se debe mostrar mediante notación simbólica. Por ejemplo:
$ umask # muestra el valor actual (como octal) 0022
$ umask -S # muestra el valor actual simbólicamente u = rwx,g = rx,o = rx
Si se invoca el umask
comando con un argumento octal, establecerá directamente los bits de la máscara en ese argumento:
$ umask 007 # establece la máscara en 007
$ umask # muestra la máscara (en octal) 0007 # 0 - permisos especiales (setuid | setgid | sticky) # 0 - (u)ser/propietario parte de la máscara # 0 - (g)roup parte de la máscara # 7 - (o)thers/not-in-group parte de la máscara
$ umask -S # muestra la máscara simbólicamente u = rwx,g = rwx,o =
Si se introducen menos de 4 dígitos, se supone que hay ceros a la izquierda. Se producirá un error si el argumento no es un número octal válido o si tiene más de 4 dígitos. [4] Los tres dígitos octales situados más a la derecha se refieren a las clases de usuario "propietario", "grupo" y "otro", respectivamente. Si hay un cuarto dígito, el dígito situado más a la izquierda (de orden superior) se refiere a tres atributos adicionales: el bit setuid , el bit setgid y el bit sticky .
Dígito octal en umask el comando | Permisos que la máscara prohibirá que se establezcan durante la creación del archivo |
---|---|
0 | Se puede establecer cualquier permiso (leer, escribir, ejecutar) |
1 | La configuración del permiso de ejecución está prohibida (lectura y escritura) |
2 | La configuración del permiso de escritura está prohibida (lectura y ejecución) |
3 | La configuración de permisos de escritura y ejecución está prohibida (solo lectura) |
4 | La configuración del permiso de lectura está prohibida (escritura y ejecución) |
5 | La configuración de permisos de lectura y ejecución está prohibida (solo escritura) |
6 | La configuración de permisos de lectura y escritura está prohibida (solo ejecución) |
7 | Se prohíbe establecer todos los permisos (sin permisos) |
Cuando umask
se invoca utilizando notación simbólica, modificará o establecerá los indicadores según lo especificado por maskExpression con la sintaxis:
Tenga en cuenta que esta sintaxis no funciona cuando se utiliza C shell debido al comportamiento diferente de su comando incorporado umask
.
Varias maskExpressions se separan mediante comas.
Un espacio termina la (s) maskExpression (s).
Los permisos se aplican a diferentes clases de usuarios:
Carta | Clase | Descripción |
---|---|---|
u | usuario | El dueño |
g | grupo | usuarios que son miembros del grupo del archivo |
o | otros | usuarios que no son los propietarios del archivo o miembros del grupo |
a | todo | los tres anteriores, lo mismo que ugo . (El valor predeterminado si no se especifican letras de clase de usuario en maskExpression ). |
El operador especifica cómo se deben ajustar los modos de permiso de la máscara.
Operador | Efecto sobre la mascarilla |
---|---|
+ | Los permisos especificados están habilitados, los permisos que no se especifican no se modifican. |
- | No se puede habilitar los permisos especificados y los permisos que no se especifican no se modifican. |
= | Los permisos especificados están habilitados, los permisos que no están especificados no pueden habilitarse. |
Los símbolos de permiso indican qué configuraciones de permisos de archivo deben permitirse o prohibirse mediante la máscara.
Símbolo | Nombre | Descripción |
---|---|---|
r | leer | leer un archivo o enumerar el contenido de un directorio |
w | escribir | escribir en un archivo o directorio |
x | ejecutar | ejecutar un archivo o recurrir a un árbol de directorios |
X | ejecución especial | Ver Modos simbólicos . |
s | setuid/gid | Ver Permisos de archivo . |
t | pegajoso | Ver permisos de archivo. |
Por ejemplo:
máscara de usuario u-w
Prohíba que se le otorgue permiso de escritura al usuario . El resto de los indicadores de la máscara no se modifican.
Ejemplo de cambios múltiples:
máscara u-w,g = r,o+r
Esto configuraría la máscara de modo que:
A continuación se muestran más ejemplos del uso del umask
comando para cambiar la máscara:
umask orden emitida | Cómo afectará la máscara a los permisos de los archivos/directorios creados posteriormente |
---|---|
umask a+r | permite habilitar el permiso de lectura para todas las clases de usuario; el resto de los bits de la máscara no se modifican |
umask a-x | Prohíbe habilitar el permiso de ejecución para todas las clases de usuario; el resto de los bits de la máscara no se modifican |
umask a+rw | permite habilitar permisos de lectura o escritura para todas las clases de usuario; el resto de los bits de la máscara no se modifican |
umask +rwx | permite habilitar permisos de lectura, escritura o ejecución para todas las clases de usuario. (Nota: en algunas plataformas UNIX, esto restaurará la máscara a un valor predeterminado). |
umask u=rw,go= | permitir que se habilite el permiso de lectura y escritura para el propietario, mientras que se prohíbe que se habilite el permiso de ejecución para el propietario; prohibir habilitar cualquier permiso para el grupo y otros |
umask u+w,go-w | permitir que se habilite el permiso de escritura para el propietario; prohibir que se habilite el permiso de escritura para el grupo y otros; |
umask -S | mostrar la máscara actual en notación simbólica |
umask 777 | No permitir permisos de lectura, escritura y ejecución para todos (probablemente no sea útil porque ni siquiera el propietario puede leer archivos creados con esta máscara). |
umask 000 | Permitir permisos de lectura, escritura y ejecución para todos (riesgo de seguridad potencial) |
umask 077 | permitir permisos de lectura, escritura y ejecución para el propietario del archivo, pero prohibir permisos de lectura, escritura y ejecución para todos los demás |
umask 113 | permitir que se habilite el permiso de lectura o escritura para el propietario y el grupo, pero no el permiso de ejecución; permitir que se habilite el permiso de lectura para otros, pero no el permiso de escritura o ejecución |
umask 0755 | equivalente a u-rwx,go=w . ( 0 Especifica que se pueden habilitar los modos especiales (setuid, setgid, sticky). |
Ejemplo que muestra el efecto de umask
:
$ umask -S # Muestra la configuración (frecuentemente inicial) u=rwx,g=rx,o=rx $ gcc hello.c # Compila y crea el archivo ejecutable a.out $ ls -l a.out -rwxr-xr-x 1 me developer 6010 Jul 10 17:10 a.out $ # La umask prohíbe el permiso de escritura para el grupo y otros $ ls > listOfMyFiles # El archivo de salida creado por redirección no intenta establecer eXecute $ ls -l listOfMyFiles -rw-r--r-- 1 me developer 6010 Jul 10 17:14 listOfMyFiles $ # La umask prohíbe el permiso de escritura para el grupo y otros $ ############################################################### $ umask u-w # eliminar permiso de escritura del usuario de umask $ umask -S u=rx,g=rx,o=rx $ ls > protectedListOfFiles $ ls -l protectedListOfFiles -r--r--r-- 1 me developer 6010 Jul 10 17:15 protectedListOfFiles $ rm protectedListOfFiles anular r--r--r-- me/developer para protectedListOfFiles? $ # advertencia de que protectedListOfFiles no es escribible, al responder Y se eliminará el archivo $ ############################################################################################ $ umask g-r,or # lectura de grupo eliminada y otras lecturas de la máscara $ umask -S u=rx,g=x,o=x $ ls > secretListOfFiles $ ls -l secretListOfFiles -r-------- 1 me developer 6010 Jul 10 17:16 secretListOfFiles
La máscara se aplica siempre que se crea un archivo. Si la máscara tiene un bit establecido en "1", eso significa que el permiso de archivo correspondiente siempre estará deshabilitado cuando se creen archivos posteriormente. Un bit establecido en "0" en la máscara significa que el permiso correspondiente será determinado por el proceso solicitante y el sistema operativo cuando se creen archivos posteriormente. En otras palabras, la máscara actúa como un filtro de última etapa que elimina los permisos a medida que se crea un archivo; cada bit que se establece en "1" elimina ese permiso correspondiente para el archivo.
dígito al umask mando | Binario en la máscara | Negación de la máscara | AND lógico con solicitud "rwx" [5] |
---|---|---|---|
0 | 000 | 111 | rwx |
1 | 001 | 110 | rw- |
2 | 010 | 101 | receta |
3 | 011 | 100 | o-- |
4 | 100 | 011 | -wx |
5 | 101 | 010 | -w- |
6 | 110 | 001 | --incógnita |
7 | 111 | 000 | --- |
Programáticamente, el sistema operativo aplica la máscara negando (complementando) primero la máscara y luego realizando un AND lógico con el modo de archivo solicitado. En el [probablemente] primer manual de UNIX que describe su función, [6] el manual dice:
El modo actual... del archivo recién creado es el y lógico del modo dado y el complemento del argumento. Solo participan los 9 bits de orden inferior de la máscara (los bits de protección). En otras palabras, la máscara muestra [indica] los bits que se deben desactivar cuando se crean los archivos.
— Manual de UNIX octava edición, Bell Labs UNIX (manual), AT&T Laboratories
Muchos sistemas operativos no permiten crear archivos con permisos de ejecución. En estos entornos, los archivos recién creados siempre tendrán el permiso de ejecución deshabilitado para todos los usuarios.
La máscara generalmente se aplica únicamente a funciones que crean un nuevo archivo; sin embargo, existen excepciones. Por ejemplo, cuando se utilizan versiones de UNIX y GNUchmod
para establecer los permisos de un archivo, y se utiliza notación simbólica y no se especifica ningún usuario, la máscara se aplica a los permisos solicitados antes de que se apliquen al archivo. Por ejemplo:
$ umask 0000 $ chmod +rwx nombre_archivo $ ls -l nombre_archivo -rwxrwxrwx nombre_archivo $ umask 0022 $ chmod +rwx nombre_archivo $ ls -l nombre_archivo -rwxr-xr-x nombre_archivo
Cada proceso tiene su propia máscara, que se aplica siempre que el proceso crea un nuevo archivo. Cuando un shell, o cualquier otro proceso, genera un nuevo proceso, el proceso hijo hereda la máscara de su proceso padre. [7] Cuando el proceso es un shell , la máscara se cambia mediante el umask
comando. Al igual que con otros procesos, cualquier proceso lanzado desde el shell hereda la máscara de ese shell.
En el núcleo de Linux , los controladores del sistema de archivosfat
, hfs
, hpfs
, ntfs
y admiten una opción de montaje que controla cómo se asigna la información del disco a los permisos. Esto no es lo mismo que la máscara por proceso descrita anteriormente, aunque los permisos se calculan de manera similar. Algunos de estos controladores del sistema de archivos también admiten máscaras independientes para archivos y directorios, utilizando opciones de montaje como .udf
umask
fmask
umask
comando no utiliza este tipo de notación de prefijo; solo se utilizan los dígitos octales.