Búsqueda de sitios web

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 normales.

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 admitan actualmente ACL, debe verificar que se hayan montado utilizando 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 son compatibles desde el primer momento.

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 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 móntelo nuevamente, o simplemente reinicie su sistema después de guardar los cambios en /etc/fstab.

Introducción de ACL en Linux

Para ilustrar cómo funcionan las ACL, usaremos un grupo llamado desarrolladores y agregaremos los usuarios walterwhite y saulgoodman (sí, ¡soy fanático 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 hayan sido agregados al grupo de desarrolladores:

id walterwhite
id saulgoodman

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

Luego configuraremos el propietario del grupo como 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 era de esperar, puedes 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 ahora, todo bien. Sin embargo, pronto veremos un problema cuando necesitemos otorgar acceso de escritura a /mnt/test/acl.txt a otro usuario que no esté en el grupo de desarrolladores.

Los permisos estándar ugo/rwx requerirían que el nuevo usuario sea agregado 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 configurado 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 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 normal 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 para un directorio (que su contenido heredará a menos que se sobrescriba lo contrario), 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 propietario tener acceso de lectura al contenido futuro del directorio /mnt/test. Observe 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 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 utilizarse y controlarse con cuidado. Para ello, se pueden establecer cuotas según el sistema de archivos, ya sea para usuarios individuales o para grupos.

Por lo tanto, se impone un límite al uso del disco permitido para un usuario determinado o un grupo específico, y usted puede estar seguro de que un usuario descuidado (o mal intencionado) no llenará sus discos hasta su capacidad.

Lo primero que debe 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, 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 (ver 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 podrás desactivar las cuotas con quotaoff.

Configuración de cuotas de disco de Linux

Comencemos configurando una 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

Haremos los bloques limit=900 suave y limit=1000 (1024 bytes/bloque * 1000 bloques=1024000 bytes=1 MB ) del uso del espacio en disco.

También podemos establecer 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 podremos 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 valor predeterminado. período de gracia de 7 días.

Si la situación de sobre-cuota no se ha eliminado para entonces (por ejemplo, eliminando archivos), el límite flexible se convertirá en el límite estricto y se impedirá que este usuario use 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 puede ver, el archivo de operación de escritura falla debido a que se excedió la cuota de disco. Dado que sólo los primeros 1000 KB se escriben en el disco, lo más probable es que el resultado en este caso sea un archivo corrupto.

De manera similar, puede crear una ACL para los grupos de desarrolladores para otorgar a los miembros de ese grupo acceso rwx a /home/projects:

setfacl -m g:developers:rwx /home/projects/

Y establece los límites de cuota con:

edquota -g developers

Tal como lo hicimos anteriormente con el usuario gacanepa.

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 del bloque y Período de gracia del inodo.

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

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

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

Resumen

En este artículo hemos explicado cómo configurar Listas de control de acceso y cuotas de disco para usuarios y grupos. Al utilizar 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 sobre cuotas en el Proyecto de documentación de Linux.

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