Listas de Control de Acceso (también conocidas como ACLs) son una característica del kernel de Linux que permite definir derechos de acceso más detallados para archivos y directorios que los especificados por los permisos regulares ugo/rwx.
Por ejemplo, los permisos estándar ugo/rwx no permiten establecer diferentes permisos para usuarios individuales o grupos. Con ACLs esto es relativamente fácil de hacer, como veremos en este artículo.
Comprobando la Compatibilidad del Sistema de Archivos con ACLs
Para asegurarse de que sus sistemas de archivos actualmente admiten ACLs, debe verificar que hayan sido montados utilizando la opción acl. Para hacerlo, utilizaremos tune2fs para sistemas de archivos ext2/3/4 como se indica a continuación. Reemplace /dev/sda1 con el dispositivo o sistema de archivos que desee verificar:
# tune2fs -l /dev/sda1 | grep "Default mount options:"
Nota: Con XFS, las Listas de Control de Acceso son compatibles de forma nativa.
En el siguiente sistema de archivos ext4, podemos ver que las ACLs han sido habilitadas para /dev/xvda2:
# tune2fs -l /dev/xvda2 | grep "Default mount options:"

Si el comando anterior no indica que el sistema de archivos ha sido montado con soporte para ACLs, es probablemente debido a que la opción noacl está presente en /etc/fstab.
En ese caso, retírelo, desmonte el sistema de archivos y luego vuélvalo a montar, o simplemente reinicie su sistema después de guardar los cambios en /etc/fstab.
Introducción a las ACLs en Linux
Para ilustrar cómo funcionan las ACL, utilizaremos un grupo llamado developers y añadiremos a los usuarios walterwhite y saulgoodman (¡sí, soy fan de Breaking Bad!) a él.
# groupadd developers # useradd walterwhite # useradd saulgoodman # usermod -a -G developers walterwhite # usermod -a -G developers saulgoodman
Antes de proceder, verifiquemos que ambos usuarios hayan sido añadidos al grupo developers:
# id walterwhite # id saulgoodman

Ahora creemos un directorio llamado test en /mnt, y un archivo llamado acl.txt dentro (/mnt/test/acl.txt).
Luego estableceremos al propietario del grupo como developers y cambiaremos sus permisos predeterminados ugo/rwx recursivamente a 770 (concediendo así permisos de lectura, escritura y ejecución al propietario y al propietario del grupo del archivo):
# mkdir /mnt/test # touch /mnt/test/acl.txt # chgrp -R developers /mnt/test # chmod -R 770 /mnt/test
Como era de esperar, se puede escribir en /mnt/test/acl.txt como walterwhite o saulgoodman:
# su - walterwhite # echo "My name is Walter White" > /mnt/test/acl.txt # exit # su - saulgoodman # echo "My name is Saul Goodman" >> /mnt/test/acl.txt # exit

Hasta aquí todo va bien. Sin embargo, pronto veremos un problema cuando necesitemos otorgar acceso de escritura a /mnt/test/acl.txt para otro usuario que no esté en el grupo developers.
Los permisos estándar ugo/rwx requerirían que el nuevo usuario sea agregado al grupo developers, pero eso le daría los mismos permisos sobre todos los objetos pertenecientes al grupo. Ahí es precisamente donde las ACL resultan útiles.
Configuración de ACL en Linux
Existen dos tipos de ACL: las ACL
Si los archivos dentro de un directorio en el que se ha establecido un ACL predeterminado no tienen un ACL propio, heredan el ACL predeterminado de su directorio padre.
Demos al usuario gacanepa acceso de lectura y escritura a /mnt/test/acl.txt. Antes de hacerlo, echemos un vistazo a la configuración ACL actual en ese directorio con:
# getfacl /mnt/test/acl.txt
Luego cambie los ACL en el archivo, use u:
seguido del nombre de usuario y :rw
para indicar permisos de lectura / escritura:
# setfacl -m u:gacanepa:rw /mnt/test/acl.txt
Y ejecute getfacl en el archivo nuevamente para comparar. La siguiente imagen muestra el “Antes” y “Después”:
# getfacl /mnt/test/acl.txt

A continuación, necesitaremos dar permisos de ejecución a otros en el directorio /mnt/test:
# chmod +x /mnt/test
Tenga en cuenta que para acceder al contenido de un directorio, un usuario regular necesita permisos de ejecución en ese directorio.
El usuario gacanepa debería poder escribir en el archivo ahora. Cambie a esa cuenta de usuario y ejecute el siguiente comando para confirmar:
# echo "My name is Gabriel Cánepa" >> /mnt/test/acl.txt
Para establecer un ACL predeterminado a un directorio (cuyos contenidos heredarán a menos que se sobrescriban de otra manera), agregue d:
antes de la regla y especifique un directorio en lugar de un nombre de archivo:
# setfacl -m d:o:r /mnt/test # getfacl /mnt/test/
El ACL anterior permitirá que los usuarios que no estén en el grupo propietario tengan acceso de lectura a los futuros contenidos del directorio /mnt/test. Tenga en cuenta la diferencia en la salida de getfacl /mnt/test antes y después del cambio:

