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.