Hoy le toca el turno a las Listas de Control de Acceso o ACL, en sistemas GNU/Linux. Simplificando se trata de una lista de permisos adjuntos a un objeto. No es la primera vez que hablamos de las ACL en la web, ya que hablamos de ellas en su combinación con el servicio SAMBA

¿Qué son las ACL?

Una ACL especifica a qué usuarios o procesos del sistema se les otorga acceso a los objetos, así como qué operaciones se les permiten a los objetos dados. Cada entrada especifica un tema y una operación.

Por ejemplo, si un objeto de fichero, tiene una ACL que contiene (David: leer,escribir;Angela:leer), esto le daría permiso a David para leer y modificar el archivo, en cambio Angela solo podría leerlo.

¿Cómo funcionan?

Primero de todo hay que tener en cuenta que el sistema de archivos debe de tener habilitado las ACL. Para ello se debe especificar cuando se montan, bien de manera provisional o de manera permanente en el fichero /etc/fstab

Para comprobar que la opción “acl” está habilitado en las particiones montadas, podemos realizar la siguiente comprobación:

1 tune2fs -l / dev / sda1 | grep “Default mount options:” tune2fs -l /dev/sda1 | grep “Default mount options:”

Como en el ejemplo:

1 2 [ root @ servcentos01 ] # tune2fs -l /dev/sda1 | grep "Default mount options:" Default mount options: user_xattr acl [root@servcentos01]# tune2fs -l /dev/sda1 | grep "Default mount options:" Default mount options: user_xattr acl

Los sistemas de ficheros como Btrfs y ext* ya vienen con las ACL habilitadas por defecto.

Trabajando con ACL

Para trabajar con las Listas de Control de Acceso tenemos disponibles dos herramientas fundamentales, que son:

getfacl : Muestra información de los permisos de ficheros y carpetas

: Muestra información de los permisos de ficheros y carpetas setfacl: Modifica las ACL de dichos ficheros y carpetas

Para agregar permisos a un usuario

1 # setfacl -m “u:usuario:permisos” fichero o directorio #setfacl -m “u:usuario:permisos” fichero o directorio

Si queremos agregar permisos a un grupo:

1 # setfacl -m “g:grupo:permisos” fichero o directorio #setfacl -m “g:grupo:permisos” fichero o directorio

Permitir que todos los archivos o directorios hereden las entradas de ACL desde un directorio con:

1 # setfacl -dm “entrada” directorio #setfacl -dm “entrada” directorio

Eliminar una entrada específica:

1 # setfacl -x “entrada” fichero o directorio #setfacl -x “entrada” fichero o directorio

Borrar todas las entradas:

1 # setfacl -b fichero o directorio #setfacl -b fichero o directorio

Para mostrar los permisos:

1 # getfacl nombre de fichero o directorio #getfacl nombre de fichero o directorio

Setfacl: Principales usos

Veamos un resumen de los principales parámetros que podemos utilizar con la herramienta “setfacl”

Modificar ACL de un archivo para el usuario con acceso de lectura y escritura:

1 setfacl -m u:username:rw file setfacl -m u:username:rw file Modificar la ACL predeterminada de un archivo para todos los usuarios:

1 setfacl -d -m u::rw file setfacl -d -m u::rw file Eliminar la reglas de un archivo para un usuario:

1 setfacl -x u:username file setfacl -x u:username file Eliminar todas las entradas de un archivo: 1 setfacl -b file setfacl -b file

Este resumen lo podéis obtener con la herramienta TLDR, de la que ya hablamos:

1 tldr setfacl tldr setfacl

Laboratorio de pruebas

Tomemos el siguiente arbol de directorios para la empresa ficticia LibreCorp:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 . ├── Compras ├── Contabilidad │ ├── Albaranes │ ├── Balances │ ├── Facturas │ └── LibroCuentas ├── IT │ ├── Inventario │ └── Software ├── Marketing │ └── Campañ as └── Ventas └── Comerciales . ├── Compras ├── Contabilidad │ ├── Albaranes │ ├── Balances │ ├── Facturas │ └── LibroCuentas ├── IT │ ├── Inventario │ └── Software ├── Marketing │ └── Campañas └── Ventas └── Comerciales

Existe un grupo creado llamado “librecorp”, con tres usuarios “david”, “Fernando” y “María”

Listar permisos ACL con getfacl

