¿Cómo se calcula umask en Linux?


15

Así que sé que umaskpuede restringir a los usuarios privilegiados, utilizando este formato umask ugo.

Entiendo que read = 4, write = 2 y exec = 1. Sin embargo, cuando escribo umask, devuelve 4 dígitos, que es 0022o 0073. No entiendo cómo funciona esto ahora porque hay un dígito adicional. ¿Qué es ese dígito extra y qué 0022significa?

Respuestas:


18

Suponga que la máscara predeterminada de 0666. umask0022 haría que la nueva máscara 0644 (0666-0022 = 0644) significara que el grupo y otros tienen permisos de lectura (sin escritura ni ejecución).

El dígito "extra" (el primer número = 0), especifica que no hay modos especiales.

Si el modo comienza con un dígito, se interpretará como octal; de lo contrario, debe ser simbólico.

0 es un dígito, al igual que 1 (para el bit fijo) o 6 (para SGID). Se puede invocar un comando como chmodpor otros métodos, como chmod ug+rw mydirdónde agregaría los permisos de lectura y escritura al usuario y al grupo. Tenga en cuenta que el modo en este caso (ug + rw) no comienza con un dígito, por lo tanto, no se interpretaría como octal sino simbólico.

Consulte en.wikipedia.org/wiki/Chmod#Symbolic_examples para obtener simbólicos, así como www.lifeaftercoffee.com/2007/03/20/special-permission-modes-in-linux-and-unix/ para ver un poco en los modos especiales.

No sé si desenmascararías la primera parte umask, pero técnicamente podrías. Explicaría por qué casi siempre lo ves como un cero.

Crédito a pinkfloydx33

El primer dígito de la máscara trata con permisos especiales que no encajan tan claramente en el modelo del propietario / grupo / otro. Cuando se proporcionan cuatro dígitos para un permiso de archivo, el primero se refiere a esos valores especiales:

4000 = SUID
2000 = SGID
1000 = sticky bit

El bit SUID, abreviatura de set-user-ID, hace que un programa ejecutable se ejecute con la identificación de usuario (uid) efectiva del propietario; en otras palabras, no importa quién lo ejecute, el programa se ejecuta con los derechos del propietario. Esto se ve comúnmente en programas que hacen cosas que requieren privilegios de root, pero que están destinados a ser ejecutados por usuarios normales: este passwdes un ejemplo.

El bit SGID, abreviatura de set-group-ID, es muy similar, pero se ejecuta con la identificación de grupo efectiva (gid) del propietario.

La parte adhesiva es un poco más complicada, si desea obtener más información al respecto, puede leer la página de manual sticky.

Estos bits también se pueden usar con directorios, pero sus significados cambian.

No creo que pueda configurarlo umaskpara permitirle habilitar ninguno de estos bits adicionales de forma predeterminada, pero probablemente nunca querrá hacerlo de todos modos.

Crédito al usuario 470379


1
En realidad, no puede proporcionar un valor distinto de cero que no sea en los últimos 3 dígitos. Según Posix: "La interpretación de los valores de modo que especifican bits de modo de archivo distintos de los bits de permiso de archivo no está especificada". De acuerdo con man 2 umask(la correspondiente llamada al sistema) "solo maskse utilizan los bits de permiso de archivo ". En bash, umask 1000 genera un error: "número octal fuera de rango". Entonces, ¿por qué el 0 adicional? Creo que es solo para mostrar que el número está en octal.
rici

ese pastebin no tiene ninguna referencia para enmascarar, por lo que no veo cómo es relevante. chmod permite establecer los primeros tres bits, pero umask no permite que se enmascaren. (es decir, podría haber escrito chmod 6777 dropbox. Y, por cierto, también chmod ug+s.)
rici

Sí, tienes razón, no sé en qué estaba pensando.
Braiam

@Braiam: Tu fórmula para calcular la nueva máscara es incorrecta, no 0666-0022lo es 0666 & ~0022.
Cuonglm

1
Creo que la objeción no es la forma en que se escriben los números, sino el uso del operador de resta (-) en lugar de bit a bit y (&).
BowlOfRed
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.