Para eliminar un ACL específico, reemplace -m
en los comandos anteriores con -x
. Por ejemplo,
# setfacl -x d:o /mnt/test
Alternativamente, también puedes usar la opción -b
para eliminar TODOS los ACL de una sola vez.
# setfacl -b /mnt/test
Para obtener más información y ejemplos sobre el uso de ACL, consulta el capítulo 10, sección 2, de la Guía de Seguridad de openSUSE (también disponible para descargar de forma gratuita en formato PDF).
Establecer Cuotas de Disco en Linux para Usuarios y Sistemas de Archivos
El espacio de almacenamiento es otro recurso que debe utilizarse y monitorearse cuidadosamente. Para ello, se pueden establecer cuotas a nivel de sistema de archivos, ya sea para usuarios individuales o para grupos.
De esta manera, se coloca un límite en el uso de disco permitido para un usuario dado o un grupo específico, y puedes estar seguro de que tus discos no se llenarán hasta su capacidad por un usuario descuidado (o malintencionado).
Lo primero que debes hacer para habilitar cuotas en un sistema de archivos es montarlo con las opciones usrquota o grpquota (para cuotas de usuario y grupo, respectivamente) en /etc/fstab.
Por ejemplo, vamos a habilitar cuotas basadas en usuarios en /dev/vg00/vol_backups y cuotas basadas en grupos en /dev/vg00/vol_projects.
Nota que el UUID se utiliza para identificar cada sistema de archivos.
UUID=f6d1eba2-9aed-40ea-99ac-75f4be05c05a /home/projects ext4 defaults,grpquota 0 0 UUID=e1929239-5087-44b1-9396-53e09db6eb9e /home/backups ext4 defaults,usrquota 0 0
Desmonta y vuelve a montar ambos sistemas de archivos:
# umount /home/projects # umount /home/backups # mount -o remount /home/projects # mount -o remount /home/backups
Luego verifica que las opciones usrquota y grpquota estén presentes en la salida de mount (ver destacado a continuación):
# mount | grep vg00

Por último, ejecuta los siguientes comandos para inicializar y habilitar
# quotacheck -avugc # quotaon -vu /home/backups # quotaon -vg /home/projects
Dicho esto, asignemos cuotas al nombre de usuario y al grupo que mencionamos anteriormente. Más tarde puedes desactivar las cuotas con quotaoff.
Configuración de Cuotas de Disco en Linux
Comencemos configurando un ACL en /home/backups para el usuario gacanepa, lo que le dará permisos de lectura, escritura y ejecución en ese directorio:
# setfacl -m u:gacanepa:rwx /home/backups/
Luego con,
# edquota -u gacanepa
Estableceremos el límite suave en 900 y el límite duro en 1000 bloques (1024 bytes/bloque * 1000 bloques = 1024000 bytes = 1 MB) de uso de espacio en disco.
También podemos establecer un límite de 20 y 25 como límites suave y duro en la cantidad de archivos que este usuario puede crear.
El comando anterior abrirá el editor de texto ($EDITOR) con un archivo temporal donde podemos establecer los límites mencionados anteriormente:

Estas configuraciones mostrarán una advertencia al usuario gacanepa cuando haya alcanzado los límites de 900 bloques o 20 inodos durante un período de gracia predeterminado de 7 días.
Si la situación de sobre cuota no se ha eliminado para entonces (por ejemplo, eliminando archivos), el límite suave se convertirá en el límite duro y se evitará que este usuario utilice más espacio de almacenamiento o cree más archivos.
Para probar, hagamos que el usuario gacanepa intente crear un archivo vacío de 2 MB llamado test1 dentro de /home/backups:
# dd if=/dev/zero of=/home/backups/test1 bs=2M count=1 # ls -lh /home/backups/test1

Como puedes ver, la operación de escritura del archivo falla debido a que se ha excedido la cuota de disco. Dado que solo se escriben los primeros 1000 KB en el disco, es probable que el resultado en este caso sea un archivo corrupto.
De manera similar, puedes crear una ACL para los grupos de desarrolladores con el fin de dar a los miembros de ese grupo acceso rwx a /home/projects:
# setfacl -m g:developers:rwx /home/projects/
Y establecer los límites de cuota con:
# edquota -g developers
Así como lo hicimos anteriormente con el usuario gacanepa.
El período de gracia puede ser especificado en cualquier número de segundos, minutos, horas, días, semanas o meses ejecutando.
# edquota -t
y actualizando los valores bajo Período de gracia de bloque y Período de gracia de i-nodo.
A diferencia del uso de bloque o i-nodo (que se establecen en base a usuario o grupo), el período de gracia se establece en todo el sistema.
Para reportar cuotas, puedes usar quota -u [usuario]
o quota -g [grupo]
para una lista rápida o repquota -v [/ruta/al/sistema_de_archivos]
para un informe más detallado (verbose) y bien formateado.
Por supuesto, querrás reemplazar [usuario]
, [grupo]
y [/ruta/al/sistema_de_archivos]
con nombres de usuario / grupo específicos y el sistema de archivos que deseas verificar.
Resumen
En este artículo hemos explicado cómo establecer Listas de Control de Acceso y cuotas de disco para usuarios y grupos. Usando ambos, podrás gestionar permisos y uso de disco de manera más efectiva.
Si deseas obtener más información sobre cuotas, puedes consultar el Quota Mini-HowTo en el Proyecto de Documentación de Linux.
No hace falta decir que también puedes contar con nosotros para responder preguntas. Simplemente envíalas utilizando el formulario de comentarios a continuación y estaremos encantados de echar un vistazo.
Source:
https://www.tecmint.com/set-access-control-lists-acls-and-disk-quotas-for-users-groups/