miércoles, 8 de noviembre de 2023

03 - Permisos Linux

En Linux todos los archivos pertenecen a un usuario y a un grupo. Cuando un usuario crea un nuevo archivo se asocia al mismo de forma automática un usuario y un grupo propietario. El usuario es el creador del archivo y el grupo propietario es el grupo principal que otorga permisos a los usuarios que pertenecen a dicho grupo.

Ej. Si el usuario jperez cuyo grupo principal es profesores crea un nuevo archivo, el archivo tendrá como usuario y grupo propietario a jperez y profesores respectivamente. 

chown

Permite cambiar el usuario y grupo propietario de un archivo. Por seguridad, sólo lo puede ejecutar el root y necesita permisos de escritura sobre el archivo

¿Cuáles son los Permisos?

El primer carácter indica el tipo de archivo en cuestión. Los 9 caracteres que le siguen representan los permisos y se leen en grupos de 3 de la forma siguiente: Los 3 primeros corresponden a los permisos que tiene el usuario propietario (el que crea el fichero normalmente). Los 3 siguientes corresponden al grupo propietario (el grupo principal del usuario). Los últimos 3 caracteres representan los permisos de todos los demás usuarios

ls

El comando ls permite listar los permisos de ficheros y directorios.
Tipos de archivos comunes







 




r - Permiso de lectura

Sobre un fichero: Significa que puede ser leído o visualizarlo mediante comandos o aplicaciones.

Sobre un directorio: Significa que se puede listar el contenido de la carpeta mediante comandos o aplicaciones

w - Permiso de escritura

Sobre un fichero: Se puede modificar su contenido o borrarlo mediante comandos o aplicaciones. 

Sobre un directorio: Se pueden crear y eliminar archivos y otras carpetas dentro de ella mediante comandos y aplicaciones. 

x - Permiso de ejecución

Sobre un fichero: Se puede ejecutar el fichero. 

Sobre un directorio: Se puede atravesar el directorio mediante comandos y aplicaciones

¿Cómo funcionan los permisos?

En principio, solo el usuario propietario de un fichero puede cambiar los permisos del mismo aunque el superusuario root puede modificar los permisos de cualquier archivo ya que tiene acceso total sin restricciones a la administración del sistema.

El esquema es bastante simple, hay tres grupos de permisos conocidos como UGO por las iniciales de los tres entidades a los que hace referencia: usuario, grupo y otros y el dueño del archivo configura estos permisos para estas tres entidades de acuerdo a sus necesidades.

Cualquiera que pertenezca al grupo propietario (grupo principal al que pertenece el dueño del archivo) disfrutará de los permisos que estén configurados en la zona  Group.

El resto, Other, se refiere a cualquier otro usuario que no sea ni el usuario propietario ni forme parte del grupo propietario.
Correspondencia octal de permisos
Según este esquema no es posible asignar permisos sólo a un usuario concreto o a un grupo concreto que no sea el grupo propietario. Para ello existe un mecanismo que implementa una extensión del clásico sistema de permisos UGO conocido como ACL o listas de control de Acceso que si permite asignar permisos a usuarios o grupos concretos

También veremos pronto que existen además de los permisos clásicos otros permisos denominados permisos especiales [Sticky Bit, SUID y SGID] que confieren ciertas funcionalidades muy específicas y que son importantes para comprender como funciona el sistema.

chmod

Es el comando que se utiliza para modificar los permisos y que puede realizar las operaciones utilzando dos notaciones diferentes: octal o simbólica

Notación simbólica

Notación octal

Ejemplo de uso






La Máscara predeterminada

Cuando se crea un archivo en Linux por medio de comandos (mkdir, touch, tee, etc) o de forma gráfica el sistema le asigna unos permisos por defecto que son siempre los mismos, a saber:
  • 666 si es un fichero
  • 777 si es un directorio
La máscara es un número que afecta (enmascara) estos permisos por defecto y los transforma en los permisos finales o permisos efectivos que acaban teniendo los ficheros o directorios en el momento de crearlos. 
  • 002 es la máscara de usuario predeterminada
La máscara de usuario predeterminada en Ubuntu 20.04 es 002 mientras que la de root es 022. Se puede cambiar a nivel de usuario particular, incluso para todos lo usuarios.
 
umask

Comando que permite consultar y modificar la máscara. 
Se puede fijar la máscara por defecto para todos los usuarios o solo para un usuario concreto
[Consultar entrada siguiente]

Comprendiendo el funcionamiento de la máscara

Sólo se necesita conocer la fórmula siguiente, donde el complemento a 1 de la máscara consiste en invertir la máscara y el operador && es el operador lógico AND. 

Permisos efectivos = Permisos por defecto && Complemento a 1 de la máscara

Veamos un ejemplo, averigua los permisos efectivos de ficheros y directorios si la máscara está definida en 136
  • Expresamos la máscara en octal
136 en octal es 001 011 110
  • Calculamos el complemento a 1 de la máscara
110 100 001
  • Hacemos el AND lógico entre los permisos por defecto de los ficheros y el complemento a 1 de la máscara
ficheros: 666 = 110 110 110  
110 110 110 && 110 100 001 = 110 100 000 = 640 
  • Hacemos el AND lógico entre los permisos por defecto de los directorios y el complemento a 1 de la máscara
directorios: 777 = 111 111 111  
111 111 111 && 110 100 001 = 110 100 001 = 641

Según nuestros cálculos, con una máscara definida en el sistema de 136 los ficheros que cree el usuario deben salir con permisos efectivos 640 mientras que los directorios que cree saldrían con 641. Ahora sólo queda probarlo en una consola.