jueves, 26 de mayo de 2022

09 - Listas de control de acceso (ACL)

Cómo hemos visto hasta ahora los permisos nativos, o permisos UGO son muy estrictos en el sentido de que permiten configurar permisos de lectura, escritura o ejecución solamente a tres entidades: el usuario propietario, el grupo propietario, el resto de usuarios.

¿Qué es una acl?

Es una funcionalidad que va a permitir configurar permisos no solo a las tres entidades UGO predeterminadas sino también a cualquier otro usuario o grupo específico.

A nivel práctico esto se traduce en una lista que contiene entradas, una para cada entidad UGO y una para cada usuario o grupo específico que el dueño del archivo o root desee añadir. Las entradas de la lista reflejaran los permisos efectivos de cada una de las entidades

ACL del fichero ejemplo1







Si analizamos la imagen podemos observar:

  • Con el comando habitual para ver lo permisos [ls] nos damos cuenta que el fichero ejemplo1 tiene permisos extendidos en su ACL porque al final de las ternas de permisos le acompaña el signo +
  • Al consultar la ACL vemos todas las entidades con sus permisos, por una parte las entidades UGO y por otra entidades específicas como el usuario smr o los grupos alumnos y profesores
  • Aparece una entrada "extraña" mask que no se corresponde con ninguna entidad y que también tiene permisos asociados.

¿Qué es la máscara en una ACL?

Antes de explicar que es la máscara, comentar algo importante:

Cuando un fichero tiene permisos extendidos en su ACL (+), la terna de grupo propietario que hasta ahora representaba los permisos del grupo propietario deja de hacer su función habitual y pasa a representar un concepto más amplio, la máscara. Las otras dos ternas de usuario y otros permanecen intactas.







La máscara es el límite o valor máximo al que pueden optar tanto los permisos de grupo propietario como los de todos aquellos usuarios o grupos específicos que aparezcan en la ACL. Afecta a cualquier entidad que no sea el usuario propietario o el grupo otros.

Sobre el ejemplo inicial, al eliminar el permiso de escribir de la máscara todas las entidades que no sean el usuario propietario o el grupo otros se ven afectadas por el nuevo limite que representa la máscara. Como el nuevo limite marcado por la máscara es el permiso de lectura, en aquellas entidades que lo superaban el sistema refleja los nuevos permisos efectivos. 

Efectos de modificar la máscara de la ACL de ejemplo1







De igual forma si lo que hacemos es modificar los permisos de la entidad grupo o cualquier otra entidad específica la máscara se recalcula automáticamente para dar soporte al nuevo permiso que se está solicitando afectando de nuevo a las demás entidades (usuario y otros NO)

Efectos de modificar los permisos G







Es decir que si modifico la máscara se recalculan los permisos de G y las entidades específicas y si modifico los permisos de G o las entidades especificas se recalcula la máscara

Requisitos de uso de ACL               

  • los módulos de sistemas de archivos tienen que tener soporte para ACL en el kernel Linux.
  • la opción acl en la línea de montaje del sistema de ficheros debe activarse. Si son sistemas de ficheros permanentes esto estaría en /etc/fstab
  • utilidades para gestionar las ACL’s.

Default ACL

Las ACL se pueden aplicar a ficheros y directorios. En el caso de los directorios nos puede interesar propagar de forma automática la ACL de un directorio a los ficheros y subdirectorios que se creen (con posterioridad) dentro de él. Este tipo especial de ACL disponible para directorios se conoce como ACL predeterminada (default ACL) 

Funcionamiento de las ACL predeterminadas

Cuando se crea un fichero o un subdirectorio dentro de un directorio que tiene definida una ACL predeterminada hay que tener en cuenta las siguientes consideraciones:

  • Los subdirectorios heredan la ACL predeterminada del directorio padre y se refleja de nuevo  como ACL predeterminada y también como ACL normal
  • Los ficheros heredan la ACL predeterminada y se refleja solo como ACL normal
  • Los permisos resultantes serían la intersección entre los permisos predeterminados (777 directorios y 666 ficheros) y los de la ACL predeterminada
Transmisión de ACL predeterminada a un fichero
Observación: Recuerda que si el directorio padre NO tiene ninguna ACL predeterminada, los permisos resultantes son los habituales calculados a través de la máscara definida con umask (002 habíamos dicho en U20.04)

jueves, 19 de mayo de 2022

08 - Permisos especiales

t (sticky bit) - directorios 

Cuando se lo asignamos a un directorio que tiene todos los permisos, conseguimos que los elementos que haya dentro (ficheros o subdirectorios), sólo puedan ser modificados o borrados por el propietario del elemento, el propietario del directorio o el root. El resto de usuarios aunque tenga permisos sobre dichos elementos solo podrá leerlos.

El sistema lo tiene configurado en algunos directorios públicos como por ejemplo /tmp ó /var/tmp. El bit t se activa o desactiva con el comando chmod empleando notación simbólica u octal (sumando 1000 a los permisos).

Activación sticky bit












Antiguamente se usaba también para mantener la imagen de un binario en memoria después de finalizar la ejecución del mismo pero con los avances en el hardware ya no se usa para esta función.

s nivel usuario (SUID)

Cuando el propietario de un binario asigna el atributo s a a la terna de usuario, el resto de usuarios podrá ejecutar el binario con los mismos privilegios que el propietario del binario

