Cuotas de usuario

Asignaremos a los usuarios un máximo de 5MiB. Dado que la única forma que tienen los usuarios de añadir archivos es mediante las páginas web que podrán crear, esta cuota corresponde con el tamaño máximo de archivos que pueden tener en su página web.

Preparación

En primer lugar instalamos las herramientas para la gestión de cuotas.

apt-get install quotatool

Se debe elegir un sistema de ficheros al que asignar las cuotas, en nuestro caso será el directorio raíz por ser el único que tenemos.

Tras esto editaremos el fichero /etc/fstab. Añadiremos a la linea correspondiente al sistema de la raíz la opción usrquota, ya que queremos establecer cuotas para usuarios y no para grupos.

#/ was on /dev/sda5 during installation
UUID=52cd9609-2ac8-4b12-8fb5-d978d24b5510 /               ext3    errors=remount-ro,usrquota 0       1

Es necesario volver a montar el sistema, se puede hacer con la orden:

mount -o remount /

Ahora podemos comprobar que tiene la opción deseada con la orden mount.

mount
/dev/sda5 on / type ext3 (rw,errors=remount-ro,usrquota)

Mediante quotacheck crearemos el sistema de cuotas. Los argumentos que le pasaremos serán:

  • -a Todos los sistemas de ficheros montados (en nuestro caso solo se hará para /).
  • -u Las cuotas son de usuarios (-g para cuotas de grupos).
  • -m Evitar que se trate de volver a montar los sistemas de solo-lectura.
  • -v Mostrar información del progreso.

El resultado será el siguiente.

# quotacheck -aumv
    quotacheck: Your kernel probably supports journaled quota but you are not using it. Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown.
    quotacheck: Scanning /dev/disk/by-uuid/52cd9609-2ac8-4b12-8fb5-d978d24b5510 [/] done
    quotacheck: Cannot stat old user quota file: No such file or directory
    quotacheck: Old group file not found. Usage will not be substracted.
    quotacheck: Checked 9141 directories and 44222 files
    quotacheck: Old file not found.

Con lo anterior el sistema de cuotas esta listo, podemos asegurarnos comprobando que en la raíz (punto de montaje elegido), aparece el archivo aquota.user.

# ls | grep "aquota"
  aquota.user

La orden quotaon activara las cuotas de usuario (argumento -u).

# quotaon -uv /
    /dev/disk/by-uuid/52cd9609-2ac8-4b12-8fb5-d978d24b5510 [/]: user quotas turned on

Si en algún momento quisieramos desactivarlo lo podríamos hacer del mismo modo mediante quotaoff.

#quotaoff -uv /
    /dev/disk/by-uuid/52cd9609-2ac8-4b12-8fb5-d978d24b5510 [/]: user quotas turned off

En nuestro caso lo dejamos activado.

Configuración

Podemos asignar cuotas a un usuario mediante la orden edquota, en este caso vamos a asignarle manualmente las cuotas blanda y dura para tamaño de ficheros a nuestro usuario.

edquota hormigon

Nos mostrará un archivo en el que podemos establecer las cuotas.

Disk quotas for user hormigon (uid 65550):
  Filesystem      blocks  soft   hard   inodes    soft         hard
    /dev/di... [/] 4      4608   5120   1          0        0

Si así lo queremos, podemos editar /etc/warnquota.conf y utilizar la orden warnquota para enviar un aviso a aquellos usuarios que estén a punto de sobrepasar su capacidad.

Editamos el archivo de configuración para que el email se muestre en castellano.

../_images/warnquota.png

Como queremos que se ejecute de forma periódica lo añadiremos a los scripts de ejecución diarios de cron. Examinamos el archivo existente /etc/cron.daily/warnquotas que llamará periodicamente a esta función. Vemos que lo hará en caso de que /etc/default/quota este configurado para que se realicen los avisos.

Para ello basta con poner la opción siguiente como verdadera.

run_warnquota = true

Para comprobar que funcionan sobrepasamos temporalmente estas quotas para nuestro usuario y enviamos manualmente los avisos mediante warnquota. Recibimos el siguiente correo en el buzón de cactus de ese usuario.

../_images/mailquota.png

Automatización

Crear las cuotas manualmente para cada usuario no es una opción cuando los usuarios se registran automáticamente, por lo tanto creamos en los modulos de Tronco las subrutinas necesarias para establecer la cuota de un usuario y recuperar el estado de la misma.

La primera se ejecutara cuando se registra un usuario.

sub setquota($)
{
    my ($user) = @_;

    my $dev = Quota::getqcarg("/");
    my $uid = getpwnam($user);
    Quota::setqlim($dev, $uid, 4608,5120, 0,0, 0, 0)
}

Se hace uso del módulo de perl Quota que nos permite establecer los límites para un sistema de ficheros, en este caso /.

Obtener la información sobre el estado de las cuotas es útil para mostrar al usuario su porcentaje de uso en la interfaz web. La subrutina para recuperar dicha información es esta.

sub getquota($)
{
    my ($user) = @_;
    my $dev = Quota::getqcarg("/");
    my $uid = getpwnam($user);
    my ($bc,$bs,$bh,$bt, $ic,$is,$ih,$it) = Quota::query($dev ,$uid);
    return ($bc*1000, $bh*1000);
}

Contenidos

Tema anterior

Gestión de usuarios

Próximo tema

Configuración de blogs con Wordpress

Esta página