De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Rubens Queiroz de Almeida
Data de Publicação: 09 de outubro de 2013
Este texto é uma tradução livre do original em inglês "How to: Prevent a fork bomb by limiting user process, do portal NixCraft.
Como proteger o meu sistema de uma bomba fork() em sistemas Linux?
Limitar os processos de usuários é um passo importante na operação de um
sistema estável. Para limitar processos de usuários basta adicionar o nome
do usuário ou grupo ao arquivo /etc/security/limits.conf e estabelecer
as limitações ao consumo de recursos por parte dos processos.
Cada linha descreve um limite para um usuário no formato:
<domínio> <tipo> <item> <valor>
Onde:
<domínio> pode ser:
@group
*", para o valor default
%", pode ser usado também com a sintaxe %group, para o limite maxlogin
Observação: limites de grupo e com coringas não se aplicam ao usuário
root. Para aplicar um limite ao usuário root a diretiva <domain> precisa
especificar diretamente o usuário root.
<tipo> pode ter dois valores:
<item> pode ser
| core | limita o tamanho do arquivo core (KB) |
| data | tamanho máximo dos dados (KB) |
| fsize | tamanho máximo de arquivo (KB) |
| memlock | tamanho máximo de memória travada no espaço de endereçamento (KB) |
| nofile | número máximo de arquivos abertos |
| rss | tamanho máximo da memória de um processo que pode residir em memória RAM (max resident set size) (KB) |
| stack | tamanho máximo da pilha (KB) |
| cpu | tempo máximo de CPU (MIN) |
| nproc | número máximo de processos |
| as | limite do espaço de endereçamento |
| maxlogins | número máximo de logins para este usuário |
| maxsyslogins | Número máximo de logins no sistema |
| priority | a prioridade sob a qual são executados os processos do usuário |
| locks | número máximo de locks de arquivos que o usuário pode ter |
| sigpending | número máximo de sinais pendentes |
| msgqueue | número máximo de memória usadas pelas filas de mensagem POSIX (bytes) |
| nice | prioridade máximo (nice) permitida |
| rtprio | prioridade máxima em tempo real |
| chroot | mudar root para o diretório (apenas Debian) |
Para alterar os valores, faça o login como root e edite o arquivo de configuração:
# vi /etc/security/limits.conf
Os valores abaixo irão impedir a bomba fork():
vivek hard nproc 300 @student hard nproc 50 @faculty soft nproc 100 @pusers hard nproc 200
As diretivas acima irão impedir que qualquer pessoa no grupo student tenha
mais do que 50 processos, o limite para faculty e pusers é definido
como 100 e 200. O usuário Vivek pode criar apenas 300 processos. Observe
que os sistemas KDE e Gnome podem iniciar muitos processos.
Salve e feche o arquivo. Teste o novo sistema lançando uma bomba fork:
$ :(){ :|:& };: