8.7. Limitando usuários

A habilidade de limitar seus usuários no sistema pode fatalmente já ter vindo em sua mente. FreeBSD fornece diversas maneiras de um administrador limitar a quantidade de recursos do sistema que um indivíduo pode usar. Estes limites são divididos em duas seções: quotas do disco, e outros limites de recursos.

As quotas de disco limitam o uso do disco aos usuários, e fornecem uma maneira de verificar rapidamente esse uso sem calculá-lo todas as vezes. As quotas são discutidas em Seção 12.12.

Os outros limites de recurso incluem maneiras de limitar a quantidade de uso do CPU, memória e outros recursos que um usuário pode consumir. Estes limites são definidos usando classes de sessão e discutidos aqui.

As classes de login são definidas em /etc/login.conf. A semântica precisa está além do escopo abordado nesta seção, mas é descrita em detalhe na página de manual do login.conf(5). É suficiente dizer que cada usuário é relacionado a uma classe de contas, a partir do início de sua sessão (default, por padrão), e que cada classe dispõe de um conjunto de recursos que são associados a ela. Uma definição de recurso por seção é composta de um par de opções, no formato nome =valor, onde nome é um valor previamente conhecido e valor é um conjunto de caracteres arbitrário processada de acordo com o nome. O ajuste das classe de login bem como cada um dos recursos que pode ser controlados, são detalhadamente descritos na página de manual do login.conf(5)

Os limites de recurso são distintos de cada definição de ``login'' de uma sessão tradicional em dois pontos. Primeiro, para cada limite existe o limite suave (o atual) e o árduo. O limite suave pode ser definido pelo usuário ou pela aplicação, mas nunca poderá ser maior que o limite árduo. O segundo, pode ser revogado pelo usuário e ter seu valor diminuído, mas nunca pode ser aumentado. Segundo ponto, a maioria destes limites é contada por processo, e não pelo usuário como um todo. Note que, apesar destas diferenças entre a estrutura de recursos e limitações por sessão, este exemplo limitado não ilustra realmente o uso efetivo das caracterísitcas de limitação por classe de login.

Dessa forma, seguem abaixo os limites mais comuns, normalmente utilizados em classes de utilização de recursos (as outras opções podem ser encontradas na página de manual do login.conf(5)).

coredumpsize

Trata-se do limite de tamanho de um arquivo core gerado por um programa, por razões óbvias, subordinado a outros limites no uso do disco (ex: filesize, ou quota de disco). Não obstante, é usado frequentemente como um método menos severo de controlar o consumo do espaço de disco: uma vez que usuários não geram os arquivos de core conta própria, e logo, também não os deletam (por não saber que existem) configurar esta opção pode evitar que fiquem sem espaço em disco, devido à falha de alguma aplicação com grande demanda por memória por exemplo (ex: emacs).

cputime

Indica a quantidade máxima de tempo do processador central que o processo de um usuário pode consumir. Os processos que desrespeitarem serão mortos pelo kernel.

Nota: Este é um limite de tempo no processador central, não porcentagem do processador central como indicado do top(1) e ps(1). Limitação por porcentagem, no momento que este documento foi escrito, não é possível, e seria inviável limitar o fato de que um compilador pode facilmente consumir quase 100% de um processador por algum tempo.



filesize

É o tamanho máximo de um arquivo que um usuário pode possuir. Ao contrário da quota de disco, este limite é imposto a arquivos individuais, e não a todo o conjunto de arquivos que o usuário possui.

maxproc

Este é o número máximo de processos que um usuário executar simultâneamente. Isto inclui processos e primeiro plano e segundo plano. Por razões óbvias, este valor não pode ser maior do que o limite do sistema, especificado pela variável sysctl(8) kern.maxproc. Note também que configurar este ítem para um valor pequeno vai prejudicar a produtividade do usuário: é frequentemente útil logar-se em múltiplos terminais e executar processos. Algumas tarefas, tais como compilar um programa grande, também geram multiplos processos (ex: make(1), cc(1) e outros intermediários).

memorylocked

Trata-se da quantidade máxima de memória que um processo pode solicitar que seja reservado - veja mlock(2). Alguns programas críticos do sistema, tais como amd(8), reservam esta memória em espaço de troca (SWAP) não contribuindo com a degradação do sistema em tempo real.

memoryuse

Trata-se da quantidade máxima de memória que um processo pode consumir durante todo seu tempo de execussão. Inclui o uso da memória principal e a swap. Não trata-se de controle total de restrição de consumo de memória, mas é um bom começo

openfiles

Trata-se da quantidade máxima de arquivos que um processo pode ter aberto. No FreeBSD, arquivos são usados também para representar sockets e canais IPC; portanto tenha cuidado para não ajustar este valor demasiadamente baixo. O limite aqui é definido pela sysctl(8) kern.maxfiles.

sbsize

Esta é a quantidade máxima de memória a ser utilizada em rede, somatizados em quantos mbufs um usuário pode consumir. Foi originalmente criado em resposta a um velho ataque DoS que criava muitos sockets, mas pode usualmente ser usado para limitar a comunicação da rede.

stacksize

Trata-se do tamanho máximo que uma pilha de processos pode vir a ter. Sozinho, este valor não é suficiente para limitar a quantidade de memória que um programa pode usar, consequentemente, deve ser usado em conjunto com outros limites.

Existem outros pontos que devem ser lembrados ao ajustar limites de recursos. A seguir serão apresentados alguns pontos gerais, sugestões, e comentários variados.

Para mais informações sobre limites de recursos e classes de login em geral, consulte por favor as páginas de manuais relevantes: cap_mkdb(1), getrlimit(2), login.conf(5).

Este, e outros documentos, podem ser obtidos em ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Para perguntas sobre FreeBSD, leia a documentação antes de contatar <questions@FreeBSD.org>.
Para perguntas sobre esta documentação, envie e-mail para <doc@FreeBSD.org>.