¿Para qué sirve realmente umask
el comando en *nix OS?
¿Cómo es su mecanismo de funcionamiento y utilidad? p.ej
$ umask 022
Muchas gracias antes
Respuesta1
umask
es un comando integrado de la mayoría de los shells que es solo una interfaz para la umask()
llamada al sistema, y encontrará su descripción en la documentación de su shell (tenga cuidado, man umask
puede indicarle la documentación de la umask()
llamada al sistema en su lugar o la umask
documentación incorporada de un shell aparte del tuyo).
La máscara de usuario es un atributo de un proceso (heredado de padres a hijos y conservado tras la ejecución del comando) que determina qué permisos se otorgan automáticamente a los archivos de forma predeterminada cuando se crean.
La umask
utilidad le permite configurar la máscara de usuario del proceso de shell para controlar los permisos de los archivos creados por cualquier comando ejecutado dentro de la sesión de shell.
De umask
todos los shells toman la máscara como un número octal, mientras que en algunos shells, incluidos todos los POSIX, también se puede especificar en forma simbólica como for chmod
.
La máscara determina qué partes de los permisos deben serdespejadocuando se crea el archivo. Por ejemplo umask 777
, donde 0777 es 511 o 0b111_111_111 provocaría que los archivos se crearan sin permiso, ya que los 9¹ bits de los permisos de archivos de Unix (3 ( r
lectura, w
rito, ejecución x
) parausuario, 3 paragrupo, 3 paraotro) se borraría.
La forma simbólica especifica qué bits debennoser despejado. Así umask 777
sería umask u=,g=,o=
.
Generalmente, desea que al menos la máscara de usuario incluya el w
bit para o
otros, ya que no desea que los archivos que cree se puedan escribir en todo el mundo ( umask 002
o umask u=rwx,g=rwx,o=rx
).
Es probable que también desee configurar el w
bit para grupo al menos en sistemas donde el grupo principal del usuario no es personal (se comparte con otros usuarios): o .g
umask 022
umask u=rwx,g=rx,o=rx
A umask 077
o umask u=rwx,g=,o=
garantiza que todos los archivos que cree sean privados para usted (nadie más podrá acceder a ellos). A menudo se ve esto en scripts que crean archivos temporales, a veces en un subshell como en:
(umask 077; echo test > "$tmpfile")
Configurar umask
bits para el u
servidor puede causar problemas, ya que puedes terminar creando archivos que ni siquiera tú puedes abrir.
Tenga en cuenta que la máscara de usuario aplicadaen la parte superiorde los permisos solicitados por las aplicaciones cuando ellas open()
o creat()
un archivo. Si lo hacen creat("file", 0666)
mientras umask
es 022
( u=rwx,g=rx,o=rx
), los permisos terminarán siendo 0644
( u=rw,g=r,o=r
). Las aplicaciones aún pueden llamar fchmod()
o chmod()
después cambiar los permisos como quieran (y la umask no tiene ningún efecto allí).
umask
sin argumentos informa la máscara de usuario actual en forma octal. umask -S
en algunas conchas lo informan en forma simbólica. umask -p
ingresa bash
o fish
genera código de shell que, una vez interpretado, establecería la misma máscara de usuario.
Esto se puede usar para restaurar la umask anterior después de haberla modificado:
previous_umask=$(umask)
umask 077
# create some private files
umask "$previous_umask"
¹ Técnicamente, hay 12 bits de permisos donde los 3 adicionales son bits especiales que se usan para diversos propósitos dependiendo del tipo de archivo y, a veces, se combinan con otros bits de permiso (como los bits setuid, setgid para ejecutables, t
bits para directorios... .). En algunos sistemas, esos bits se ignoran cuando se solicitan en open()
/ creat()
y de todos modos cuando las aplicaciones los configuran (generalmente más bien chmod()
después), es por una buena razón, por lo que generalmente no es útil incluirlos en umask
y la umask()
llamada del sistema los ignorará. de todos modos.