Cómo establecer listas de control de acceso (ACL) y cuotas de disco para usuarios y grupos


Las listas de control de acceso (también conocidas como ACL) son una característica del kernel de Linux que permite definir derechos de acceso más detallados para los archivos y directorios que los especificados por los permisos regulares ugo/rwx .

Por ejemplo, los permisos estándar ugo/rwx no permiten establecer permisos diferentes para diferentes usuarios o grupos individuales. Con las ACL, esto es relativamente fácil de hacer, como veremos en este artículo.

Comprobación de la compatibilidad del sistema de archivos con las ACL

Para asegurarse de que sus sistemas de archivos soportan actualmente las ACL, debe verificar que se hayan montado con la opción acl. Para hacerlo, usaremos tune2fs para los sistemas de archivos ext2/3/4 como se indica a continuación. Reemplace /dev/sda1 con el dispositivo o sistema de archivos que desea verificar:

# tune2fs -l /dev/sda1 | grep "Default mount options:"

rojo

En el siguiente sistema de archivos ext4 , podemos ver que las ACL se han habilitado para /dev/xvda2 :

# tune2fs -l /dev/xvda2 | grep "Default mount options:"

Si el comando anterior no indica que el sistema de archivos se haya montado con soporte para ACL, lo más probable es que la opción noacl esté presente en /etc/fstab .

En ese caso, elimínelo, desmonte el sistema de archivos y luego vuelva a montarlo, o simplemente reinicie su sistema después de guardar los cambios en /etc/fstab .

Introduciendo ACLs en Linux

Para ilustrar cómo funcionan las ACL, usaremos un grupo llamado desarrolladores y agregaremos a los usuarios walterwhite y saulgoodman (sí, ¡soy un fan de Breaking Bad! ) a ello .:

# groupadd developers
# useradd walterwhite
# useradd saulgoodman
# usermod -a -G developers walterwhite
# usermod -a -G developers saulgoodman

Antes de continuar, verifiquemos que ambos usuarios se hayan agregado al grupo de desarrolladores:

# id walterwhite
# id saulgoodman

Ahora creamos un directorio llamado prueba en /mnt , y un archivo llamado acl.txt dentro (/mnt/test/acl .txt ).

