A proteção da bomba de forquilha não está funcionando: quantidade de processos não limitada

8

Acabei de perceber que meu sistema não está limitando a quantidade de processos por usuário corretamente, não impedindo que um usuário faça uma fork-pump e bata em todo o sistema:

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 limits.confe por que não está aplicando o limite que ulimit -nafirma ser?

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

EDITAR:

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.

d_inevitable
fonte
-n é o número de descritores de arquivos, não processos. Você querulimit -u
psusi 23/03
@psusi, obrigado, mas isso dá o mesmo resultado: suser@thebe:~$ ulimit -u 1024
d_inevitable 23/03
Quando corro ulimit -u, recebo 31325. Quando corro, ulimit -u 512ele fica 512. Quando corro a bifurcação, o resto do meu sistema está bem.
Psusi 24/03/12

Respostas:

8

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

Eu recomendo a todos que limitem o arquivo de configuração como

user hard nproc 512

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

Ou melhor:

@group hard nproc 512

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

d_inevitable
fonte
Dependendo do software usado, mesmo um sistema de usuário único pode precisar de mais processos do que 512. Se você descobrir que coisas misteriosamente não funcionam após a implementação, poderá ser necessário ajustar o número real de processos que você permite.
Zeiss Ikon