Tuesday, 28 March 2023
MONOGRÁFICO: Listas de control de acceso (ACL) - Utilización de ACLs en el sistema de archivos PDF Print E-mail
SOFTWARE - Servidores
Written by Elvira Mifsud   
Sunday, 30 September 2012 00:00
Article Index
MONOGRÁFICO: Listas de control de acceso (ACL)
Introducción
Utilización de ACLs en el sistema de archivos
Utilización de ACLs en routers
Conclusión
All Pages

Utilización de ACLs en el sistema de archivos

En este punto vamos conocer la sintaxis y el funcionamiento de las ACLs en Ubuntu. También aprenderemos a utilizar herramientas de gestión asociadas a las ACLs siempre dentro del ámbito del sistema de archivos. 

También comprobaremos la ejecución y analizaremos la salida generada por las ACLs.

Sintaxis

Una ACL se representa por tres campos separados por ":". 

[Tipo]:[Calificador]:ListaPermisos[,...]

Tipo:

  • "u" Usuario 
  • "g" Grupo 
  • "o" Otro 
  • "m" Máscara 

Calificador: 

  • UID (ID numérico de usuario) 
  • GID (ID numérico de grupo) 
  • Vacío (Asume UID,GID del creador) 

ListaPermisos: 

El tercer campo es el de acceso y puede ser representado de 2 maneras:

  • Cadena estándar rwx (las cadenas se pueden remplazar por "-" si no queremos dar acceso de ese tipo) 
  • Cadena simbólica + ^ 

Utilidades

El paquete acl contiene las órdenes:

  • chacl: Permite cambiar, examinar o eliminar ACL. 
  • getfacl: Devuelve la lista de control de acceso a un fichero o directorio. 
  • setfacl: Asigna, modifica o elimina una lista de control de acceso de un archivo o directorio. 

Funcionamiento de las ACL

1. Mostrar ACL: 

Nos situamos en el directorio ~/datos en el que tenemos permisos de escritura. Recordar que el carácter ~ equivale al directorio home del usuario. Por ejemplo, para el usuario admin sería equivalente a /home/admin/.

La ACL para un directorio al que no se le ha asignado una ACL explícitamente, toma los permisos de umask

$ umask
0022 

Recordar que el significado de 0022, como máscara general del sistema, es el siguiente:

  • Los directorios de crean con permisos: rwx r-x r-x
  • Los archivos se crean con permisos: rw- r-- r--

En nuestro caso y para ver la ACL por defecto (sin asignar ninguna) del directorio (actual '.') utilizamos la orden siguiente:

$ getfacl .
# file: .
# owner: admin
# group: admin
user::rwx
group::r-x
other::r-x

Creamos en el directorio actual un par de ficheros 'archivo1' y 'archivo2' con la orden touch. 

$ ls -l arch*
-rw-r--r-- 1 admin admin 0 2012-09-14 11:56 archivo1
-rw-r--r-- 1 admin  admin 0 2012-09-14 11:56 archivo2

La acl por defecto para el fichero archivo1 es: 

$ getfacl archivo1
# file: archivo1
# owner: admin
# group: admin
user::rw-
group::r--
other::r-- 

2. Establecer ACL

Importante: Antes de ejecutar la orden comprobar los permisos existentes para comparar después de establecer la ACL. 

Hay tres maneras de establecer un ACL: 

  1. Usando el comando setfacl que sobrescribe cualquier ACL anterior. 
  2. Usando el comando setfacl con la opción -m (modifica ACL). 
  3. Usando chacl para modificar una ACL existente. 

Ejemplos: 

En el directorio ~/datos y sobre el fichero 'archivo1' queremos dar permisos de lectura y escritura al usuario prueba que deberemos crear previamente. 

$ setfacl -m user:prueba:rw- ~/datos/archivo1

Ahora queremos que todos los archivos o directorios creados dentro de un directorio 'archivos' en ~/datos puedan ser leídos y modificados por el usuario prueba. La orden es la siguiente: 

$ setfacl -d -m u:prueba:rw- ~/datos/archivos/$

Es importante el orden en el que aparecen los argumentos. En concreto las opciones -d y -m deben aparecer en este orden. Y, en general, la opción -m debe estar siempre junto a [Tipo]:[Calificador]:ListaPermisos.

Algunas opciones de setfacl son:

Opción Descripción

-R  

Cambia permisos a archivos y directorios de forma descendente a partir de un directorio dado.  