Luego, estableceremos el propietario del grupo en desarrolladores y cambiaremos sus permisos predeterminados ugo/rwx de forma recursiva a 770 (otorgando así lectura, escritura y ejecución permisos otorgados tanto al propietario como 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 se esperaba, puedes escribir a /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 ahora tan bueno. Sin embargo, pronto veremos un problema cuando debamos otorgar acceso de escritura a /mnt/test/acl.txt para otro usuario que no esté en el grupo de desarrolladores.

Los permisos estándar ugo/rwx requerirían que el nuevo usuario se agregue al grupo de desarrolladores, pero eso le daría los mismos permisos sobre todos los objetos que pertenecen al grupo. Ahí es precisamente donde las ACL son útiles.

Configurando ACL's en Linux

Hay dos tipos de ACL: acceso a ACL (que se aplican a un archivo o directorio) y predeterminado (opcional) ACL , que solo pueden aplicarse a un directorio .

Si los archivos dentro de un directorio donde se ha establecido una ACL predeterminada no tienen una ACL propia, heredan la ACL predeterminada de su directorio principal.

Permítanos darle al usuario gacanepa acceso de lectura y escritura a /mnt/test/acl.txt . Antes de hacer eso, echemos un vistazo a la configuración actual de ACL en ese directorio con:

# getfacl /mnt/test/acl.txt

Luego, cambie las ACL en el archivo, use u: seguido del nombre de usuario y : rw para indicar los permisos de lectura/escritura:

# setfacl -m u:gacanepa:rw /mnt/test/acl.txt

Y vuelva a ejecutar getfacl en el archivo para comparar. La siguiente imagen muestra el "Antes" y "Después" :

# getfacl /mnt/test/acl.txt

A continuación, tendremos que dar a otros permisos de ejecución 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 ahora debería poder escribir en el archivo. 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 una ACL predeterminada en un directorio (cuyo contenido se heredará a menos que se sobrescriba), 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/

La ACL anterior permitirá a los usuarios que no están en el grupo de propietarios tener acceso de lectura a los contenidos futuros del directorio /mnt/test . Tenga en cuenta la diferencia en la salida de getfacl/mnt/test antes y después del cambio:

Para eliminar una ACL específica, reemplace -m en los comandos anteriores con -x . Por ejemplo,

# setfacl -x d:o /mnt/test

Alternativamente, también puede usar la opción -b para eliminar TODAS las ACL en un solo paso:

# setfacl -b /mnt/test

Para obtener más información y ejemplos sobre el uso de las ACL, consulte el capítulo 10 , sección 2 , de la Guía de seguridad de openSUSE (también disponible para descargar sin costo en formato PDF ).

Establecer cuotas de disco de Linux en usuarios y sistemas de archivos

El espacio de almacenamiento es otro recurso que debe ser usado y monitoreado cuidadosamente. Para hacer eso, las cuotas se pueden establecer en una base de sistema de archivos, ya sea para usuarios individuales o para grupos.

Por lo tanto, se establece un límite en el uso del disco permitido para un usuario determinado o un grupo específico, y puede estar seguro de que sus discos no se llenarán al máximo por un usuario descuidado (o malintencionado).

Lo primero que debe hacer para habilitar las cuotas en un sistema de archivos es montarlo con las opciones usrquota o grpquota (para cuotas de usuarios y grupos, respectivamente) en /etc/fstab .

Por ejemplo, habilitemos cuotas basadas en usuarios en /dev/vg00/vol_backups y cuotas basadas en grupos en /dev/vg00/vol_projects .

Tenga en cuenta 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

Desmonte y vuelva a montar ambos sistemas de archivos:

# umount /home/projects
# umount /home/backups
# mount -o remount /home/projects
# mount -o remount /home/backups 

Luego verifique que las opciones usrquota y grpquota estén presentes en la salida del montaje (ver resaltado abajo):

# mount | grep vg00

Finalmente, ejecute los siguientes comandos para inicializar y habilitar las cuotas:

# quotacheck -avugc
# quotaon -vu /home/backups
# quotaon -vg /home/projects

Dicho esto, ahora asignemos cuotas al nombre de usuario y al grupo que mencionamos anteriormente. Más tarde, puede desactivar las cuotas con quotaoff .

Configuración de cuotas de disco de Linux

Comencemos estableciendo una ACL en /home/backups para el usuario gacanepa , que le dará permisos de lectura, escritura y ejecución en ese directorio:

# setfacl -m u:gacanepa:rwx /home/backups/

Entonces con

# edquota -u gacanepa

Haremos el soft limit = 900 y el hard limit = 1000 ( 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 flexibles y duros en la cantidad de archivos que este usuario puede crear.

El comando anterior iniciará el editor de texto () con un archivo temporal en el que podemos establecer los límites mencionados anteriormente:

Estas configuraciones harán que se muestre una advertencia al usuario gacanepa cuando haya alcanzado los límites 900-block o 20-inode para un valor predeterminado Período de gracia de 7 días.

Si la situación exceso de cuota no se ha eliminado para entonces (por ejemplo, eliminando archivos), el límite flexible se convertirá en el límite duro y se evitará que este usuario use más espacio de almacenamiento o cree más archivos.

Para realizar la prueba, hagamos que el usuario gacanepa intente crear un archivo 2 MB vacío test1 dentro de /home/backups :

# dd if=/dev/zero of=/home/backups/test1 bs=2M count=1
# ls -lh /home/backups/test1

Como puede ver, el archivo de operación de escritura falla debido a que se ha excedido la cuota de disco. Ya que solo los primeros 1000 KB se escriben en el disco, el resultado en este caso probablemente será un archivo dañado.

Del mismo modo, puede 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 establece los límites de la cuota con:

# edquota -g developers

Al igual que hicimos con el usuario gacanepa anteriormente.

El período de gracia se puede especificar para cualquier número de segundos, minutos, horas, días, semanas o meses mediante la ejecución.

# edquota -t

y actualizar los valores en Período de gracia de bloque y Período de gracia de inodo .

A diferencia del uso de bloque o inodo (que se establece en un usuario o grupo), el período de gracia se establece en todo el sistema.

Para informar las cuotas, puede usar la cuota -u [usuario] o quota -g [grupo] para obtener una lista rápida o repquota -v [/ ruta/a/filesystem] para un informe más detallado (detallado) y bien formateado.

Por supuesto, querrá reemplazar [usuario] , [grupo] y [/ path/to/filesystem] por usuario específico/Nombres de grupo y sistema de archivos que desea comprobar.

Resumen

En este artículo, hemos explicado cómo configurar Listas de control de acceso y las cuotas de disco para usuarios y grupos. Al usar ambos, podrá administrar los permisos y el uso del disco de manera más efectiva.

Si desea obtener más información sobre las cuotas, puede consultar el Mini-HowTo de cuotas en el Proyecto de documentación de Linux.

No hace falta decir que también puede contar con nosotros para responder preguntas. Simplemente envíelos utilizando el formulario de comentarios a continuación y estaremos más que encantados de echar un vistazo.