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

190

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

Después de ejecutar umask 0644en una terminal , no puedo leer los archivos que creo con el editor de texto de línea de comandos nano. Noté que los permisos de ese archivo están establecidos en 0022lugar de los predeterminados 0755.

¿Cómo funciona umask? Pensé que sólo podía quitar el cada dígito en la máscara de usuario a partir de 0777, 7 - 6 = 1y 7 - 4 = 3, por lo que espero que sean los permisos 0133, pero al parecer, este no es el caso.

  1. ¿Qué es exactamente umask? Explícame como si fuera un "novato de Linux"
  2. ¿Cómo calculo con umask?
  3. ¿Cuáles son los casos de uso de umask?
Lekensteyn
fuente
app_mode 666 rw- rw- rw- umask 644 --0 -00 -00 file_mode 022 --- -w- -w-
grabantot

Respuestas:

143

El 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 la umask.

Como ha configurado la umask para eliminar los bits de lectura / escritura para el propietario y los bits de lectura para otros, un valor predeterminado, como 777en las aplicaciones, daría lugar a los permisos del archivo 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 077para desactivar esos permisos para el grupo y otros.

Por el contrario, una máscara de u 000hará que los directorios recién creados sean legibles, escribibles y descendibles para todos (los permisos serán 777). Tal umask es altamente inseguro y nunca debes configurarlo 000.

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

user@computer:~$ touch new-file-name
user@computer:~$ 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), se relajó la umask predeterminada 002, que amplía el acceso de escritura al grupo del propietario:

user@computer:~$ touch new-file-name
user@computer:~$ 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 actual de umask, 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 un archivo existente no se verán afectados) y mostrar información sobre el archivo, ejecute:

user@computer:~$ touch new-file-name
user@computer:~$ 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 los procesos iniciados desde el mismo shell. Por ejemplo, inicie el editor de texto GEdit ejecutándolo gediten 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 el 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 de inicio. Para eso, un umask es muy útil. Edite ~/.profiley agregue una nueva línea con:

umask 007

Debe volver a iniciar sesión para que este cambio de umask ~/.profilesurta efecto. A continuación, debe cambiar los permisos de archivos existentes de los archivos en su directorio de inicio eliminando el bit de lectura, escritura y ejecución del 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.

ajmitch
fuente
3
Entonces, ¿qué significan los dígitos en la máscara de umas? ¿Por qué 777significa que el grupo y otros podrán escribirle, mientras que 077significa que no pueden?
HelloGoodbye
3
Además, usted dice que si el umask es 000, el permiso de archivo será 777. Entonces, con una máscara predeterminada de 022, ¿no deberían ser los permisos del archivo 755, es decir, correspondientes a -rwxr-xr-x, no -rw-r--r--?
HelloGoodbye
13
Debo admitir que esta explicación me confundió más de lo que me ayudó.
Connel Hooley
8
tenga en cuenta que la umask predeterminada de Ubuntu cambió a 0002 solo un mes después de que se publicara esta respuesta.
Jeff Puckett
77
@HelloGoodbye si la umask es 000entonces no se eliminarán los permisos. a las aplicaciones les gusta touchy nanocrean archivos por defecto 666para que el permiso de archivo permanezca, 666pero una máscara de 022eliminará los bits de escritura para el grupo y otros, por lo que 666se reduce a 644aka -rw-r--r--Considerar mkdirqué modo de creación predeterminado de 777con una máscara de u 022reducirá los permisos para755
Jeff Puckett
38

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

Umask y pam_umask

La umask predeterminada ahora está dentro /etc/login.defsy no dentro /etc/profile, como /etc/profiledice la nota oficial en :

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

Pam_umaskse explica brevemente a continuación, y se debe decir que el archivo predeterminado para que el usuario coloque su configuración personalizada de umask todavía está ~/.profile.

Pam_umaskes uno de los muchos módulos PAM importantes que son cruciales en la operación de Ubuntu (ejecute apropos '^pam_'para encontrar las páginas de manual para los otros). En la página de manual para pam_umaskse 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 los permisos predeterminados asignados a los archivos recién creados.

Una nota sobre la umask predeterminada

$HOMESe pueden crear nuevas carpetas mkdircon permisos predeterminados de 775 y archivos creados con touchpermisos predeterminados de 664, incluso cuando la umask predeterminada es 022. Esto parece, al principio, contradictorio, y vale la pena explicarlo.

Si bien el umask predeterminado es 022 en Ubuntu, esta no es toda la historia, ya que hay una configuración /etc/login.defsque permite que el umask sea 002 para usuarios no root si se cumple una condición (consulte el extracto a continuación). En una instalación normal, /etc/login.defscontiene 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 los bits propietarios (ejemplos: 022 -> 002, 077 -> 007) para usuarios no root, si el uid es el mismo que gid, y el nombre de usuario es el mismo que el primario Nombre del grupo.

Por lo tanto, verá lo siguiente con statcuando se crea una nueva carpeta con mkdirun solo sistema de usuario como el mío (uid y gid son lo mismo):

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

Para obtener más información, consulte man pam_umasklas páginas de manual de Ubuntu en línea .

