umask

Umask (user mask) es un número octal que UNIX utiliza para determinar qué permisos NO asignar automáticamente a los nuevos archivos y directorios creados. Umask sólo restringe permisos; no concede permisos adicionales más allá de lo especificado por defecto.

La mayoría de los sistemas UNIX especifican el valor octal 666 (rw-rw-rw-) para la creación de archivos y el valor octal 777 (rwxrwxrwx) para la creación de directorios. Luego, el kernel utiliza el valor de umask asignado al usuario como máscara para quitar permisos a los definidos por defecto. Todo proceso tiene su umask, heredado del proceso padre del cual desciende.

Los valores más comunes para umask son 022, 027 y 077.
Normalmente el valor de umask se define en /etc/profile

# Set the user's umask
umask 022

aunque es posible setearlo en algún archivo de sesión como ~/.bash_profile, e incluso manualmente para la sessión actual. En todos los casos se utiliza el comando umask que es una función interna de Bash, y de otros shells como ksh y csh. (Si umask fuera un programa separado del shell no podríamos cambiar el valor de umask del proceso shell actual).

Cálculo de permisos

Los permisos de creación se obtienen realizando un AND binario entre el permiso por defecto y el complemento unario (NOT binario) de umask:

Suponiendo que quisiéramos averiguar los permisos de creación de archivos y directorios para umask 027:

permisos archivos:    666 & ~027
permisos directorios: 777 & ~027

Recordemos que el complemento unario puede obtenerse fácilmente reemplazando ceros por unos y unos por ceros:

Complemento unario:
 027 = 000 010 111
~027 = 111 101 000

Luego de obtener el complemento unario se procede a realizar el AND binario:

Archivos:
 666 = 110 110 110
~027 = 111 101 000
------------------
 640 = 110 100 000  <-- (rw-r-----)
Directorios:
 777 = 111 111 111
~027 = 111 101 000
------------------
 750 = 111 101 000  <-- (rwxr-x---)

En bash

$ umask 027
$ mkdir foo
$ touch bar
$ ls -l
drwxr-x---  2 xleo xleo    48 2009-08-19 01:09 foo
-rw-r-----  1 xleo xleo     0 2009-08-19 01:10 bar

Referencias

Tags: ,