Cómo configurar 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 archivos y directorios que los especificados por los permisos ugo/rwx habituales.

Por ejemplo, los permisos ugo/rwx estándar no permiten establecer diferentes permisos para diferentes usuarios individuales o grupos. 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 admitan actualmente ACL, debe verificar que se hayan montado mediante la opción acl. Para hacer eso, usaremos 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 desea verificar:

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

Nota: Con XFS, las listas de control de acceso se admiten de forma inmediata.

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

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

Si el comando anterior no indica que el sistema de archivos se ha montado con soporte para ACL, lo más probable es que se deba a 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.

Introducción a las ACL en Linux

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

# 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

Creemos ahora un directorio llamado test 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 ugo/rwx predeterminados de forma recursiva a 770 (otorgando así permisos de lectura, escritura y ejecución 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 era de esperar, 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 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 de desarrolladores.

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

Configuración de ACL en Linux

Hay dos tipos de ACL: las ACL de acceso (que se aplican a un archivo o directorio) y las ACL predeterminadas (opcionales), que solo se pueden aplicar 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.

Démosle 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 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 el "Después":

# getfacl /mnt/test/acl.txt

A continuación, necesitaremos otorgar 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 normal necesita ejecutar permisos 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 para un directorio (cuyo contenido heredará a menos que se sobrescriba 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/

La ACL anterior permitirá a los usuarios que no están en el grupo de propietarios tener acceso de lectura al contenido futuro 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 LCA específica, reemplace -m en los comandos anteriores por -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 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 usarse y monitorearse cuidadosamente. Para hacer eso, las cuotas se pueden establecer en base al 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 hasta su capacidad 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 usuario y grupo, 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 de mount (vea resaltado a continuación):

# mount | grep vg00

Finalmente, ejecute los siguientes comandos para inicializar y habilitar 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. Posteriormente, puede deshabilitar las cuotas con quotaoff.

Configuración de cuotas de disco de Linux

Comencemos configurando 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 que el límite suave u003d 900 y el límite estricto u003d 1000 bloques (1024 bytes/bloque * 1000 bloques u003d 1024000 bytes u003d 1 MB) de uso de espacio en disco.

También podemos colocar un límite de 20 y 25 como límites suaves y estrictos en la cantidad de archivos que este usuario puede crear.

El comando anterior lanzará el editor de texto ($EDITOR) con un archivo temporal donde podemos establecer los límites mencionados anteriormente:

Esta configuración hará que se muestre una advertencia al usuario gacanepa cuando haya alcanzado los límites de 900 bloques o 20 inodos para un período de gracia predeterminado de 7 días.

Si la situación de exceso de cuota no se ha eliminado para entonces (por ejemplo, eliminando archivos), el límite flexible se convertirá en el límite estricto 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 inside/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 superó la cuota de disco. Dado que solo se escriben en el disco los primeros 1000 KB, lo más probable es que el resultado en este caso sea 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 establezca 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 cantidad de segundos, minutos, horas, días, semanas o meses mediante la ejecución.

# edquota -t

y la actualización de los valores del período de gracia en bloque y del período de gracia de Inode.

A diferencia del uso de bloques o inodos (que se establecen por usuario o por grupo), el período de gracia se establece en todo el sistema.

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

Por supuesto, querrá reemplazar [user] , [group] y [/ path/to/filesystem] con un usuario específico/nombres de grupo y sistema de archivos que desea verificar.

Resumen

En este artículo, explicamos cómo configurar listas de control de acceso y 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 sus preguntas. Envíelos utilizando el formulario de comentarios a continuación y estaremos encantados de echar un vistazo.