Como limitar o espaço em disco disponível de cada usuário no Linux.
Por: Guilherme Cox ( 15/12/2000 )

Antes mesmo de começarmos a falar sobre como limitar o uso de espaço em disco para os usuários ou grupo de usuários em Linux precisamos entender para que vamos querer isso. É importante você saber que o uso desse recurso só será válido em um ambiente multi-usuário. Se você tem uma máquina que possui muitos usuários, remotos ou não, é vital o uso desse recurso. Ele pode ser usado, por exemplo, para limitar o espaço em disco que cada usuário tem acesso para receber emails, para sua conta shell, para uma eventual conta de hospedagem de homepages ou uma área de acesso FTP.

Tal recurso no Linux é conhecido como Quota. A idéia de quota é limitar o uso de disco de cada usuário do seu sistema. Esse limite implica em um controle maior do seu servidor para evitar panes que uma possível falta de espaço possa gerar.

A única limitação para o uso de quota é que até o momento, quota só tem suporte para o FileSystem ext2 (default no seu Linux).

Para fazer o uso desse recurso você vai precisar preparar seu kernel para isso. O único define que você precisa ativar é CONFIG_QUOTA=y.

Dependendo da distribuição do seu Linux, você pode não ter os softwares controladores. Caso você não tenha, o endereço para obtê-los é:

ftp://ftp.funet.fi/pub/Linux/PEOPLE/Linus/subsystems/quota/all.tar.gz .

É recomendado que o recurso de quota seja inicializado durante o boot. Não faz sentido você ter que fazer isso sempre que quiser manter esse recurso ativo. No entanto, é importante saber que ele só poderá ser inicializado depois que os filesystems, no /etc/fstab, tiverem sido montados.

Um exemplo usual, que foi colocado dentro do arquivo /etc/rc.d/rc.local [slackware]:
_____________________________________
# Check quota and then turn quota on.
if [ -x /usr/sbin/quotacheck ]
then
echo "Checking quotas. This may take some time."
/usr/sbin/quotacheck -avug
echo " Done."
fi
if [ -x /usr/sbin/quotaon ]
then
echo "Turning on quota."
/usr/sbin/quotaon -avug
fi
_____________________________________

Isso vai ativar o sistema de quota. É importante verificar se seus scripts de shutdown possuem a habilidade de desativar a Quota. Procure nos scripts de runlevels 0 (halt), 1 (administrative state), 6 (shutdown) para ver se possuem alguma referência ao binário quotaoff. Caso não haja, temos um exemplo:

_____________________________________
# Try to turn off quota and accounting.
if [ -x /usr/sbin/quotaoff ]
then
echo "Turning off quota.."
/usr/sbin/quotaoff -a
fi
_____________________________________



Para que os filesystems suportem o uso de quota, é necessário uma pequena mudança no arquivo /etc/fstab.

Normalmente temos alguma coisa do gênero:

/dev/hda1 / ext2 defaults 1 1

Para habilitar o uso de quota por usuário pelo filesystem, você precisa inserir a palavra chave "usrquota" no quarto campo. Veja como ficaria nosso exemplo:

/dev/hda1 / ext2 defaults,usrquota 1 1

Usando a palavra chave "grpquota", temos agora suporte quota por grupo ao filesystem especificado. Vejam como ficaria:

/dev/hda1 / ext2 defaults,grpquota 1 1

É possível também ter os dois, grupos e usuários:

/dev/hda1 / ext2 defaults,usrquota,grpquota 1 1

Vale lembrar que, caso você tenha mais de um filesystem, é necessário que você faça isso em todos eles. Por exemplo:

/dev/hda1 / ext2 defaults,usrquota,grpquota 1 1
/dev/hda2 /var/spool/mail ext2 defaults,usrquota 1 1

Nesse exemplo estou habilitando suporte de quota para usuários e grupos no device hda1, e apenas para usuários no device hda2.

