¿Qué es "umask" y cómo funciona?

157

Creo que umask es algo que controla los permisos de archivos , pero no lo entiendo completamente.

Después de ejecutar umask 0644 en un terminal , no puedo leer los archivos que creo con el editor de texto de línea de comandos %código%. Me di cuenta de que los permisos de ese archivo están configurados en nano en lugar del predeterminado 0022 .

¿Cómo funciona umask? Pensé que podría eliminar cada dígito en umask de 0755 , 0777 y 7 - 6 = 1 , así que espero que los permisos sean 7 - 4 = 3 , pero aparentemente este no es el caso.

  1. ¿Qué es umask exactamente? Explícamelo como si fuera un "novato de Linux"
  2. ¿Cómo puedo calcular con umask?
  3. ¿Cuáles son los casos de uso de umask?
pregunta Lekensteyn 22.05.2011 - 22:42

5 respuestas

124

La umask actúa como un conjunto de permisos que las aplicaciones no pueden configurar en los archivos. Es una máscara de creación de modo de archivo para procesos y no se puede configurar para los directorios. 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 será 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 como resultado que los permisos del archivo sean 133 . Esto significaría que usted (y otros) podrían ejecutar el archivo y otros podrían escribir en él.

Si quiere hacer que los archivos no sean leídos / escritos / ejecutados por nadie más que por el propietario, debe usar umask como 077 para desactivar esos permisos para el grupo & amp; otros.

En cambio, una umask de 000 hará que los directorios recién creados sean legibles, escribibles y desclasibles para todos (los permisos serán 777 ). Tal umask es altamente inseguro y nunca debes configurar umask en 000 .

La umask predeterminada en Ubuntu es 022 , lo que significa que los archivos recién creados son legibles por todos, pero solo pueden ser escritos por el propietario:

