Saltar al contenido

¿Qué es “umask” y cómo funciona?

Solución:

La umask actúa como un conjunto de permisos que las aplicaciones no pueden establecer en los archivos. Es una máscara de creación de modo de archivo para procesos y no se puede configurar para directorios en sí. La mayoría de las aplicaciones no crearían archivos con permisos de ejecución establecidos, por lo que tendrían un valor predeterminado de 666, que luego es modificado por umask.

Como ha configurado umask para eliminar los bits de lectura / escritura para el propietario y los bits de lectura para otros, un valor predeterminado como 777 en las aplicaciones daría lugar a que los permisos de archivo se 133. Esto significaría que usted (y otros) podrían ejecutar el archivo y otros podrían escribir en él.

Si desea que los archivos no sean leídos / escritos / ejecutados por nadie más que el propietario, debe usar una máscara de usuario como 077 para desactivar esos permisos para el grupo y otros.

En contraste, una umask de 000 hará que los directorios recién creados sean legibles, escribibles y descendentes para todos (los permisos serán 777). Tal umask es muy inseguro y nunca debe configurar el umask en 000.

La umask predeterminada en Ubuntu era 022 lo que significa que los archivos recién creados son legibles por todos, pero solo el propietario puede escribirlos:

[email protected]:~$ touch new-file-name
[email protected]:~$ ls -dl new-file-name
-rw-r--r-- 1 user user 0 Apr  1 19:15 new-file-name

A partir de Ubuntu Oneiric (11.10), la umask predeterminada se relajó para 002, que amplía el acceso de escritura al grupo del propietario:

[email protected]:~$ touch new-file-name
[email protected]:~$ ls -dl new-file-name
-rw-rw-r-- 1 user user 0 Apr  1 19:15 new-file-name

Ver y modificar umask

Para ver su configuración de umask actual, abra una terminal y ejecute el comando:

umask

Para cambiar la configuración de umask del shell actual a otra cosa, digamos 077, ejecute:

umask 077

Para probar si esta configuración funciona o no, puede crear un nuevo archivo (los permisos de archivo de un archivo existente no se verán afectados) y mostrar información sobre el archivo, ejecute:

[email protected]:~$ touch new-file-name
[email protected]:~$ ls -dl new-file-name
-rw------- 1 user user 0 Apr  1 19:14 new-file-name

La configuración de umask es heredada por procesos iniciados desde el mismo shell. Por ejemplo, inicie el editor de texto GEdit ejecutando gedit en la terminal y guarde un archivo usando gedit. Notará que el archivo recién creado se ve afectado por la misma configuración de umask que en la terminal.

Caso de uso: sistema multiusuario

Si está en un sistema compartido por varios usuarios, es deseable que otros no puedan leer archivos en su directorio personal. Para eso, una umask es muy útil. Editar ~/.profile y agregue una nueva línea con:

umask 007

Debe volver a iniciar sesión para este cambio de umask en ~/.profile para tomar efecto. A continuación, debe cambiar los permisos de archivo existentes de los archivos en su directorio de inicio eliminando el bit de lectura, escritura y ejecución para el mundo. Abra una terminal y ejecute:

chmod -R o-rwx ~

Si desea que esta configuración de umask se aplique a todos los usuarios del sistema, puede editar el archivo de perfil de todo el sistema en /etc/profile.

Además de la buena discusión en la respuesta aceptada, vale la pena agregar algunos puntos más sobre umask, con referencia a cómo se gestiona en 12.04 y en adelante.

Umask y pam_umask

La umask predeterminada ahora está en /etc/login.defs y no en /etc/profile, como nota oficial en /etc/profile lee:

# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.

Pam_umask se explica brevemente a continuación, y debe decirse que el archivo predeterminado para que el usuario coloque su configuración de umask personalizada sigue siendo ~/.profile.

Pam_umask es uno de los muchos módulos PAM importantes que son cruciales en el funcionamiento de Ubuntu (ejecutar apropos '^pam_' para encontrar las páginas de manual de los demás). En la página de manual de pam_umask se observa que

pam_umask es un módulo PAM para configurar la máscara de creación del modo de archivo del entorno actual. La umask afecta los permisos predeterminados asignados a los archivos recién creados.

Una nota sobre la umask predeterminada

Nuevas carpetas en $HOME puede ser creado por mkdir con 775 permisos predeterminados y archivos creados con touch con permisos 664 predeterminados incluso cuando la máscara de usuario predeterminada es 022. Esto parece, al principio, contradictorio y vale la pena explicarlo.

Si bien la umask predeterminada es 022 en Ubuntu, esta no es toda la historia, ya que hay una configuración en /etc/login.defs que permite que umask sea 002 para usuarios no root si se cumple una condición (ver extracto a continuación). En una instalación normal, /etc/login.defs contiene el escenario USERGROUPS_ENAB yes. Esto es lo que

Permite que la configuración de los bits del grupo umask sea igual que los bits del propietario (ejemplos: 022 -> 002, 077 -> 007) para usuarios no root, si el uid es el mismo que el gid y el nombre de usuario es el mismo que el principal Nombre del grupo.

De ahí por qué ves lo siguiente con stat cuando se crea una nueva carpeta con mkdir en un sistema de usuario único como el mío (uid y gid son lo mismo):

Access: (0775/drwxrwxr-x)  Uid: ( 1000/username)   Gid: ( 1000/username)

Para más información, ver man pam_umask y las páginas de manual de Ubuntu en línea.

Otros respondieron que han explicado muy bien el concepto de umasking y por qué es necesario. Permítanme agregar mis dos centavos y darles un ejemplo matemático sobre cómo se calculan realmente los permisos.

En primer lugar, “máscara” no significa “restar”, en el sentido aritmético; no hay ningún préstamo o acarreo involucrado, en segundo lugar, el umask es una mascara; no es un número para restar.

En tercer lugar, la máscara desactiva los bits de permiso. Si ya están apagados, umask no modifica el permiso,

Por ejemplo, suponga que tiene que desenmascarar 077 de los valores predeterminados del sistema para los archivos que se 666 y directorios que es 777.

El comando que usará es

umask 077

(desenmascarar valor en binario, 000 111 111)

Lo que hará este desenmascaramiento es apagar cualquiera de los primeros seis LSB (bits menos significativos) si están 1 y no hará ningún cambio si alguno de ellos ya está desactivado.

Así es como se calcula el permiso final:

file permission   666 = 110 110 110 
unmask value      077 = 000 111 111
will result in    600 = 110 000 000

Observa como ambos 110 los valores han cambiado a 000.

Similar,

directory permission   777 = 111 111 111 
unmask value           077 = 000 111 111
will result in         700 = 111 000 000
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *