Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

miércoles, 17 de junio de 2015

Cómo establecer cuotas de usuario en Debian

En esta ocasión voy a hablaros sobre el establecimiento de cuotas de usuario en un sistema operativo Debian o similar. Cuando un equipo es usado por varios usuarios, uno se puede encontrar con el problema de que algunos individuos llenan el disco duro con una gran multitud de programas, impidiendo que el resto tenga el espacio suficiente para instalar cualquier aplicación... Para evitar estas desigualdades están las cuotas de usuario, las cuales están deshabilitadas por defecto en la mayoría de los sistemas operativos Linux. El motivo es que en Linux se suele instalar lo mínimo y necesario, y luego más allá de lo mínimo suele ser necesario realizar las instalaciones y/o modificaciones necesarias.


Por fortuna el establecimiento de cuotas es relativamente sencillo. Para ello es indispensable modificar el fichero /etc/fstab de forma parecida a cómo hicimos recientemente a la hora de crear ACLs. El establecimiento de cuotas de espacio en el disco, se realiza por particiones; es decir que si por ejemplo tienes varias particiones en un sistema operativo (cómo por ejemplo una partición /home y luego el resto en otra partición) puedes hacer que la cuota se ponga únicamente para home, dejando el resto del sistema de archivos intacto. En este caso estableceremos una cuota para todo el disco, pero recalco que no es necesario; todo depende del particionado que se haya realizado. En este caso, la modificación que hay que realizar en el fichero es algo grande, con lo que lo he recalcado en negrita para que tengáis mayor facilidad para guiaros.

  1. UUID=ab6e3da5-35ff-4c82-89e3-0c70064442c1 /               ext4    errors=remount-ro,usrjquota=aquota.user,grpquota=aquota.group,jqfmt=vfsv0 0       1

Obviamente el UUID es el que yo tengo en el equipo, en vuestro caso sería completamente distinto. El cambio aquí radica en el establecimiento de tres nuevos parámetros: usrjquota, grpquota y jqfmt. Estos parámetros consisten en el la activación de cuotas por usuarios, activación de cuotas por grupos y la especificación del a qué tipo de cuota hay que hacer soporte respectivamente. Los dos primeros valores son estáticos e inamovibles; es decir que son como son, pero en el caso del parámetro jqfmt hay que saber qué tipo de cuota soporta nuestro sistema, pues existen de tres tipos:
  1. vfsold. Lo cual equivale a la versión 1 de cuota.
  2. vfsv0. Lo cual equivale a la versión 2 de cuota (es el más común)
  3. xfs. Este soporte únicamente se usa en sistema de ficheros xfs.
Con el cambio realizado, llegaría el turno de montar de nuevo el disco duro, o reiniciar el sistema. En caso de optar por la primera opción el comando sería:

  1. mount -o remount /dev/sda1

Con el disco duro preparado habría que cargar el módulo necesario para poder realizar las labores de cuota de disco. En este caso el módulo está preparado en el sistema pero sin activar; para solventar ese problema habría que hacer dos cosas: Activar el módulo y obligar al sistema a que cargue el susodicho durante el arranque para evitar activarlo a mano cada vez que se arranque el sistema. Para lograr dicho objetivo habría que teclear estos dos comandos:

  1. modprobe quota_v2
  2. echo quota_v2 >> /etc/modules

El primero se encargaría de realizar la activación manual del módulo, mientras que el segundo ha hecho que éste se cargue automáticamente cada vez que se inicie el sistema. El problema es que aún con todo esto preparado, no tenemos ningún fichero que vaya a almacenar las políticas de cuotas de usuarios y grupos. Si observáis bien la modificación realizada en el fichero fstab, veréis que en los parámetros userjquota y grpquota se han establecido dos valores llamados aquota.user y aquota.group; Ambos se tratan de ficheros que van a almacenar las políticas de cuota de los usuarios y grupos; ficheros que por defecto no existen y es necesario crearlos. Éstos ficheros siempre deben estar ubicados en el directorio principal de la partición (en este caso en /, si por ejemplo estuviésemos haciendo este procedimiento para la partición home se tendrían que crear en la carpeta home). En mi caso en particular debo de crear los ficheros en el directorio / con el usuario root (indispensable) tal que así:

  1. touch /aquota.user
  2. touch /aquota.group
  3. chmod 600 /aquota.user /aquota.group

