A proteção de garfo não funciona: quantidade de processos não limitados

8

Acabei de perceber que meu sistema não está limitando a quantidade de processos por usuário corretamente, portanto, não impedindo que um usuário faça uma fork-bomb e que cause pane no sistema inteiro:

user@thebe:~$ cat /etc/security/limits.conf | grep user
user        hard    nproc   512
user@thebe:~$ ulimit -u
1024
user@thebe:~$ :(){ :|:& };:
[1] 2559
user@thebe:~$ ht-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
...
Connection to thebe closed by remote host.

Isso é um bug ou por que ele está ignorando o limite em limits.conf e por que não está aplicando o limite que ulimit -n afirma ser?

PS: Eu realmente não acho que o limite de memória seja atingido antes do limite do processo. Esta máquina tem 8GB de memória RAM e estava usando apenas 4% do tempo no momento em que soltei o fork.

EDITAR:

Eu consegui reproduzir isso em um CD ao vivo. Então eu acho que isso deve ser um bug. Basicamente, acaba matando todos os processos, incluindo coisas críticas do sistema como X11, SSHD, etc.

Qualquer usuário pode travar o sistema.

    
por d_inevitable 23.03.2012 / 22:42

1 resposta

9

Acontece que /etc/security/limits.conf funciona, mas precisa ser reinicializado antes de ser interpretado. Um logout não é suficiente.

Eu recomendo a qualquer pessoa um limite para o arquivo de configuração como

user hard nproc 512

Substitua user por qualquer nome de usuário que você queira limitar.

Ou melhor:

@group hard nproc 512

Substitua group por qualquer grupo de usuários que você deseja limitar.

    
por d_inevitable 26.03.2012 / 12:45