¿Qué es umask en Linux?

El UMASK en los sistemas Linux o Unix se conoce como Máscara de Usuario o también se denomina Máscara de creación de archivos de usuario. Es un permiso base o por defecto cuando se crea un nuevo archivo o carpeta en la máquina Linux.

Es utilizado por múltiples comandos en Linux como mkdir, touch, tee y otros comandos que crean archivos y directorios. Interviene en todos y cada uno de los pasos cuando se crea un nuevo archivo o directorio.

Permisos de archivos:

Antes de avanzar en la comprensión de umask, vamos a entender los permisos de los archivos en pocas palabras.

Linux es conocido por su seguridad. Cada archivo o directorio en Linux tiene un conjunto específico de permisos y de propiedad. Echemos un vistazo a la clase de usuario de abajo.

Cada archivo en Linux tendrá asociadas las siguientes tres clases de usuario.

  1. Usuario – Usuario propietario del archivo – Por defecto, indica quién creó el archivo, a menos que lo cambies.
  2. Grupo – Indica las personas del grupo que tendrán asignados permisos sobre el fichero.
  3. Otros – Esto restringe a los demás usuarios que no son el propietario ni están en el grupo asignado.

Hay tres tipos de acceso a los archivos para cada clase de usuario mencionada anteriormente.

  1. r – permiso de lectura – la capacidad de leer el contenido del archivo
  2. w – permiso de escritura – la capacidad de cambiar el contenido del archivo
  3. x – permiso de ejecución – la capacidad de ejecutar el archivo como un programa

El concepto anterior te indica quién tiene permiso para leer el contenido del archivo, modificar el contenido del archivo o ejecutar el programa.

Visualización de los permisos – Modo simbólico:

Veamos a continuación la propiedad de los archivos. Puedes obtener la información en tu máquina Linux escribiendo el comando ls -l.

Explicación de la máscara de Linux

El primer carácter de la imagen anterior muestra el tipo de archivo. Puede haber diferentes tipos de archivos en Linux, como se indica a continuación.

Indica el archivo regular simple con diferentes extensiones como .txt, .json, .sh, .py, .rb, etc.

d

Indica el directorio/carpeta

l

Indica un enlace simbólico o symlink o soft link

c

Indica un archivo de dispositivo de caracteres

b

Indica un archivo de dispositivo de bloque

Los siguientes nueve símbolos se dividen en tres partes, como se indica a continuación.

rwx

El propietario del archivo puede leer el contenido, modificar el contenido y ejecutar el archivo como un programa

r-x

Los miembros del grupo «usuarios» pueden leer el contenido y ejecutar el archivo como un programa, pero no pueden modificar el contenido del archivo

r-x

El que no es propietario ni miembro del grupo, es decir, otro, también puede leer el contenido del archivo y ejecutar el archivo como un programa, pero no puede modificar el contenido del archivo

Visualización de los permisos – Modo numérico:

Existe una forma adicional de representar los permisos mediante números que se denomina Modo Numérico.

Veamos la siguiente tabla de permisos de archivos en modo numérico.

0

Ningún permiso

1

–x

Sólo permiso de ejecución

2

-w-

Sólo permiso de escritura

3

-wx

Permiso de escritura y ejecución

4

r–

Sólo permiso de lectura

5

r-x

Permiso de lectura y ejecución

6

rw-

Permiso de lectura y escritura

7

rwx

Permiso de lectura, escritura y ejecución

Si consulto esta tabla de permisos numéricos y la aplico en el mismo directorio mencionado en la imagen anterior, el permiso tendrá el siguiente aspecto

rwx

4+2+1

7

r-x

4+0+1

5

r-x

4+0+1

5

Por lo tanto, el permiso numérico del directorio testdir es 755.

Entendiendo el UMASK:

Vamos a crear un nuevo archivo y un nuevo directorio ejecutando el siguiente comando.

$ touch testfile
$ mkdir testdir

Veamos los permisos de testfile y testdir ejecutando el comando ls -l.

$ ls -l


Output:
drwxr-xr-x  2 niteshb users    4096 Mar 21 22:43 testdir
-rw-r--r--  1 niteshb users       0 Mar 21 22:43 testfile

¿Te has fijado en los permisos? Son diferentes, ¿verdad? Esto se debe al valor de umask por defecto que se establece en la máquina Linux.

Por defecto, en la máquina Linux, el permiso de creación por defecto para un archivo es 666, que da permiso de lectura y escritura al propietario, grupo y otros, y 777 para un directorio, que significa permiso de lectura, escritura y ejecución al propietario, grupo y otros.