Alex
fuente
¿Parece que a tu segunda parte le falta algo? (USERGROUP_ENABLE?) +1 para información actualizada
Lekensteyn
2
@Lekensteyn Por extraño que parezca, la configuración /etc/login.defses definitivamente USERGROUPS_ENAB yesdespués de comprobarlo. La sintaxis de ese archivo es ligeramente inusual.
Acabo de comprobar el archivo y la fuente y tienes razón, esta (y algunas otras) configuraciones se llaman confusamente "_ENAB".
Lekensteyn
34

Esto es bastante viejo, pero vale la pena mencionarlo. Para calcular la umask, a diferencia de los permisos del sistema de archivos. Las máscaras u octales se calculan a través del AND bit a bit del complemento unario del argumento utilizando NOT bit a bit. Las anotaciones 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 puede calcular para establecer umask premisiones adecuadas 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 la umask de los permisos base para determinar el permiso final para el archivo de la siguiente manera:

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

Cálculo del permiso final para directorios

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

777 – 022 = 755
  • Permisos base del directorio: 777
  • valor de umask: 022
  • Reste para obtener permisos del nuevo directorio (777-022):755 (rwxr-xr-x)
amrx
fuente
3
No creo que así se calculen los permisos finales, ¿y si el valor de desenmascarar es 077cómo restarías 666-077en ese caso?
Sufiyan Ghori
66
La explicación de @SufiyanGhori Baron no está completa para el permiso de archivos. En su caso y en cualquier cálculo futuro, para que sea fácil de recordar, debe tener en cuenta restarlos de esta manera: 6-0, 6-7, 6-7, si algún resultado de esos tres es -1, entonces sea 0. Entonces tiene el resultado final 600
Huy.PhamNhu
1
@ Huy.PhamNhu Eso tampoco es correcto. Con un permiso base de 666 y una máscara de 033, seguramente no obtendrá 633.
maaartinus
77
No no no. No puede usar la resta para calcular umask (funciona con ciertos valores, pero no con todos). Tienes que pensar en el umask como "deshabilitar bits". Vea las otras respuestas de Sufiyan y Wisbucky.
wisbucky
33

Otros respondieron que han explicado muy bien el concepto de umasking y por qué es necesario. Permítanme agregar mis 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 o transporte involucrado, en segundo lugar, umaskes una máscara; No es un número a restar.

Tercero, la máscara apaga los bits de permiso. Si ya están apagados, umaskno hace ningún cambio al permiso,

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

El comando que usarás es,

umask 077

(desenmascarar el valor en binario 000 111 111)

Lo que hará esta máscara será desactivar cualquiera de los primeros seis LSB (bits menos significativos) si lo están 1y no hará ningún cambio si alguno de ellos ya está apagado.

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 110valores han cambiado a 000.

Similar,

directory permission 777 = 111 111 111 
unmask value         077 = 000 111 111
will result in,      700 = 111 000 000
Sufiyan Ghori
fuente
77
Esta debería ser la respuesta!
Abdelouahab
@SufiyanGhori Entonces, si umask 177(001 111 111), se apagarán los primeros 7 bits menos significativos si son1
Kasun Siyambalapitiya
eso es correcto @KasunSiyambalapitiya
Ghori
1
así es la fórmularesult = file permission & (!umask)
Eric Hodgins
1
@EricHodgins: Sí, exactamente.
Amit Naidu
15

Concepto basico:

Si eres como la mayoría de los humanos y no entiendes lo que significa "las máscaras octales se calculan a través del bit AND Y del complemento unario del argumento usando bitwise NOT" , aquí está mi explicación simple:

En primer lugar, piense en lo que es una "máscara". Una máscara bloquea algo. Piensa en cinta adhesiva. En este caso, umask es como una cinta de enmascarar para bloquear / deshabilitar los permisos al crear 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 la umask para bloquear / deshabilitar ciertos permisos.

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

Por lo que una octal 022 (000 010 010)máscara significa desactivar group writey others write, y permitir que todos los demás permisos para pasar a través.

Cálculo:

Aquí hay un ejemplo de cálculo para un nuevo archivo (permiso 666 predeterminado) con una máscara u 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 máscara inversa solo lo confunden, hay una manera más fácil de usar la notación simbólica umask. Cuando utiliza este método, solo está especificando los bits de paso en lugar de los bits de máscara.

  • umask u=rwx,g=rx,o=rxmedios permiten pasar a través de user rwx, group rx, other rx. Lo que implica desactivar group w, others w. Si ejecuta este comando, compruebe umask, obtendrá 022.
  • umask u=rwx,g=,o=significa permitir pasar por user rwx. Lo que implica deshabilitar todo acceso para groupy others. Si ejecuta este comando, compruebe umask, obtendrá 077.

Cálculo de bonificación:

Si realmente quiere entender qué significa "las máscaras utales se calculan a través del bit AND Y del complemento unario del argumento usando bitwise NOT" , aquí hay algunas tablas lógicas que pueden ayudar a demostrar. Recuerde, un bit de máscara 1significa deshabilitar, 0significa 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 es solo una ANDtabla lógica simple !

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 es: result = perm AND (NOT mask)

Wisbucky
fuente