Cómo podéis apreciar, no solo he creado los ficheros, sino que también me he asegurado que únicamente root posee permisos para manipularlo mediante el comando chmod, evitando que cualquier usuario tenga siquiera permiso para consultar lo que hay en su interior.

Estableciendo las cuotas:

Con todos los preparativos realizados, llegaría el turno de establecer los límites deseados a cada usuario; existen algunas alternativas, pero en este caso voy a optar por la más popular de todas: quotatool. Este software no está instalado en el sistema por defecto, con lo que es necesario descargarlo e instalarlo, aunque al estar incluido en los repositorios oficiales de Debian únicamente habría que escribir:

  1. apt-get install quotatool

Es recomendable instalar el paquete ANTES de realizar los preparativos, pues en caso no haberlo hecho sería necesario reiniciar la herramienta mediante el comando /etc/init.d/quota restart para que el sistema sea capaz de realizar las tareas. En caso de haber instalado el software antes de hacer los preparativos y no haber reiniciado la herramienta, si intentáis establecer una cuota os aparecerá un mensaje como el siguiente:


Además, quotatool no se activa tras su instalación a menos que se lo ordenemos o reiniciemos el sistema. Cómo queremos evitar dicho reinicio escribiremos:

  1. quotacheck -vagum

Supongamos que hemos seguido el procedimiento paso a paso y que nos hemos asegurado de que tenemos todo cargado correctamente; Llegaría el turno de introducir el comando para crear las cuotas; aún así, antes de mostrároslo, es necesario que cuando se establece una cuota de disco, existen dos típos de límites; el límite "blando" y el límite "duro". El límite blando consiste en el límite recomendable por cada usuario; en caso de alcanzar dicho límite el usuario recibiría un aviso de que que está excediendo el límite recomendable para su usuario. El límite duro en cambio es absoluto, y el sistema nunca permitirá al usuario sobrepasar dicho límite. Lo normal al establecer limitaciones, suele ser poner las dos, con el fin de que a partir de cierto límite el usuario quede sobre aviso de que se le esta acabando la tasa de espacio en el disco y/o partición. La estructura que tiene el comando quotatool ya sea para un usuario o un grupo es la siguiente:

quotatool -u ${usuario} -bq ${límite_blando} -l ${límite_duro} ${partición}
quotatool -g ${grupo} -bq ${límite_blando} -l ${límite_duro} ${partición}

La única diferencia entre el escribirlo para un usuario o un grupo radicaría en el parámetro -u (para un usuario) y -g (para un grupo). El límite de espacio se puede establecer en bytes, megabytes, gygabytes o lo que uno desee, siempre que uno respete la sintaxis:


Con esto aclarado, vamos a exponer un pequeño ejemplo en el cual estableceré que el usuario ivan, reciba un aviso de que se le está acabando el espacio que tiene disponible a partir de los 200 megabytes y que tenga un límite de 250 megabytes. Dichas limitaciones se aplicarían a la partición /, con lo que el resultado sería:

  1. quotatool -u ivan -bq 200M -l 250M /

En caso de haber seguido el procedimiento correctamente, no debería mostraros mensaje alguno; en caso de que os muestre algún error, os recomiendo que reiniciéis el servicio quota y que probéis de nuevo. Ahora bien; imaginemos que no ha mostrado mensaje alguno: ¿Cómo podemos saber que efectivamente, el usuario en cuestión tiene la cuota que nosotros hemos definido? Existen dos formas: La primera es tratando de llenar el disco todo lo posible hasta alcanzar la cuota de dicho usuario: la segunda en cambio se trata de un pequeño comando que nos muestra la cuota que hemos asignado al usuario, dicho comando se trata del comando quota, y posee la siguiente estructura, ya sea para el usuario o el grupo:

quota -u ${usuario}  -vs
quota -g ${grupo} -vs

En este caso, vamos a revisar la cuota que hemos aplicado a nuestro usuario (en mi caso ivan), lo cual nos tendría que mostrar algo parecido a lo siguiente:



Espero que os sea útil.

Saludos.

No hay comentarios :

Publicar un comentario