Cómo funciona umask
Cuando un programa crea un archivo pide un modo, casi siempre 666 (rw-rw-rw-) para archivos y 777 para directorios. El kernel borra entonces cada bit que esté activo en la umask del proceso. Con la habitual 022, se eliminan los bits de escritura de grupo y otros: los archivos quedan en 644, los directorios en 755. Con 077 desaparece todo para grupo y otros: 600 y 700. La máscara solo puede quitar permisos, nunca añadir; un archivo nunca obtiene ejecución de la umask, porque 666 nunca la tuvo.
La aritmética es mode & ~umask, un AND bit a bit con la máscara invertida, no una resta, así que umask 027 sobre 666 da 640, no 639.
Valores habituales
| umask | Archivos | Directorios | Se usa para |
|---|---|---|---|
| 022 | 644 | 755 | Por defecto en la mayoría de las distribuciones; otros pueden leer. |
| 002 | 664 | 775 | Debian/Ubuntu para usuarios con grupo privado; los miembros del grupo pueden escribir. |
| 077 | 600 | 700 | Privado por defecto: servidores, directorios personales con secretos. |
| 027 | 640 | 750 | El grupo puede leer, otros nada; línea base de endurecimiento habitual (CIS). |
Dónde se fija
- Shell:
umaskla imprime,umask 027la fija para la sesión; ponla en~/.profileo/etc/profile.umask -Sla muestra en forma simbólica. - Inicio de sesión:
/etc/login.defs(UMASK) ypam_umaskfijan el valor antes de que arranque la shell;/etc/profileen Debian lo deriva de si el usuario tiene grupo privado. - Servicios systemd:
UMask=0077en la sección[Service]; los servicios no leen los perfiles de shell. - cron: los trabajos se ejecutan con
022independientemente de la configuración de shell del usuario; fíjala dentro del script. - Docker: el valor por defecto del contenedor es
022; cámbialo en el entrypoint o conumasken el comando.
Preguntas
¿Por qué mis archivos nuevos tienen 644 cuando quiero 664?
Tu umask es 022. Pon umask 002 (y asegúrate de que el grupo del directorio es el que quieres, con el bit setgid en el directorio para que los archivos nuevos lo hereden).
¿umask afecta a chmod?
No. chmod fija bits exactos. umask solo se aplica cuando se crea un archivo sin un modo explícito, que es casi siempre.
¿Por qué el directorio recibe ejecución y el archivo no?
Los directorios se crean con 777 antes de la máscara, los archivos con 666. Ejecución en un directorio significa «puede entrar»; los archivos necesitan chmod +x explícitamente.
¿Una umask de cuatro dígitos es distinta?
Un 0 inicial (0022) es solo notación octal. El primer dígito enmascararía setuid/setgid/sticky, que los procesos que crean archivos nunca piden, así que en la práctica no tiene efecto.