-d  

Asigna los permisos por defecto.  

-b  

Borra todos los permisos adicionales, conservando únicamente los básicos de UGO.

-k  

Borra los permisos por defecto.

-m  

Modifica los permisos agregando/cambiando por los nuevos valores.

3. Ver las ACL

La orden getfacl obtiene la lista de control de acceso del archivo o directorio dado. Podemos consultar el estatus del fichero archivo1 después de asignar una nueva ACL de la forma: 

$ getfacl ~/datos/archivo1
# file: datos/archivo1
# owner: admin
# group: admin
user::rw-
user:prueba:rw-
group::r--
mask::rw-
other::r--

Como podemos observar, prueba tiene permisos de lectura y escritura sobre el fichero archivo1

Algunas opciones de getfacl son: 

Opción Descripción

-R  

Cambia permisos a archivos y directorios de forma descendente a partir de un directorio dado.  

-d  

Muestra los permisos por defecto.  

4. Modificar las ACL

La orden chacl modifica una ACL existente. 

El formato es algo mas complicado. Por ejemplo, añadimos al usuario prueba como alguien que puede leer el fichero archivo2:

$ chacl u::rw-,g::r--,o::---,u:prueba:r--,m::rw archivo2

La parte u::rw,g::r--,o::--- es la ACL existente y la parte u:prueba:r--,m::rw- especifica el nuevo usuario que quiero añadir a dicha acl y la máscara de derechos efectivos cuando se añada. Como se puede observar la sintaxis es diferente.

La máscara de derechos efectivos es la unión de todos los permisos ya existentes de UGO (Usuario, Grupo, Otros) para un fichero o directorio. Se obtiene al añadir un usuario a la ACL. 

Para comprobar que han sido añadidos estos permisos a la ACL usaremos: 

$ getfacl archivo2
# file: archivo2
# owner: admin
# group: admin
user::rw-
user:prueba:r--
group::r--
mask::rw-
other::---$

Es importante saber que los comandos cp y mv copian o mueven cualquier ACL asociada a ficheros y directorios. 

5. ACL por defecto 

Las ACLs por defecto permiten indicar cuál es el juego de ACLs que queremos que se aplique automáticamente a los nuevos ficheros y directorios que se creen dentro de un directorio dado. Se dice en estos casos que los permisos se heredan desde el directorio padre. 

La sintaxis es idéntica a la de una ACL normal, pero se debe usar además la opción -d.

Los permisos de una ACL por defecto de un directorio se transfieren a los archivos y subdirectorios de dicho directorio de dos formas: 

  • El subdirectorio hereda la ACL por defecto del directorio padre tanto como ACL por defecto como de ACL de acceso. 
  • El archivo hereda la ACL por defecto como ACL de acceso. 

Si el directorio padre no dispone de una ACL por defecto, los bits de permiso definidos en umask se restan de los permisos al pasar por parámetro mode, y el resultado se asigna al nuevo objeto. 

Si existe una ACL por defecto para el directorio padre, los bits de permiso asignados al nuevo objeto se corresponden con la porción coincidente de los permisos del parámetro mode y con aquellos que se definen en la ACL por defecto. El comando umask se descarta en este caso. 

Ejemplo:

Creamos un directorio llamado 'midirectorio' y comprobamos que tiene estas características: 

# file: midirectorio
# owner: admin
# group: admin
user::rwx
group::r-x
other::---

Y sobre midirectorio ejecutamos la orden siguiente: 

$setfacl -m user:prueba:rwx,group:mascotas:rwx midirectorio 

Añadir una ACL por defecto al directorio 'midirectorio' con: 

$setfacl -d -m group:mascotas:r-x midirectorio 

La opción -d del comando setfacl hace las siguientes modificaciones (opción -m) en la ACL por defecto. El resultado es el siguiente: 

$getfacl midirectorio 
# file: midirectorio 
# owner: admin 
# group: admin 
user::rwx 
user:prueba:rwx 
group::r-x 
group:mascotas:rwx 
mask::rwx 
other::--- 
default:user::rwx 
default:group::r-x 
default:group:mascotas:r-x 
default:mask::r-x 
default:other::--- 

El comando getfacl muestra tanto la ACL de acceso como la ACL por defecto. 

La ACL por defecto se compone de todas las líneas que comienzan por default

