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