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