Como sabemos, los directorios no pueden ser ejecutables. Entonces, ¿por qué el directorio necesita un permiso de ejecución? Bueno, el permiso de ejecución para el directorio es para permitir el acceso a los contenidos bajo el directorio. Si usando el comando chmod cambiamos el permiso del directorio a 666 e intentamos entrar en el directorio mediante el comando cd, obtendrás un error de permiso denegado.

En la mayoría de las distribuciones de Linux, el valor por defecto para todo el sistema se establece en pam_umask.so o en el archivo /etc/profile. Añadiendo el valor en el archivo ~/.bashrc en el directorio personal del usuario, podemos hacer un valor umask específico para el usuario.

Para comprobar el valor de umask, ejecuta el comando umask.

$umask

El resultado:

0022

Por ahora podemos ignorar el primer 0 de los cuatro números anteriores. Es una parte del permiso avanzado en Linux. Lo que puede impedir que se modifique un archivo aunque se tenga permiso de escritura o podemos impedir que se elimine un archivo aunque se sea el usuario root. En este blog, sólo nos vamos a concentrar en los otros tres números.

Para cambiar el valor de la umask de la sesión actual, ejecuta el siguiente comando seguido del valor deseado.

$umask 0044

Cómo obtienen sus permisos los archivos y directorios:

El valor asociado a umask NO es el permiso que obtienes para tus archivos y directorios.

Hay un cálculo muy sencillo. Como hemos mencionado anteriormente, el valor por defecto para un archivo es 666 y para un directorio, es 777. Para calcular los bits de permiso de los nuevos archivos o directorios, resta el valor de la umask al valor por defecto.

Por ejemplo, vamos a calcular cómo afectará el permiso de un nuevo archivo o directorio a causa de la umask.

  • Ficheros: 666 – 022 = 644. Según el permiso, el propietario puede leer y ejecutar el archivo. Los grupos y otros pueden leer el archivo.
  • Directorio: 777 – 022 = 755. Esto significa que el propietario tiene todos los permisos de lectura, escritura y cd del directorio. El grupo y los demás pueden leer y listar el contenido del directorio y hacer cd al directorio.

También puedes ver el valor de la umask en forma numérica ejecutando el siguiente comando.

$umask

Salida:

u=rwx,g=rx,o=rx

A diferencia de la notación numérica, el valor de la notación simbólica contiene los bits de permiso que se establecerán en los archivos y directorios recién creados.

Establecer el valor de la máscara:

La máscara de creación de archivos puede establecerse utilizando la notación octal o simbólica. Para que los cambios sean permanentes, establece el nuevo valor de umask en un archivo de configuración global, como el archivo /etc/profile, que afectará a todos los usuarios, o en los archivos de configuración del shell de un usuario, como ~/.profile, ~/.bashrc o ~/.zshrc, que sólo afectarán al usuario. Los archivos de usuario tienen prioridad sobre los archivos globales.

Antes de realizar cambios en el valor de umask asegúrate de que el nuevo valor no supone un riesgo potencial para la seguridad. Los valores menos restrictivos que 022 deben utilizarse con mucha precaución. Por ejemplo, umask 000 significa que cualquiera tendrá permiso de lectura, escritura y ejecución para todos los archivos recién creados.

Supongamos que queremos establecer permisos más restrictivos para los archivos y directorios recién creados, de modo que otros no puedan acceder a cd a los directorios y leer archivos. Los permisos que queremos son 750 para los directorios y 640 para los archivos.

Para calcular el valor de umask sólo tienes que restar los permisos deseados al valor por defecto:

valor de Umask: 777-750 = 027

El valor deseado de umask representado en notación numérica es 027.

Para establecer permanentemente el nuevo valor en todo el sistema, abre el archivo /etc/profile con tu editor de texto y cambia o añade la siguiente línea al principio del archivo:

umask 0027

Para que los cambios surtan efecto, ejecuta el siguiente comando de origen o cierra la sesión y vuelve a iniciarla:

$source /etc/profile

Para verificar la nueva configuración crearemos un nuevo archivo y directorio utilizando los siguientes comandos.

$mkdir newtestdir
$touch newtestfile

Si compruebas los permisos utilizando el comando ls, verás que el nuevo archivo tiene 640 y el nuevo directorio 750 permisos, como queríamos:

drwxr-xr--  2 niteshb  users    4096 Mar 21 22:43 newtestdir
-rw-r-----  1 niteshb  users       0 Mar 21 22:43 newtestfile

Otra forma de establecer la máscara de creación de archivos es utilizando la notación simbólica. Por ejemplo umask u=rwx,g=rx,o= es lo mismo que umask 027.

Conclusión:

En esta guía hemos explicado los permisos de Linux y cómo utilizar el comando umask para establecer los bits de permisos de los archivos o directorios recién creados.

Para más información, escribe el siguiente comando en tu terminal.

$man umask
Scroll al inicio