Dicho de otra forma, el sistema operativo cree que el que está ejecutando el binario es el propietario del binario en vez del usuario que lo está ejecutando realmente. Se produce lo que se denomina un cambio de dominio temporal a nivel de usuario durante la ejecución del binario.

Pero, ¿a que nos referimos con "los mismos privilegios que el propietario del binario?
Veamos un ejemplo, el binario passwd

Es un binario del sistema, /usr/bin/passwd, que cualquier usuario puede ejecutar para cambiar su contraseña personal. Este binario, como se puede observar, viene con el bit s activado a nivel de usuario.

Si recordamos un poco el tema de las contraseñas, el sistema las gestiona a través de dos ficheros, /etc/passwd y /etc/shadow que solo puede modificar su propietario, el root. No es difícil imaginar que el binario passwd lo que hace es modificar las líneas de dichos ficheros para conseguir su objetivo que es cambiar la contraseña.

¿Cómo es posible entonces, que un usuario normal, pueda modificar ficheros propiedad del root y sobre los que no tiene permisos de escritura?

La explicación es que el binario passwd que intenta la modificación de dichos ficheros tiene activado el SUID y el sistema se cree que el que lo está ejecutando es el propietario del binario que es el root y precisamente el root si tiene permisos para modificar dichos ficheros

Ejemplo de suid en el sistema 









El suid se puede activar con chmod usando notación simbólica u octal (sumando 4000) 


s nivel grupo (SGID)

Cuando el propietario de un binario asigna el atributo s a a la terna de grupo, el resto de usuarios podrá ejecutar el binario con los mismos privilegios que el grupo propietario del binario

Dicho de otra manera, el sistema cree que el usuario que ejecuta el binario tiene como grupo propietario el grupo propietario del binario en vez de el suyo, adquiriendo los privilegios del grupo propietario del binario. Se produce un cambio de dominio temporal a nivel de grupo durante la ejecución del binario.

Se activa o desactiva este bit empleando la notación simbólica de la siguiente manera: chmod g+s binario ó chmod g-s binario. También de forma octal se puede expresar sumando 2000 a los permisos del archivo. Busca un ejemplo en el sistema y razónalo.
 
SGID directorios

En el caso particular de aplicar el bit s a nivel de grupo sobre un directorio, los efectos son que a la hora de crear ficheros en ese directorio, el grupo propietario con el que salen por defecto dichos ficheros no será el grupo propietario del usuario que los crea, como debería ocurrir en situación normal, sino que será el grupo propietario del directorio que los contiene.

martes, 17 de mayo de 2022

07 - Estructura de un archivo. Enlaces

Estructura de un archivo

Los archivos (ficheros o directorios) están formados básicamente por tres elementos:

datos
Es la información propiamente dicha que contiene el fichero o directorio.

i-nodo
Es una estructura de datos que almacena información sobre el archivo y que se identifica por un número entero único (i-nodo). Almacena metadatos como el tamaño, UID, GID, número de enlaces, etc.

nombre de archivo
Es un nombre de archivo asociado al i-nodo.

Metadatos de un i-nodo
















Es importante entender que aunque un i-nodo es único y apunta a unos datos determinados puede tener diferentes nombres.

Enlace duro (hard link)

Es cada uno de los diferentes nombres asociados a un mismo i-nodo que como hemos dicho apunta a un único contenido. En términos prácticos son distintos nombres que se le pueden dar a un mismo fichero.

Esquema enlace duro












 


Características enlaces duros
  • El i-nodo y la zona de datos asociada estarán disponibles mientras estén referenciados por algún nombre. Ejemplo, si borras fich_original sigues pudiendo acceder a través de hlink1 y hlink2
  • El tamaño de un enlace duro es mínimo porque no es realmente un fichero nuevo sino un puntero sobre el i-nodo
  • Los permisos y propiedad de todos los enlaces duros son idénticos que los del original
  • Se puede mover un enlace duro pero solo dentro de la misma partición donde se creó
  • No es posible crear enlaces duros a carpetas
Las ventajas de uso de los enlaces duros se basan en la capacidad de tener copias de un fichero en diferentes ubicaciones sin que ocupen espacio en el disco y algunas aplicaciones se aprovechan de esta funcionalidad, copias de seguridad incremental, clasificación de información, etc.

Enlace blando (soft link)

Un enlace simbólico es un fichero independiente cuyo contenido (zona de datos) apunta a la ruta del fichero con el que está vinculado. En términos prácticos se trata de un tipo de fichero "especial" que apunta a otro fichero cuyo contenido es diferente al suyo.

Esquema enlace blando (o simbólico)
















Características enlaces blandos
  • Cómo la zona de datos del enlace blando apunta la ruta de un fichero, si el fichero se elimina o se mueve a otra ubicación el enlace se rompe.
  • El tamaño de un enlace blando ocupa lo que necesita para almacenar la ruta del fichero al que apunta.
  • En GNU/Linux los permisos de los enlaces blandos no tienen efecto y están todos activados
  • Se puede hacer enlaces blandos a ficheros de cualquier partición o ubicación
  • Se permite enlaces blandos a directorios 
  • Son mas lentos que los enlaces duros
Las ventajas de uso de los enlaces blandos se basan en la capacidad de abreviar rutas y enlazar ficheros y directorios desde cualquier parte, lo que permite por ejemplo a los servicios del sistema referenciar ficheros alejados, expandir el sistema de archivos a otras ubicaciones, sincronizar ficheros etc.