Limitando o uso de recursos de usuários

Versão em vídeo desta seção pode estar disponível no canal do Guia Foca no YouTube: Limitando o uso de recursos de usuários.

Usuários requerem recursos como tempo de CPU, memória e espaço em disco para fazer o tarbalho. Em muitods sistemas é possível aos usuários usarem todos os recursos, atrapalhando o funcionamento do sistema e de outros usuários e algumas vezes deixando o servidor muito lento ao ponto de trava-lo.

O uso grande de recursos pode ser grandes core dumps, usar toda memória. Uma coisa para ser lembrada: limites globais se aplicam ao root, assim se não permitir ao root executar processos os suficientes, você poderá ter problemas até mesmo para entrar na máquina para corrigir falhas.

Módulo PAM pam_limits

O módulo usado para fornecer lmites aos usuários no pam é o pam_limits.so:

session		required	/lib/security/pam_limits.so

O aruquivo de configuração padrão se encontra em /etc/security/limits.conf. Como muitos dos limites são forçados pelo shell, o sistema Não registrará todas as violações de limites (voce receberá tentativas de acesso indevida, mas não receberá um alerta se o usuário tnetar usar mais espaço em disco que é permitido).

Um exemplo da limitação de recurso do usuário "foca" a 4Mb de RAM:

# Dominio   Tipo    Item	    Valor
foca		hard	memlock		4096

Onde:

  • Dominio - Pode ser usuario, @grupo, 1000-2000 (Uid Range), @1000-2000 (GID Range), % é aplicavel para maxlogins somente (é eqivalente equivalente ao '*').

  • Tipo - Pode ser hard, soft, ou - (especific ambos)

  • Item - Pode ser um dos abaixo:

    • core - Limita o tmanho do arquivo core (KB). Geralmente ajustado para 0 para evitar core dumps

    • data - Tamanho máximo de dados em memória (KB)

    • fsize - Tamanho máximo de arquivo no disco (KB)

    • memlock - Tamanho máximo do espaço de memória locked (KB)

    • nofile - Nùmero máximo de arquivos abertos

    • rss - Tamanho máximo de arquivos residentes (KB) (Ignorado no 2.4.30 e superiores)

    • stack - Tamnho máximo da pilha (KB)

    • cpu - Tempo máximo da CPU (MIN)

    • nproc - Número máximo de processos

    • as - Limite do Address Space

    • maxlogins - Número máximo de logins para este usuário ou grupo

    • maxsyslogins - Número maximo de todos os logins do sistema. Nenhum usuário pode conectar se o número estiver maior que o definido.

    • priority - A prioridade de execução de processos deste usuário.

    • nice - Prioridade máxima permitida para aumentar. Valores entre -20 a 19. Linux 2.6.12 e maiores

    • rtprio - prioridade em tempo real máxima permitida para processos não privilegiados (Linux 2.6.12 e superiores)

  • Valor - O valor que deve ser apliado

Em geral, limites individuais tem mais prioridade que limite de grupos. Assim se os limites do grupo @admins não tiver limite, mas existir um limite para seu usuário em particular, o particular será usado. Os limites também são definidos por sessão de login.

Grupos podem eser especificados usando a sintaxe @grupo no campo nome. Caso seja usado *, a limitação se aplicará a todos os usuários.

Arquivos core podem ser criados quando um programa trava. Eles são usados por exploits de segurança, sobrescrevendo arquivos de sistemas, ou contendo informações sensíveis (como senhas). Você pode facilmente desativar core dumps usando PAM, e geralmente, a maioria dos usuários nem notará isto. No entanto, se tiver desenvolvedores de softwares, eles reclamarão:

*		hard	core		0

O fsize é uma bom parametro ser usado, muitos usuários tem uma quota grande de sistemas, no entanto se eles tiverem permissões de criar um arquivo gigantes, eles poderão facilmente tomar o I/O de recursos de disco (pena intensiva operação combinada de I/O). O ajuste deste limite globalmente evita o invasor tentar lotar as opartições onde seus logs são aramzanados. Por isto é uma boa política usar partições separadas do / para log e outros dados.

A cpu é uma limitação classica de administração, é muito útil para evitar que processos sejam disparados consumindo todo o tempo de cpu, caso o usuário deixar coisas rodando em segundo plano (como um sniffer de pacotes), ele será morto pelo sistema. A limitaçao do tempo de CPU tem muitos efeitos, no entanto, caso os usuário passar muito tempo logado na máquina, ele poderá ser afetado. Dependendo da CPU da sua máquina, este tempo pode variar fortemente (um minuto no 386 é bem mais longo do que um minuto no i7).

Exemplo:

@guiafoca hard cpu 2

A limitação do número de logins simultâneos que o usuário pode usar, é extremamente recomendável, a maioria das situações os usuários podem nem precisar de muitos logins, assim eles poderão estar consumindo mais recursos do que realmente precisam. Isto também pode ser usado para detectar atividades suspeitas, caso os usuários sabem que o sistema utiliza esta limitações:

Apr 15 15:09:32 stench pam_limits[10015]: Too many logins (max 1) for test

Os limites aplicados ao usuário podem ser visualizados através do comando ulimit -S -a (para listar limites suaves - soft) e ulimit -H -a (para listar limites rígidos - hard).

Caso os parâmetros -S ou -H sejam omitidos, os limites listados serão os suaves (soft).