Si utilizamos “getfacl” vemos los permisos que tienen asignadas las diferentes carpetas:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 # file: Compras # file: Compras # owner: root # group: librecorp user::rwx user:Fernando:r-x group::--- group:librecorp:r-x mask::r-x other::--- default:user::rwx default:group::--- default:group:librecorp:r-x default:mask::r-x default:other::--- ( ... ) # file: IT # owner: root # group: librecorp user::rwx user:david:rwx user:Fernando:r-x group::--- group:librecorp:r-x mask::rwx other::--- default:user::rwx default:group::--- default:group:librecorp:r-x default:mask::r-x default:other::--- # file: Marketing # owner: root # group: librecorp user::rwx user:Fernando:r-x user:Maria:rwx group::--- group:librecorp:r-x mask::rwx other::--- default:user::rwx default:group::--- default:group:librecorp:r-x default:mask::r-x default:other::--- ( ... ) # file: Compras # file: Compras # owner: root # group: librecorp user::rwx user:Fernando:r-x group::--- group:librecorp:r-x mask::r-x other::--- default:user::rwx default:group::--- default:group:librecorp:r-x default:mask::r-x default:other::--- (...) # file: IT # owner: root # group: librecorp user::rwx user:david:rwx user:Fernando:r-x group::--- group:librecorp:r-x mask::rwx other::--- default:user::rwx default:group::--- default:group:librecorp:r-x default:mask::r-x default:other::--- # file: Marketing # owner: root # group: librecorp user::rwx user:Fernando:r-x user:Maria:rwx group::--- group:librecorp:r-x mask::rwx other::--- default:user::rwx default:group::--- default:group:librecorp:r-x default:mask::r-x default:other::--- (...)

Observamos que los usuarios del grupo “librecorp” pueden acceder a los recursos en modo lectura. Además el usuario Fernando tiene los permisos de lectura declarados explicitamente. En el caso de David, tiene permisos de lectura, escritura y ejecución sobre IT En lo que respecta a Maria tiene todos los permisos sobre la carpeta Marketing.

Asignar permisos ACL a un nuevo usuario con setfacl

La empresa ha tenido una nueva incorporación en el departamento de Marketing, llamada Judith, creamos el usuario y le asignamos al grupo. Además le daremos permiso de escritura sobre la carpeta Marketing.

1 2 3 4 useradd Jutidh passwd Jutidh usermod -aG librecorp Judith setfacl -Rm u:Judith:rwx / opt / LibreCorp / Marketing useradd Jutidh passwd Jutidh usermod -aG librecorp Judith setfacl -Rm u:Judith:rwx /opt/LibreCorp/Marketing

Si listamos los permisos del recurso Marketing:

1 2 3 4 5 6 7 8 9 10 11 12 [ root @ servcentos LibreCorp ] # getfacl Marketing # file: Marketing # owner: root # group: librecorp user::rwx user:Fernando:r-x user:Maria:rwx user:Judith:rwx group::--- group:librecorp:r-x mask::rwx other::-- [root@servcentos LibreCorp]# getfacl Marketing # file: Marketing # owner: root # group: librecorp user::rwx user:Fernando:r-x user:Maria:rwx user:Judith:rwx group::--- group:librecorp:r-x mask::rwx other::--

A modo de ejemplo, utilizamos el usuario David para intentar escribir sobre los departamentos de Marketing y de IT:

1 2 3 4 5 [ david @ servcentos LibreCorp ] $ touch Marketing / prueba touch: cannot touch ‘Marketing / prueba’: Permission denied [ david @ servcentos LibreCorp ] $ touch IT / prueba [ david @ servcentos LibreCorp ] $ ls IT / prueba IT / prueba [david@servcentos LibreCorp]$ touch Marketing/prueba touch: cannot touch ‘Marketing/prueba’: Permission denied [david@servcentos LibreCorp]$ touch IT/prueba [david@servcentos LibreCorp]$ ls IT/prueba IT/prueba

Como David no tiene permisos sobre el recurso Marketing, el sistema le muestra un mensaje de “Acceso denegado”, en cambio puede crear sin problemas el fichero “prueba” dentro de la carpeta de IT.

Eliminar permisos ACL

Nos comunican que María se marcha de la empresa, por lo que debemos eliminar los permisos que tiene actualmente sobre la carpeta de Marketing, para realizar este paso, usaremos la herramienta “setfacl”, junto con el parémetro “-x“, que se utiliza para tal fin.

1 setfacl -Rx Maria / opt / LibreCorp / Marketing setfacl -Rx Maria /opt/LibreCorp/Marketing

De esta manera ya no tendrá permisos de escritura en el recurso. Por último la eliminamos del grupo “librecorp”, utilizando la herramienta “gpasswd”

1 2 [ david @ servcentos opt ] $ sudo gpasswd -d Maria librecorp Removing user Maria from group librecorp [david@servcentos opt]$ sudo gpasswd -d Maria librecorp Removing user Maria from group librecorp

Copias de seguridad de las ACL y como restaurarlas

Hay que tener en cuenta que las Listas de Control de Acceso irán variando con el tiempo, por lo que es recomendable realizar una copia de seguridad de estas. Para ello simplemente debemos utilizar la salida standard “stdout” sobre un fichero.

Como sigue:

1 [ david @ servcentos ~ ] $ sudo getfacl -R LibreCorp > / home / david / backup-acl.txt [david@servcentos ~]$ sudo getfacl -R LibreCorp > /home/david/backup-acl.txt

Utilizamos el parámetros “-R” para que nos guarde también los permisos de las subcarpetas y ficheros, de manera recursiva.

Si en algún momento queremos recuperar las ACL de la copia de seguridad utilizaremos la opción “–restore“, tal que así:

1 setfacl --restore = / home / david / backup-acl.txt setfacl --restore=/home/david/backup-acl.txt

Y esto es todo. Las listas de control de acceso tienen un sin fin de posibilidades. Os animo a jugar con ellas.

Espero que el artículo os haya parecido interesante.