Listas de Control de Acceso ACL en Linux

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:”

Como en el ejemplo:

1
2
[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
  • setfacl: Modifica las ACL de dichos ficheros y carpetas

Para agregar permisos a un usuario

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

Si queremos agregar permisos a un grupo:

1
#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

Eliminar una entrada específica:

1
#setfacl -x “entrada” fichero o directorio

Borrar todas las entradas:

1
#setfacl -b fichero o directorio

Para mostrar los permisos:

1
#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
  • Modificar la ACL predeterminada de un archivo para todos los usuarios:
  • 1
    
    setfacl -d -m u::rw file
  • Eliminar la reglas de un archivo para un usuario:
  • 1
    
    setfacl -x u:username file
  • Eliminar todas las entradas de un archivo:
  • 1
    
    setfacl -b file

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

1
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

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::---
 
(...)

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

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::--

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

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

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

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

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

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.

3 Respuestas

  1. David dice:

    Gracias por el artículo David. Una pregunta: estos comandos de acl son equivalentes a los comandos de “siempre” tipo chmod, chown, etc? Si no es así, en que se diferencian?

    • Hola David,

      Con los permisos ACL puedes hacer muchas más cosas que con los permisos clásicos. Ya que permite interactuar con multitud de usuarios y grupos. Por ejemplo que unos usuarios o grupos puedan acceder a una carpeta y otros no, y que estos últimos ni siquiera vean dicha carpeta. Entre otras muchas cosas. Es muy similar a los permisos de usuario que gestiona Active Directory en MS Windows. Incluso lo podemos integrar con LDAP.

      Saludos

  2. Hola dice:

    Como puedo generar una alerta que informe que una lista ACL tuvo modificaciones en sus permisos?

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies
A %d blogueros les gusta esto: