Google+

viernes, 17 de abril de 2009

Controlar el espacio en disco de los usuarios


Evitar a esos devoradores de espacio en disco que provocan saturaciones de red y demás. Les encanta guardar todo el correo, incluido el spam y si les preguntan por que almacenan el spam te responden: Por si acaso, yo lo guardo todo.

Pero a esa gente hay que mantenerlos a raya y debemos evitar que se pasen, por eso os presento una herramienta que os ayudará.

Tenemos dos tipos de restricciones:

  • blandas: cuando excedan el tamaño que le hemos asignado, se le permitirá un poco más pero por un tiempo establecido, pasado ese tiempo no puede llenar más.

  • duras: fácil de entender, si le damos 5 gb, 5gb tiene no puede llenar más y no hay concesiones como en el blando.


Necesitamos el programa quota, lo podemos conseguir desde los repositorios de nuestra distribución o compilandonos nosotros. También os digo que los repositorios en mi caso tienen una versión mas antigua. Explicamos el proceso para los que compilaran:
#wget http://freefr.dl.sourceforge.net/sourceforge/linuxquota/quota-3.17.tar.gz

#./configure

#make

#make install

Una vez lo tenemos podemos empezar. Para hacer los pasos siguientes, es recomendable trabajar en nivel de ejecución 1, mono usuario, esto es para no tener ningún usuario conectado.

Primer paso, editar el fichero /etc/fstab
#vi /etc/fstab

Y el las opciones nos toca añadir: usrquota a la partición que establezcamos con cuotas, ejemplo:

/dev/md0 /media/empresa         ext3    rw      0 0

por:

/dev/md0 /media/empresa         ext3    rw, usrquota,grpquota      0 0

Una vez echo esto ya nos asegura poder trabajar con quota. Ahora volvemos al nivel de ejecución en el que estabais.

Crear ficheros en la raiz de nuestr partición, en el caso en que estoy yo:
#tocuh /media/empresa/aquota.group

#tocuh /media/empresa/aquota.user

Cambiar permisos para evitar que se vea por los curiosos:
#chmod 600 /media/empresa/aquota.group /media/empresa/aquota.user

Ejecutamos esto:
# quotacheck -vguam
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: WARNING -  Quotafile /media/empresa/aquota.user was probably truncated. Cannot save quota settings...
quotacheck: Scanning /dev/sdb1 [/media/empresa] done
quotacheck: Old group file not found. Usage will not be substracted.
quotacheck: Checked 3 directories and 4 files

Hemos visto que nos da un error atrás, no preocuparos si es la primera vez que lanzáis el comando. El comando anterior lo que hace es importar los datos de usuario y grupo en el sistema de ficheros.  Ahora os explicaré todo el chorro de opciones que hemos metido al comando:

  • v modo verbose

  • g comprueba las cuentas de grupo

  • u comprueba las cuentas de usuario

  • a todos los sistemas de ficheros

  • m que no intente montar como solo lectura


Ahora ya tenemos todo lo necesario para empezar a dar o quitar espacio a los usuarios. Utilizaremos el comando edquota y las opciones que utilizaremos serán:

  • u usuarios

  • g grupos

  • t establecer ese periodo de gracia para las restricciones blandas


Empezamos:
#edquota -u usuario1

Nos abrira un editor de texto, el vi por defecto, y nos mostrara el siguiente aspecto:
Disk quotas for user usuario1 (uid 1001):
Filesystem                   blocks       soft       hard     inodes     soft     hard
/dev/md0                    0          0          0         0            0         0

En mi caso yo prefiero modificar los bloques, pero hay casos que a lo mejor te conviene modificar los i-nodos. Bien ahora que ya sabemos lo que vamos a modificar debo recordar que 1000 bloques es 1MB, tenemos también la columna soft que es el espacio que le podemos asignar de más, la columna hard restricción dura e inodos numero de archivos por usuario.

Si queremos que el usuario1 tenga un limite de 10 MB el fichero quedaría así:
Disk quotas for user usuario1 (uid 1001):
Filesystem                   blocks       soft       hard     inodes     soft     hard
/dev/md0                    0          0          10000         0            0         0

Una vez hecho esto ahora comprobamos que estamos utilizando de espacio con el comando:

#repquota /media/empresa

Para el periodo de gracia, esto es recomendable, deberemos añadir en la columna 5 la soft el espacio, y modificamos el periodo de usuario con el siguinte comando:
#edquota -t

Siendo esta la estructura del fichero por defecto:
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem             Block grace period     Inode grace period
/dev/md0                     7days                  7days

Yo pondría 2 días como mucho, con 7 días mal acostumbramos a los usuarios.

Si tienen alguna duda posteen por favor.