sábado, 7 de febrero de 2015

Como instalar una Cuota en Linux

¿Qué es una cuota?
Las cuotas nos permiten establecer ciertas restricciones a ciertos usuarios y grupos en el uso de los dispositivos de almacenamiento del equipo. Estas restricciones pueden ser:

  • De tamaño usado: Número de KiB máximo en uso por el usuario en el dispositivo.
  •  De inodos: Número de archivos máximo en el dispositivo.

A su vez, cada una de estas restricciones pueden ser:

  • Blandas: Una vez superada la cuota, podrá seguir escribiéndose en el dispositivo, pero se nos dará unaadvertencia de que pasado un tiempo de periodo de gracia, no podremos seguir escribiendo.


  • Duras: Estrictamente no se podrá exceder dicho límite, tras el cual la operación de escritura fallará.

Nuestro objetivo será establecer una cuota blanda y otra dura de tamaño e inodos a un usuario al que llamaremos foo tanto en /home como para /var. Para ello, antes deberemos disponer de:

  • • Una máquina Ubuntu Server.
  • • Tres particiones ya establecidas para /, /home y /var.
  • • Tener instalado quota (sudo apt-get install quota).
  • • Tener instalado mailutils (sudo apt-get install mailutils).

Y los pasos que tomaremos serán:
  • 1 . Creación del usuario foo.
  • 2. Establecer las cuotas a las particiones (/etc/fstab).
  • 3. Establecer las cuotas al usuario
  • 4. Establecer el periodo de gracia
  • 5. Configuración de envío de email de aviso de cuota blanda
  • 1. Envío de un primer email
  • 2. Archivo /etc/default/quota
  • 3. Archivo /etc/crontab
  • 4. Archivo /etc/warnquota.conf
  • 5. Archivo /etc/quotatab

