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:
tune2fs -l /dev/sda1 | grep “Default mount options:”
Como en el ejemplo:
[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
#setfacl -m “u:usuario:permisos” fichero o directorio
Si queremos agregar permisos a un grupo:
#setfacl -m “g:grupo:permisos” fichero o directorio
Permitir que todos los archivos o directorios hereden las entradas de ACL desde un directorio con:
#setfacl -dm “entrada” directorio
Eliminar una entrada específica:
#setfacl -x “entrada” fichero o directorio
Borrar todas las entradas:
#setfacl -b fichero o directorio
Para mostrar los permisos:
#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:
setfacl -m u:username:rw file
- Modificar la ACL predeterminada de un archivo para todos los usuarios:
setfacl -d -m u::rw file
- Eliminar la reglas de un archivo para un usuario:
setfacl -x u:username file
- Eliminar todas las entradas de un archivo:
setfacl -b file
Este resumen lo podéis obtener con la herramienta TLDR, de la que ya hablamos:
tldr setfacl
Laboratorio de pruebas
Tomemos el siguiente arbol de directorios para la empresa ficticia LibreCorp:
.
├── 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:
# 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.
useradd Jutidh
passwd Jutidh
usermod -aG librecorp Judith
setfacl -Rm u:Judith:rwx /opt/LibreCorp/Marketing
Si listamos los permisos del recurso Marketing:
[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:
[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.
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»
[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:
[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í:
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.