O recurso de quota precisa de 2 arquivos que são gerenciados pelo kernel e pelas ferramentas de edição dos atributos de quota. Esses dois arquivos ficam na raiz do filesystem e precisam ser criados e ter atribuição de leitura e escrita apenas para o usuário root. Ninguém mais que ele. Para fazer isso siga os passos:

touch /partition/quota.user
touch /partition/quota.group
chmod 600 /partition/quota.user
chmod 600 /partition/quota.group

Substitua partition, pelo PATH correspondente. Caso seja a própria raiz, use 'touch /quota.user' por exemplo.

Você vai precisar renicializar o seu computador para as mudanças fazerem efeito. Note que o reboot ficou um pouco mais lento.



Ferramentas para manipulação das Quotas

Nos exemplos a seguir teremos um usuário com login 'cox', e vamos considerar o grupo 'webmaster'. Antes de verificar o uso das ferramentas, precisamos iniciar alguns conceitos importantes para melhor compreensão futura.

inodes - Um inode é uma identificação única que cada arquivo recebe dentro da partição. Um inode fica alocado numa tabela que é criada na formatação da partição. Nesta formatação você define o tamanho lógico que cada inode vai suportar. Um inode contém toda informação de um arquivo. Você pode verificar o uso dos inodes do seu sistema com o comando: 'df -i'.

blocks - Um block é a unidade que especifica espaço em disco, no nosso caso expresso em kilobytes. O que seria um 1024-block.

Soft limit - é muito usado para contas shell. É o limite do usuário. Se essa opção for usada junto com 'Grace period', o usuário que ultrapassar esse limite vai receber notificações que está acima do permitido, durante um período estabelecido de tempo. Se não estiver junto com 'Grace period' esse valor é o limite do usuário.

Hard Limit - funciona apenas com 'Grace period', especifica o limite absoluto. O usuário não pode passar desse limite de forma alguma.

Grace Period - É o tempo limite antes que as condições de limite do 'soft limit' sejam impostas sobre o filesystem. Mais abaixo iremos mostrar como especificar isso.

As ferramentas propriamente ditas:

- edquota:

Você vai precisa usar o comando para especificar uma quota para nosso usuário 'cox'.

#edquota -u cox

Vai abrir um editor contendo:

Quotas for user cox:
/dev/hda1: blocks in use: 4174, limits (soft = 5000, hard = 6500)
inodes in use: 719, limits (soft = 1000, hard = 1500)

Edite os valores soft e hard.

Espeficicando quota para o grupo 'games'.

#edquota -g games

Quotas for group games:
/dev/hda1: blocks in use: 1750, limits (soft = 8000, hard = 10000)
inodes in use: 291, limits (soft = 3000, hard = 4000)

Para especificar o 'Grace period':

#edquota -t

Time units may be: days, hours, minutes, or seconds
Grace period before enforcing soft limits for users:
/dev/hda1: block grace period: 0 days, file grace period: 0 days

Edite o número de dias ao seu gosto.

- quotacheck: Faz a atualização dos arquivos quota.user e quota.group. É recomendado o uso deles no boot inicial. Caso seu servidor fique vários dias ligados sem um boot, é recomendável também o uso de um 'crontab' para atualizações periódicas.

- repquota:

Produz um pequeno resumo da situação atual do seu sistema no que diz respeito ao uso de seus filesystems

# repquota -a

Block limits File limits
User used soft hard grace used soft hard grace
root -- 247752 0 0 4644 0 0
bin -- 26056 0 0 705 0 0
cox -- 9091 6600 66666 106 2500 5000

Espero com isso, possibilitar qualquer administrador tormar seu ambiente mais seguro com uso de Quotas. É importante notar que você pode já no script de 'adduser' acionar um mecanismo de auto inclusão na tabela de quotas. Qualquer dúvida que existir sobre esse assunto, me enviem um email ou mandem para o fórum.


Copyright (C) 1999-2000 Linux Solutions