Introducción
En los sistemas operativos Linux /Unix, todos los archivos nuevos se crean con un conjunto predeterminado de permisos. La utilidad umask le permite sugerir a los programas que se inician más tarde qué permisos negar al crear nuevos archivos y directorios. El comando solo tiene efecto para los programas iniciados después de umask, y solo si se inicia desde el mismo shell.
Es utilizado por mkdir, touch, tee y otros comandos que crean nuevos archivos y directorios.
Permisos de Linux
Antes de continuar, expliquemos brevemente el modelo de permisos de Linux.
En Linux, cada archivo está asociado con un propietario y un grupo y se le asignan derechos de acceso de autorización para tres clases diferentes de usuarios:
- el propietario del archivo.
- miembros del grupo.
- todos los otros.
Hay tres tipos de permisos que se aplican a cada clase:
- permiso para leer.
- permiso de escritura.
- el permiso de ejecución.
Este concepto le permite especificar qué usuarios pueden leer el archivo, escribir en el archivo o ejecutar el archivo.
Para ver los permisos del archivo, use el comando ls:
ls -l dirname
drwxr-xr-x 12 noviello users 4.0K Sep 8 17:22 dirname
|[-][-][-] [------] [---]
| | | | | |
| | | | | +-----------> Group
| | | | +-------------------> Owner
| | | +----------------------------> Others Permissions
| | +-------------------------------> Group Permissions
| +----------------------------------> Owner Permissions
+------------------------------------> File Type
El primer carácter representa el tipo de archivo que puede ser archivo normal ( - ), directorio ( d ), enlace simbólico ( l ) o cualquier otro tipo especial de archivo.
Los siguientes nueve caracteres representan permisos, tres conjuntos de tres caracteres cada uno. La primera serie muestra los permisos de propietario, la segunda, los permisos de grupo y la última muestra los permisos de todos los demás.
El carácter r con un valor octal de 4 significa lectura, w con un valor octal de 2 para escritura, x con un valor octal de 1 para permiso de ejecución y (- ) con un valor octal de 0 para sin permiso.
También hay otros tres tipos de archivos de permisos especiales: setuid, setgid y Sticky Bit.
En el ejemplo anterior ( rwxr-xr-x ) significa que el propietario tiene permisos de lectura, escritura y ejecución ( rwx ), el grupo y otros tienen permisos de lectura y ejecución.
Si representamos los permisos de archivos utilizando una notación numérica llegaremos al número 755:
- Propietario: rwx = 4 + 2 + 1 = 7
- Grupo: rx = 4 + 0 + 1 = 5
- Otro: rx = 4 + 0 + 1 = 5
Cuando se representan en notación numérica, los permisos pueden tener tres o cuatro dígitos octales (0-7). El primer dígito representa permisos especiales y si se omite significa que no se establecen permisos especiales en el archivo. En nuestro caso, 755 es lo mismo que 0755. El primer dígito puede ser una combinación de 4 para setuid, 2 para setgid y 1 para Sticky Bit.
Los permisos de archivo se pueden cambiar usando el comando chmod y la propiedad usando el comando chown.
Comando Umask
De forma predeterminada, en los sistemas Linux, los permisos de creación predeterminados son 666 para archivos, que otorga permisos de lectura y escritura a usuarios, grupos y otros, y 777 directorios, lo que significa permisos de lectura, escritura y ejecución para usuarios, grupos y otros. Linux no permite la creación de un archivo con permisos de ejecución.
Los permisos de creación predeterminados se pueden cambiar utilizando la utilidad umask.
umask solo afecta al entorno de shell actual. En la mayoría de las distribuciones de Linux, el valor de umask predeterminado para todo el sistema se establece en el archivo pam_umask.so o /etc /profile.
Si desea especificar un valor diferente en función del usuario, edite los archivos de configuración de shell del usuario, como ~ /.bashrc o ~ /.zshrc. También puede cambiar el valor de umask de la sesión actual ejecutando umask seguido del valor deseado.
Para ver el valor de la máscara actual, simplemente escriba umask sin argumentos:
umask
La salida incluirá el
022
El valor de umask contiene los bits de permiso que NO se establecerán en archivos y directorios recién creados.
Como ya hemos mencionado, los permisos de creación predeterminados para archivos son 666 y para directorios 777. Para calcular los bits de permiso de archivos nuevos, reste el valor de umask del valor predeterminado.
Por ejemplo, para calcular cómo uname 022 afectará a los archivos y directorios recién creados, use:
- Archivo: 666-022 = 644. El propietario puede leer y modificar los archivos. El grupo y otros solo pueden leer archivos.
- Directorio: 777 - 022 = 755. El propietario puede acceder al directorio y listar, leer, modificar, crear o eliminar archivos en el directorio. El grupo y otros pueden acceder al directorio, listar y leer archivos.
También puede mostrar el valor de la máscara en notación simbólica usando la opción -S:
umask -S
u=rwx,g=rx,o=rx
A diferencia de la notación numérica, el valor de la notación simbólica contiene los bits de permiso que se establecerán en los archivos y directorios recién creados.
Configurar el valor de la máscara
La máscara de creación de archivos se puede configurar mediante notación octal o simbólica. Para que los cambios sean permanentes, establezca el nuevo valor de umask en un archivo de configuración global como /etc /profile file que afectará a todos los usuarios o en los archivos de configuración de shell de un usuario como ~ /.profile, ~ /.bashrc o ~ /.zshrc sólo afectan al usuario. Los archivos de usuario tienen prioridad sobre los archivos globales.
Antes de realizar cambios en el valor de umask, asegúrese de que el nuevo valor no represente un riesgo de seguridad potencial. Los valores menos restrictivos que 022 deben usarse con mucha precaución. Por ejemplo, umask 000 significa que cualquiera tendrá permiso para leer, escribir y ejecutar todos los archivos recién creados.
Supongamos que queremos establecer permisos más restrictivos en los archivos y directorios recién creados para que otros no puedan acceder a los directorios y leer archivos. Los permisos que queremos son 750 para directorios y 640 para archivos.
Para calcular el valor de umask, simplemente reste los permisos deseados de los predeterminados:
Valor de Umask: 777-750 = 027
El valor de umask deseado representado en notación numérica es 027.
Para establecer permanentemente el nuevo valor para todo el sistema, abra el archivo /etc /profile con el editor de texto:
sudo nano /etc/profile
Edite o agregue la siguiente línea al principio del archivo:
umask 027
Para que los cambios surtan efecto, ejecute el comando de origen o cierre la sesión e inicie sesión:
source /etc/profile
Para verificar la nueva configuración, crearemos un nuevo archivo y directorio usando mkdire touch:
mkdir new_dir
touch newfile
Si verifica los permisos con el comando ls, notará que el nuevo archivo tiene 640 permisos y el nuevo directorio 750:
drwxr-x--- 2 noviello users 4096 Sep 9 05:01 new_dir
-rw-r----- 1 noviello users 0 Sep 9 05:01 new_file
Otra forma de configurar la máscara de creación de archivos es utilizar la notación simbólica. Por ejemplo, umask u = rwx, g = rx, o = es lo mismo que umask 027.
Conclusión
En esta guía, hemos explicado los permisos de Linux y cómo usar el comando umask para establecer bits de permisos para archivos o directorios recién creados.
Para más información escriba en la terminal:
man umask