Sobes.tech
Middle

O que você sabe sobre ulimits e como usá-los em sistemas Linux?

sobes.tech IA

Resposta da IA

Ulimits (limites de utilizador) são restrições ao consumo de recursos por processos no sistema operativo Linux. Ajudam a evitar o esgotamento de recursos do sistema por um único processo e garantem estabilidade.

Os principais recursos que podem ser limitados com ulimits:

  • Tempo de CPU (segundos): Tempo máximo de uso de CPU para um processo.
  • Tamanho do arquivo (blocos): Tamanho máximo de arquivo que um utilizador pode criar.
  • Tamanho do segmento de dados (kbytes): Tamanho máximo do segmento de dados de um processo.
  • Tamanho da pilha (kbytes): Tamanho máximo da pilha de um processo.
  • Tamanho do ficheiro core (blocos): Tamanho máximo do dump core.
  • Tamanho do conjunto residente (kbytes): Tamanho máximo de memória residente do processo (frequentemente não suportado ou apenas com uma restrição "suave").
  • Número de processos: Número máximo de processos que um utilizador pode criar.
  • Ficheiros abertos: Número máximo de ficheiros que um processo pode abrir.
  • Memória bloqueada ([kbytes]): Volume máximo de memória que pode estar bloqueada na RAM.
  • Processos de utilizador máximos: Número máximo de processos disponíveis para um utilizador específico (ignora o ID de outro utilizador ao contar).
  • Sinais pendentes: Número máximo de sinais que podem esperar na fila para um processo específico.
  • Tamanho da fila de mensagens (bytes): Tamanho máximo da fila de mensagens POSIX.
  • Prioridade em tempo real: Prioridade máxima em tempo real que pode ser definida.
  • Prioridade Nice: Valor "suave" máximo de prioridade.
  • Memória bloqueada em tempo real (kbytes): Tamanho máximo de memória bloqueada para tarefas em tempo real.

Os ulimits têm dois tipos:

  • Limite suave: Restrição atual e ativa. O utilizador ou processo pode aumentá-lo, mas não acima do limite duro.
  • Limite duro: Restrição máxima possível estabelecida pelo administrador. Apenas o superutilizador (root) pode aumentá-lo.

Ver ulimits atuais:

Utilize o comando ulimit na linha de comandos (por exemplo, bash).

# Mostrar todos os limites suaves
ulimit -a

# Mostrar limite duro para ficheiros abertos
ulimit -Hn

Estabelecer ulimits:

Os ulimits podem ser definidos temporariamente para a sessão ou processo atual, ou de forma permanente.

Estabelecimento temporário:

Utilize o comando ulimit na linha de comandos. Isto afeta apenas a shell atual e os processos filhos iniciados a partir dela.

# Definir limite suave para ficheiros abertos em 4096
ulimit -Sn 4096

# Definir limite duro para o número de processos em 100
ulimit -Hu 100

Estabelecimento permanente:

Editar o arquivo /etc/security/limits.conf ou os ficheiros no diretório /etc/security/limits.d/. Este método requer privilégios de superutilizador e aplica-se ao iniciar sessão no sistema (através do PAM).

Formato do ficheiro /etc/security/limits.conf:

# <domínio>  <tipo>  <item>  <valor>
# O domínio pode ser: user (@grupo), grupo (@grupo), curinga (*)
# O tipo pode ser: soft, hard, - (ambos)
# Item - tipo de recurso (nofile, nproc, etc.)
# Valor - restrição de valor

*       soft    nofile  4096       # Todos os utilizadores, limite soft em ficheiros abertos 4096
@mygroup hard    nproc   256        # Grupo mygroup, limite duro em processos 256
myuser  -       stack   8192       # Utilizador myuser, limites na pilha 8192 kB

Após modificar /etc/security/limits.conf, é necessário fazer logout e login novamente para que as alterações tenham efeito.

Os ulimits são frequentemente usados para:

  • Prevenir "fork bombs" (processos que criam múltiplos processos filhos).
  • Limitar a memória consumida por processos para evitar situações de "out of memory".
  • Limitar o número de ficheiros abertos, importante para aplicações de rede e bases de dados.
  • Controlar o consumo de CPU por aplicações intensivas.

O uso de ulimits é uma parte importante do reforço de segurança do sistema e de garantir a estabilidade e previsibilidade do funcionamento das aplicações em ambientes de produção.