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.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 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.
process
ulimit
resource-limiting
d_inevitable
fonte
fonte
ulimit -u
user@thebe:~$ ulimit -u
1024
ulimit -u
, recebo 31325. Quando corro,ulimit -u 512
ele fica 512. Quando corro a bifurcação, o resto do meu sistema está bem.Respostas:
Acontece que
/etc/security/limits.conf
isso 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
Substitua
user
por qualquer nome de usuário que você queira limitar.Ou melhor:
Substitua
group
por qualquer grupo de usuários que você deseja limitar.fonte