Creación de usuario
Para la creación del usuario seguiremos el procedimiento manual:
# useradd -m -g users -G disk -s /bin/bash foo
Ahora le daremos una contrase a dicho usuario mediante:
# passwd foo
Habilitar el uso de las cuotas.
Establecer las cuotas a las particiones (/etc/fstab)
En nuestro caso, nos interesaba establecer limitaciones a /home y /var. Para ello, en cambiaremos las opciones de montaje para que al montarse se habiliten las cuotas para las particiones. Para ello añadiremos los siguientes argumentos:
# usrquota,grpquota
El primero sería para usuarios, y el segundo para grupos. Ahora, modificaremos el archivo /etc/fstab añadiendo los argumentos anteriores a las particiones deseadas. Por ejemplo:
/dev/sdb1 /home ext4 defaults,usrquota,grpquota 0 2
# /var was on /dev/sdc1 during installation
/dev/sdc1 /var ext4 defaults,usrquota,grpquota 0 2
Aplicaremos los cambios a las cuotas:
# quotacheck -acvugfm
Establecer las cuotas al usuario.Aunque ya hemos establecido que las cuotas deben aplicarse a las 2 particiones, todavía no se ha especificado ni el usuario ni se ha fijado las limitaciones. Mediante el siguiente comando modificaremos los límites del usuario foo:
# edquota foo
Con esto estaremos modificando la cuota de un usuario determinado. También podríamos hacerlo de los usuarios mediante -u y mediante -g para grupos. Pero lo que ahora nos importa es establecer los siguientes límites para el usuario específico foo:
• 150MiB de cuota blanda (153600KiB).
• 300MiB de cuota dura (307200KiB).
• 1000 archivos máximo de cuota blanda.
• 2000 archivos máximo de cuota dura.
Lo cual, tras modificarse el archivo quedaría de la siguiente forma:
Disk quotas for user nekmo (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 24 153600 307200 7 1000 2000
/dev/sdc1 0 153600 307200 0 1000 2000
Establecer el periodo de gracia
Tras haber fijado la cuota blanda a foo para ambas particiones, ahora queda definir el tiempo del que dispone el usuario para borrar el tamaño excedente tras superar la cuota blanda, antes de impedírsele seguir escribiendo. Esto lo haremos mediante:
# edquota -T foo
También podríamos fijar un mismo límite para todos los usuarios y grupos (-t) o para una partición específica (-f
<partición>). Como lo que queremos ahora mismo es ver resultados inmediatos, estableceremos el límite en 3
minutos:
Times to enforce softlimit for user foo (uid 1001):
Time units may be: days, hours, minutes, or seconds
Filesystem block grace inode grace
/dev/sdb1 3minutes 3minutes
/dev/sdc1 3minutes 3minutes
Hay que tener en cuenta, que no podemos dejar ningún valor sin establecer, y que al volver a modificar estamos datos, se eliminarán los anteriores que tuviésemos.
Configuración de envío de email de aviso de cuota blanda
Tras excederse la cuota blanda, deberemos fijar un método por el que avisaremos del usuario de que el tamaño permitido de sus archivos ha superado los límites de la partición, y que dejará de poder escribir en X tiempo de nodarse solución. Para dar este aviso, el método que hemos elegido es mediante un email (el servidor de correo será sendmail, es decir, local).
Envío del primer email
Ante todo, deberemos asegurarnos de que el usuario en cuestión es capaz de recibir emails. Para ello enviaremos en email desde otro usuario:
$ mail foo
Cc:
Subject: test
esto es una prueba
(pulse ctrl + D para enviar)
Si nos conectados con el usuario foo, y hacemos ejecutamos mail, deberíamos poder ver el mensaje si todo ha ido
bien:
$ mail
"/var/mail/foo": 1 message 1 new
>N 1 root Wed Feb 6 22:23 13/435 test
? 1
Return-Path: <root@virtubuntuserv>
[...]
From: root@virtubuntuserv (root)
esto es una prueba
Si lo anterior no funciona, deberemos de que existe y hay permisos sobre la siguiente ruta:
/var/mail/<usuario>
Archivo /etc/default/quota
Nos permite habilitar el aviso del excedente de las cuotas mediante crond:
/etc/default/quota
------------------
# Set to "true" if warnquota should be run in cron.daily
run_warnquota=true
# Add options to rpc.rquotad here
RPCRQUOTADOPTS=
Archivo /etc/crontab
El demonio cron permite la ejecución de aplicaciones y scripts en un determinado momento y con una frecuencia
establecida. En nuestro caso, gracias a crond, haremos que se ejecute un script que envía los emails de exceso de cuota blanda. Este script ya se encuentra en /etc/cron.daily/quota, y haremos que se ejecute a cada minuto
modificando la línea de cron.daily a lo siguiente:
*/1 * * * * root test -x /usr/sbin/anacron || ( cd / && run-parts
--report /etc/cron.daily )
Archivo /etc/warnquota.conf
Gracias a este archivo podremos modificar el mensaje de aviso que le llegará al usuario. Un ejemplo válido sería el
siguiente:
/etc/warnquota.conf
-------------------
; ; and # type comments are allowed
# and even blank lines
# values can be quoted:
MAIL_CMD = "/usr/sbin/sendmail -t"
FROM = "root@localhost"
# but they don't have to be:
SUBJECT = Cuota excedida
CC_TO = "root@localhost"
SUPPORT = "root@localhost"
PHONE = "123-456-789"
#
CHARSET = UTF-8
MESSAGE = Hola %i, recibes este email porque has sobrepasado el espacio que
tienes asignado en el ordenador %h del dominio %d|Libera espacio
en 3 minutos (periodo de gracia), o dejarás de poder escribir.
SIGNATURE = Saludos.
Archivo /etc/quotatab
Como en el mensaje anterior sería poco apropiado decirle al usuario que libere espacio de /dev/sdb1, pues es muy
probable que no sepa de qué se trata tal sistema de archivos, vamos a añadirle una descripción a estas particiones
para que el usuario sepa de qué se trata. En nuestro caso, añadiremos:
/etc/quotatab
-------------
/dev/sdb:directorio personal
/dev/sdc:datos variables
Probando las cuotas
Vamos a logearnos como foo y acceder a su directorio personal, para probar las cuotas.:
$ sudo su foo
foo@local /-$ cd --
foo@local ~-$
Ahora crearemos un archivo de 160MiB, suficientes para exceder el límite de 150MiB de la cuota blanda:
$ yes | head -c 167772160 > excedente
Esperemos un rato y ya deberíamos poder ver un mensaje avisándonos:
$ mail
"/var/mail/foo": 1 message 1 new
>N 1 root@localhost Thu Feb 7 02:00 25/947 Cuota excedida
? 1
Return-Path: <root@virtubuntuserv>
[...]
From: root@localhost
Reply-To: root@localhost
Subject: Cuota excedida
To: foo@virtubuntuserv
[...]
Date: Thu, 7 Feb 2013 02:00:40 +0100 (CET)
Hola foo, recibes este email porque has sobrepasado el espacio que tienes asignado en
el ordenador virtubuntuserv del dominio (none)
Libera espacio en 3 minutos (periodo de gracia), o dejarás de poder escribir
/dev/sdb1
Block limits File limits
Filesystem used soft hard grace used soft hard grace
/dev/sdb1 +- 163864 153600 307200 6days 7 1000 2000
Saludos.
? exit
You have new mail in /var/mail/foo
A parte, podemos comprobar que efectivamente el límite de cuota dura es de 300MiB:
foo@virtubuntuserv:~$ yes > excedente
yes: standard output: Disk quota exceeded
yes: write error
You have mail in /var/mail/foo
foo@virtubuntuserv:~$ ls -lh excedente
-rw-r--r-- 1 foo users 300M Feb 7 02:08 excedente
Si la cuota dura no funcionase como debe, se deberá repasar los pasos de configuración de cuotas. Podemos
repasar la configuración y límites actuales mediante:
# repquota -a
Si las cuotas estuviesen bien configuradas, pero aun así siguen sin llegar los emails, podría ser un problema de
crond. Podemos probar a forzar la ejecución del script de envío de email mediante:
# sudo /etc/cron.daily/quota

No hay comentarios:

Publicar un comentario

¡Danos tu opinión!