Aunque se ejecutó solamente el comando setfacl con una entrada para el grupo mascotas para obtener la ACL por defecto, el comando setfacl ha copiado automáticamente las entradas restantes de la ACL de acceso para crear una ACL por defecto válida. 

Las ACL por defecto únicamente intervienen cuando se crean nuevos elementos, que solamente heredan permisos de la ACL por defecto de su directorio padre. 

La entrada mask define los permisos de acceso máximos que tienen validez para todas las entradas de la clase group.

Si ahora se crea un subdirectorio 'misubdir' éste heredará la ACL por defecto.

mkdir midirectorio/misubdir
getfacl midirectorio/misubdir
# file: midirectorio/misubdir
# owner: admin
# group: admin
user::rwx
user:prueba:rwx
group::r-x
group:mascotas:rwx
mask::rwx
other::---
default:user::rwx
default:group::r-x
default:group:mascotas:r-x
default:mask::r-x
default:other::---

6. ACL extendida

Una ACL extendida (extended) contiene además una entrada mask (máscara) y puede incluir varias entradas del tipo named user (usuario identificado por el nombre) y named group (grupo identificado por el nombre). 

TipoFormato en texto

dueño 

 

user::rwx

 

 

nombre usuario

 

user:name:rwx  

grupo del dueño  

 

group::rwx

 

 

nombre grupo

 

 

group:name:rwx

 

mascara 

 

mask::rwx

 

otros

other::rwx

Los permisos definidos en las entradas dueño y otros siempre tienen vigencia. 

Excepto la entrada mascara, el resto de entradas (nombre usuario, grupo del dueño y nombre grupo) pueden estar activadas o bien enmascaradas. Si se han definido permisos tanto en las entradas mencionadas en primer lugar como en la máscara, tendrán validez. Los permisos que sólo han sido definidos en la máscara o en la propia entrada, no tienen validez. 

Si en la primera columna de la salida de la orden ls -l aparece un signo + hace referencia a una ACL extendida.  

$ ls -dl dir1 
drwxrwx---+ 2 admin admin 4096 oct 14 19:47 dir1

Ejemplos

  1. Vamos a explicar qué hace la siguiente orden y cómo quedaría el esquema de permisos después de su ejecución:
$ getfacl fich1 | setfacl --set-file=- fich2

La orden obtiene los permisos del fichero 'fich1' y los asigna (utilizando la redirección de entrada '|') al archivo 'fich2'. Estamos utilizando el argumento – set-file con el '-' que indica que se está tomando como permisos los que le llegan por la redirección '|'. En resumen, después de la ejecución de la orden fich1 y fich2 tendrán los mismos permisos, incluidas ACLs establecidas en fich1.

  1. Eliminamos los permisos predeterminados en la lista de control de acceso de un directorio. Para ello utilizamos la opción -k (--remove-default):
$setfacl -k ~/dir1
  1. Si queremos eliminar todos los permisos en la lista de control de acceso de un directorio, volviendo a la situación inicial utilizamos la opción -b (--remove-all):
$setfacl -b ~/dir1
  1. Vamos a explicar qué hace la siguiente orden y cómo quedaría el esquema de permisos después de su ejecución:
$setfacl -R -b ~/dir1
  1. Veamos qué hace la orden siguiente:
$ setfacl -R -d -m group:grupo1:rwx "./dir/"
La orden actúa sobre el directorio 'dir' que es un subdirectorio del directorio actual. Establece como ACL para usuarios del grupo 'grupo1' sobre 'dir' todos los permisos (rwx), lo hace de forma recursiva (-R) sobre toda la estructura que cuelgue de 'dir' y establece esta ACL por defecto (-d).
  1. Escribimos ahora la orden que guarde en un archivo las ACL de todo el directorio y su contenido en un archivo dentro del propio directorio, llamado dir.acl.  

Primero comprobamos los permisos de 'dir':

$ getfacl dir/ 
# file: dir/ 
# owner: admin 
# group: admin 
user::rwx 
group::r-x 
other::r-x 
default:user::rwx 
default:group::r-x 
default:group:grupo1:rwx 
default:mask::r-x 
default:other::r-x 

Ejecutamos ahora la orden que guarda las ACL:

$ getfacl -R dir > dir/dir.acl 

Ahora podríamos asignar estas ACL a cualquier otro directorio que quisiéramos.



 

Revista INTEFP

Marcadores Sociales

Facebook MySpace Twitter Delicious Google Bookmarks