O script de shell recursivo deve bloquear o sistema?

4

Eu cometi um erro de digitação e executei meu shell script de forma recursiva. Exemplo:

#!/bin/bash
# filename: kill-me-please.sh   
./kill-me-please.sh

Isso fez com que meu sistema parasse de responder e tudo que eu podia fazer era uma reinicialização difícil.

Tentei mesmo no MacOS e consegui detectar esse problema e encerrei o script com um erro.

Acho que um sistema operacional deve ser capaz de lidar com essa situação. Isso é um inseto?

    
por umpirsky 22.04.2013 / 11:42

1 resposta

5

O que você fez pode ser chamado de bomba de garfo . Uma fork fork é um shell script, ou um único comando shell que se chama recursivamente, e assim preenche todos os recursos do sistema. Em vez de um bug, este é um ataque DoS .

Sempre que ./kill-me-please.sh é executado, um novo processo é criado, usando alguns ciclos de memória e relógio. Seu programa é capaz de criar infinitamente muitos garfos, mas como os recursos do sistema são finitos, em algum momento, você ficará sem recursos. Existem muitos tipos de bombas que exploram essa possibilidade. Outro exemplo bem conhecido é:

$ :(){ :|:& };:

Aqui : é o nome de uma função de shell. Na função, o : é chamado recursivamente duas vezes em uma subcamada. Isso terá o mesmo efeito que o seu script.

Desativar estas garfos é difícil, pois todos os recursos podem ser explorados pela bifurcação até você encontrar e aplicar a rotina necessária. Algumas formas de recuperação são explicadas e discutidas em este artigo da Wikipédia .

Para evitar isso, no Linux e possivelmente em outros Unices , é possível usar ulimit utilitário para limitar o número de processos que um usuário pode criar. ulimit -Hu 50 limitará o usuário a 50 processos (para que o usuário não possa alterá-lo). Além disso, em muitos sistemas, existem arquivos de configuração que podem ser usados para definir esse tipo de limite.

É provável que o seu sistema OS X já tenha um limite de processo definido. Posso pensar em outras maneiras de evitar isso, mas não posso dizer que nem minhas ideias são soluções válidas, nem elas são implementadas por nenhum sistema operacional, portanto, vou mantê-las em mim. Possivelmente, muitas pessoas que estiverem lendo este tópico pensarão nas mesmas possibilidades de qualquer maneira.

    
por user91091 24.04.2013 / 18:20