Como parar e detectar a bomba garfo

13
#include <stdlib.h>
#include <unistd.h>

int main()
{
   while(1)
      fork();
}

Este é o código para uma bomba bifurcada.

No nosso colégio, nos conectamos via telnet, ou seja, o protocolo de atendimento ao cliente. Cerca de 100 sistemas estão conectados ao servidor. De repente, vimos o servidor ficar lento e, depois de algum tempo, ele caiu. Eu vim a saber que alguém implementou uma bifurcação.

Como podemos detectar em qual sistema a bomba do garfo é implementada? E como podemos pará-lo?

Um método é limitar o número máximo de processos que um único usuário pode possuir. Existe algum método para pará-lo e saber de qual sistema ele foi implementado?

    
por Rajesh M 16.03.2013 / 15:37

2 respostas

16

Uma maneira é limitar o número de processos que um usuário pode executar.

Basta fazer login como root e editar esse arquivo para adicionar usuários e configurar seu limite.

# vi /etc/security/limits.conf

Adicione esta linha ao arquivo

john hard nproc 10

Agora o usuário john pode criar apenas 10 processos.

    
por 16.03.2013 / 15:48
14

Para parar uma bifurcação em execução, você pode usar killall <name> para matar todos os processos da bomba. No entanto, uma vez que uma bomba bifurcada geralmente resulta em uma carga incrivelmente alta no sistema, você pode não ser capaz de executar SSH nela ou executá-la. Então, uma reinicialização pode ser necessária ou, pelo menos, muito mais rápida.

Se cada usuário tiver sua própria conta no sistema, basta verificar o diretório pessoal de todos e procurar o executável. As chances são boas, ele também enviou o código-fonte para encontrá-lo não deve ser muito difícil. Se foi uma conta compartilhada para todos os alunos, você está sem sorte. Especialmente após o término da sessão telnet ou ssh do usuário, você não tem chance de descobrir quem o iniciou.

No entanto, em vez de punir o usuário que detonou a bomba, você deve corrigir a configuração do sistema para desarmar as garfo-bomba. Você pode definir limites de processo por usuário usando /etc/security/limits.conf e, assim, evitar que uma bifurcação saia do controle - por exemplo, apenas 50 processos de uma bifurcação não causam muito dano.

    
por 16.03.2013 / 15:48