[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

Visualización y modificación de umask

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

umask

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

umask 077

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

[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 el terminal y guarde un archivo usando gedit. Notarás que el archivo recién creado se ve afectado por la misma configuración umask que en el terminal.

Caso de uso: sistema multiusuario

Si se encuentra en un sistema compartido por varios usuarios, es deseable que otros no puedan leer los archivos en su directorio de inicio. Para eso, una umask es muy útil. Edite ~/.profile y agregue una nueva línea con:

umask 007

Necesita volver a iniciar sesión para este cambio de umask en ~/.profile para que tenga efecto. A continuación, debe cambiar los permisos de archivos existentes en su directorio de inicio eliminando los bits de lectura, escritura y ejecución del mundo. Abre una terminal y ejecuta:

chmod -R o-rwx ~

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

    
respondido por el ajmitch 22.05.2011 - 22:59
34

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 en adelante.

Umask y pam_umask

La umask predeterminada ahora está en /etc/login.defs y no en /etc/profile , como la 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 se debe decir que el archivo predeterminado para que el usuario coloque su configuración umask personalizada sigue siendo ~/.profile .

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

  

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

Una nota sobre la máscara umask predeterminada

Las carpetas nuevas en $HOME pueden crearse por mkdir con permisos 775 predeterminados y archivos creados con touch con 664 permisos predeterminados incluso cuando la máscara umask predeterminada es 022. Esto parece, al principio, contradictorio, y vale la pena explicando.

Mientras que umask predeterminado 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 la configuración USERGROUPS_ENAB yes . Esto es lo que

  

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

Por lo tanto, ¿por qué ve lo siguiente con stat cuando se crea una nueva carpeta con mkdir en un único sistema de usuario como el mío (uid y gid son los mismos):

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

Para obtener más información, vea man pam_umask y Páginas de manual de Ubuntu en línea .

    
respondido por el user76204 02.04.2013 - 02:16
29

Esto es bastante antiguo, pero vale la pena mencionarlo. Para calcular el umask, a diferencia de los permisos del sistema de archivos. Las umasks octales se calculan mediante el AND bit a bit del complemento unario del argumento utilizando NOT bit a bit. Las notaciones octales son las siguientes:

Octal value : Permission
0 : read, write and execute
1 : read and write
2 : read and execute
3 : read only
4 : write and execute
5 : write only
6 : execute only
7 : no permissions

Luego puedes calcular para establecer umask las autorizaciones apropiadas tales como:

$ umask 077
$ mkdir dir1
$ touch file
$ ls -ld dir1 file

drwx------ 2 amrx amrx 4096 2011-03-04 02:05 dir1
-rw------- 1 amrx amrx    0 2011-03-04 02:05 file

Cálculo del permiso final para archivos

Simplemente puede restar umask de los permisos base para determinar el permiso final para el archivo de la siguiente manera:

666 – 022 = 644
  • Permisos de base de archivos: 666
  • valor de umask: 022
  • resta para obtener permisos del nuevo archivo (666-022) : 644 (rw-r–r–)

Cálculo del permiso final para directorios

Simplemente puede restar umask de los permisos base para determinar el permiso final para el directorio de la siguiente manera:

777 – 022 = 755
  • Permisos de base de directorio: 777
  • valor de umask: 022
  • Resta para obtener permisos del nuevo directorio (777-022) : 755 (rwxr-xr-x)
respondido por el amrx 06.04.2016 - 10:27
24

Otros respondieron explicaron muy bien el concepto de umasking y por qué es necesario. Permítame agregar mi dos centavos y darle 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 préstamo ni acarreo involucrados, en segundo lugar, el umask es una máscara; no es un número que se restará.

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

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

El comando que usará es

umask 077

(desenmascarar el valor en binario, 000 111 111 )

Lo que hará este desenmascarador es que desactivará cualquiera de los primeros seis LSB (bits menos significativos) si son 1 y no realizará cambios si alguno de ellos ya está desactivado.

Así es como se calcula el permiso final:

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

Observe cómo ambos valores de 110 han cambiado a 000 .

Del mismo modo,

directory permission 777 = 111 111 111 
unmask value         077 = 000 111 111
will result in,      700 = 111 000 000
    
respondido por el Sufiyan Ghori 05.06.2016 - 16:09
9

Concepto básico:

Si eres como la mayoría de los humanos y no entiendes qué demonios "octal umasks se calculan mediante el AND bit a bit del complemento unario del argumento usando NOT bit a bit" , aquí está mi explicación simple :

Antes que nada, piensa en qué es una "máscara". Una máscara bloquea algo. Piensa en cinta adhesiva. En este caso, umask es como cinta adhesiva para bloquear / deshabilitar permisos cuando se crea un nuevo archivo o directorio.

Los permisos predeterminados al crear un nuevo directorio son octal 777 (111 111 111) , y un nuevo archivo es octal 666 (110 110 110) . Configuramos umask para bloquear / deshabilitar ciertos permisos.

  • Un bit de máscara de 1 significa bloquear / deshabilitar ese permiso (coloque cinta adhesiva sobre ese bit).
  • Un bit de máscara de 0 permitirá que pase el permiso (sin cinta de enmascarar sobre ese bit).

Entonces, una máscara octal 022 (000 010 010) significa desactivar group write y others write y permitir que pasen todos los demás permisos.

Cálculo:

Aquí hay un cálculo de ejemplo para un archivo nuevo (permiso predeterminado 666) con una máscara 022:

  perm mask result
----------------------------
u 1    0    1 (pass through)
  1    0    1 (pass through)
  0    0    0 (pass through)
----------------------------
g 1    0    1 (pass through)
  1    1    0 (disable)
  0    0    0 (pass through)
----------------------------
o 1    0    1 (pass through)
  1    1    0 (disable)
  0    0    0 (pass through)

Así es como terminas con el resultado de 644 cuando creas un nuevo archivo.

Manera más fácil:

Pero si los cálculos de la máscara inversa simplemente te confunden, hay una manera más fácil de usar la notación umask simbólica. Cuando utiliza este método, solo especifica los bits de paso en lugar de los bits de máscara.

  • umask u=rwx,g=rx,o=rx significa permitir paso a través de user rwx , group rx , other rx . Lo que implica desactivar group w , others w . Si ejecuta este comando, marque umask , obtendrá 022 .
  • umask u=rwx,g=,o= significa permitir paso a través de user rwx . Lo que implica desactivar todo acceso para group y others . Si ejecuta este comando, marque umask , obtendrá 077 .

Cálculo de bonificación:

Si realmente quiere saber qué "octal umasks se calculan a través del AND bit a bit del complemento unario del argumento utilizando NOT bit a bit" , aquí hay algunas tablas lógicas que pueden ayudar a demostrar. Recuerde, un bit de máscara 1 significa desactivar, 0 significa pasar.

perm mask result
----------------
0    1    0     (mask 1 always disables)
1    1    0     (mask 1 always disables)
0    0    0     (mask 0 passes through)
1    0    1     (mask 0 passes through)

Si haces la tabla con NOT(mask) , ahora solo se trata de una simple tabla lógica AND !

perm NOT(mask) result
---------------------
0    0         0     (mask 1 always disables)
1    0         0     (mask 1 always disables)
0    1         0     (mask 0 passes through)
1    1         1     (mask 0 passes through)

Entonces la fórmula para ello es: result = perm AND (NOT mask)

    
respondido por el wisbucky 04.04.2017 - 00:30

Lea otras preguntas en las etiquetas