miércoles, 30 de mayo de 2018

12 - Listas de control de acceso (ACL)

¿Que son las acl?
El sistema de permisos de linux UGO, es un sistema muy rígido y limitado que solo permite interactuar con 3 entidades usuario, grupo y todo el mundo. Sin embargo no se permite por ejemplo dar permisos de forma individual a usuarios o grupos concretos.

Las acl (access control lists) son una ampliación del sistema de permisos UGO/rwx que permite un control más preciso dando al propietario de un objeto la capacidad de conceder o denegar acceso a otros usuarios o grupos específicos que no sean el usuario o grupo propietario.

Cada una de las líneas que componen una acl recibe el nombre de ace (access control entry)

Requisitos Previos

En general, podría ser necesario instalar las utilidades acl de los repositorios, bien porque no estén instaladas por defecto o porque se haya añadido un dispositivo nuevo con posterioridad a la instalación del SO, donde se desean activar las acl. Por ejemplo en U16.04 desktop están ya instaladas por defecto.



El comando tune2fs nos puede informar si el sistema se ha montado para utilizar acl


En cualquier caso, si es necesario activar las acl en algún dispositivo, y se desea hacerlo de forma persistente, habrá que dejar constancia en el fichero fstab y remontar la partición si no se quiere reiniciar. Por ejemplo, en U14.04 server las acl no se instalan por defecto  


Notación

[Tip
o]:[Calificador]:[Lista Permisos]

Tipo
 puede ser: user(u), group(g), other(o) y mask(m)
Calificador puede ser: nombre de grupo o usuario, UID, GID o vacío (asume UID y GID creador)

Lista Permisos puede expresarse en notación simbólica o en notación octal


Líneas 1-3 nombre fichero, propietario y grupo propietario
Línea 4 permisos especiales
Lineas 5, 7 y 10 permisos UGO (no tienen calificador). Entradas implícitas
Líneas 6 y 8 permisos explícitos acl

Línea 9 máscara que obtiene permisos efectivos. Aplica a permisos explícitos
Líneas 11-15 acl por defecto del directorio (solo para directorios)


Mostrar  acl

El comando getfacl muestra la acl de un fichero/directorio. En caso que no tenga asignada acl de forma explícita, toma los permisos efectivos UGO. 


Mostrando información acl de directorio y de fichero


Establecer acl a fichero

El comando setfacl permite establecer de forma explícita acl's ,a ficheros/directorios. Es importante tener en cuenta que no es lo mismo establecer una acl sobre un fichero que sobre un directorio


Estableciendo permisos explícitos para alum01 sobre fichero
-R:  Cambia permisos a archivos/directorios de forma descendente a partir de un directorio dado. 
-d:  Asigna los permisos por defecto (solo directorios).
-b:  Borra todos los permisos adicionales, conservando únicamente los básicos de UGO.
-k:  Borra los permisos por defecto.
-m: Modifica los permisos agregando o cambiando por nuevos valores.


Importante: La opción -m debe de estar junto a [Tipo]:[Calificador]:ListaPermisos


Establecer acl a directorio

Cómo en el caso anterior se puede asignar permisos explícitos a un directorio de la misma manera.


Estableciendo permisos explícitos para alum01 sobre directorio
Pero existe un inconveniente que vamos a explicar sobre el ejemplo anterior. Otorgar permisos rw a alum01 sobre sistemas no implica que alum01 tenga permisos rw sobre lo que se cree dentro de sistemas, excepto que lo cree alum01 claro.

Establecer default acl a directorio

Habitualmente cuando utilizamos acl's para conceder permisos a un usuario específico sobre un directorio queremos que esos permisos se extiendan de manera predeterminada también a todo el contenido que se cree en el directorio. Este tipo de acl's que se transmiten automáticamente desde arriba hacia abajo se denominan acl por defecto o default acl.

Estableciendo permisos explícitos y heredables para alum01 sobre directorio
Al establecer default acl en los permisos de la carpeta, los permisos se extienden a cualquier cosa que se cree en su interior



Como se puede observar la lista incluye los permisos UGO, los permisos explícitos y otra vez las entradas de permisos por defecto que indican herencia.

La máscara de permisos explícitos

La entrada mask es una entrada especial que representa el máximo de permisos que se pueden asignar al objeto a través de las ace's explícitas de usuario y grupo. Aparece automáticamente al momento de añadir una entrada explícita.

Se puede modificar con el comando setfacl y se utiliza para enmascarar los permisos explícitos de usuarios y grupos y obtener los permisos explícitos efectivos. Vamos a verlo con uno de los ejemplos anteriores

Añadir leyenda
En el ejemplo anterior mask=rw- significa que al aplicarla sobre los permisos explícitos de usu1 (rw-) daría como resultado los permisos efectivos; como en principio son iguales 110 & 110 = 110, usu1 puede obtener lectura y escritura como máximo pero no ejecución.

Modifiquemos la máscara para ver los nuevos permisos efectivos de usu1. Por ejemplo si colocamos la nueva máscara con r-x, los permisos efectivos serían 101 & 110 = 100 (r--)