jueves, 2 de noviembre de 2023

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)