Que efeito tem em um servidor quando você mata todos os processos de raiz?

9

Havia outros desenvolvedores logados como root que eu queria chutar.

Então eu publiquei

pkill -KILL -u root

Então percebi que provavelmente matei todos os tipos de processos de raiz.

Eu danifiquei meu sistema? Eu não posso alcançá-lo através do SSH agora.

ATUALIZAÇÃO: O servidor da Web ainda está em execução. Mas não consigo me conectar pelo SSH agora. Não tenho ideia do que fiz.

    
por Buttle Butkus 03.01.2013 / 07:57

3 respostas

15

Uma resposta rápida é que você matou o sshd (e o senhor sabe o que mais) e será incapaz de logar no sistema usando o SSH. A menos que você tenha algum outro método para obter acesso ao sistema (como um console remoto, IPMI, etc), será necessário reinicializar o sistema, o que restaurará o serviço SSH e outros serviços.

Espero que você tenha acesso físico à caixa e, nesse caso, você provavelmente só precisará pressionar o botão liga / desliga. Perceba que você matou muitos processos e esteja preparado para alguma corrupção. O Linux foi projetado para recuperar-se de uma falha no sistema e, essencialmente, você acionou uma falha "manual". A maioria das coisas deve se recuperar bem após uma reinicialização. Você pode ter todos os tipos de mensagens de erro interessantes nos arquivos de log.

Resposta longa:

Este é um ótimo experimento mental e uma boa entrevista para o trabalho. "O que acontece se você fez X ..." É divertido tentar em sua própria máquina virtual privada, mas nunca deve ser feito em uma caixa real. Todo mundo comete erros. Lembre-se e aprenda com o seu erro. Cometer erros é a melhor maneira de aprender. Errar a produção é uma lição dolorosa isso acontecerá ocasionalmente em sua carreira.

pkill -KILL -u root

Este comando enviará um 'SIGKILL' (por exemplo, kill -9 . KILL é um alias para SIGKILL) para todos os processos pertencentes a root. É uma coisa muito ruim de se fazer em um sistema. kill -9 deve ser evitado, exceto como último recurso.

Seu comando matou agressivamente todo o processo de propriedade do root, os processos foram mortos imediatamente e não tiveram a chance de serem limpos. Para ter uma noção do que você matou, faça o login em uma caixa Linux saudável e liste os processos de propriedade do root, usando um comando como um deles. Você normalmente não precisa ser root para executar estes comandos:

$ pgrep -u root -l
$ ps aux | grep root

Você pode ter matado o Init (PID # 1), que gera novos processos. Seu sistema pode não conseguir criar novos processos. Então, pode continuar a funcionar por enquanto, mas está doente e precisa ser consertado o mais rápido possível. Conforme o tempo passa, o sistema ficará cada vez mais doente. Quanto mais você esperar, pior ficará.

UPDATE: Web server is still running. But I can't connect by SSH now. I have no idea what I've done.

Eu estou supondo que você está usando o Apache. Parece que os processos child do servidor da Web ainda estão em execução porque não são de propriedade do usuário 'root'. No entanto, o processo pai do servidor da Web é normalmente de propriedade do root e você o matou. Como resultado, novos processos filhos não serão gerados. Isso ficará bem por um tempo, porque você provavelmente tem processos filhos suficientes para atender às solicitações e, normalmente, esses processos filhos persistirão até serem mortos ou falharem. Novamente, a correção mais rápida é reinicializar a máquina.

    
por 03.01.2013 / 08:01
4

Você provavelmente terá que reiniciar o sistema, já que matou praticamente todos os serviços críticos nele. A maneira como você faz isso depende de quais ferramentas você possui ou de qual transporte você precisa obter para o data center.

    
por 03.01.2013 / 08:01
3

O sistema está rodando porque o kernel está rodando. Você não pode acessar o sshd porque você matou o daemon. Provavelmente o init foi finalizado também, o que significa que você não pode criar novos processos. Portanto, novas conexões do apache podem não estabelecer (parâmetros de configuração aplicados;)).

Você não pode enviar um sinal para os encadeamentos do kernel, é por isso que o sistema está em execução, mas os serviços de propriedade da raiz foram finalizados e, para uma ressurreição normal, você deve reinicializá-lo.

    
por 03.01.2013 / 19:49

Tags