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

9

Havia outros desenvolvedores logados como root que eu queria expulsar.

Então eu emiti

pkill -KILL -u root

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

Eu danifiquei meu sistema? Não consigo acessá-lo através do SSH agora.

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

Buttle Butkus
fonte
1
Você quase certamente precisará reiniciá-lo. Se puder, envie um sinal de desligamento da ACPI em vez de apenas puxar o plugue.
Skyhawk
1
Iain, IME, isso não é inteiramente verdade. Eles precisam iniciar como root, vincular-se às portas privilegiadas, mas, em seguida, desenvolver um monte de processos pertencentes a qualquer usuário não particular configurado, para separação de privilégios. No caso do apache, no entanto, geralmente ainda existe um único processo de propriedade de raiz parado no início de tudo. Mas concordo com você que todos os processos que realizam a veiculação na web real não são de propriedade da raiz.
MadHatter
5
Cometer erros é a melhor maneira de aprender . Por favor, não diminua o voto simplesmente porque alguém cometeu um erro grave. Esta questão é controversa, mas não deve ser encerrada. Em vez disso, desafio você a ler mais profundamente o pensamento por trás da pergunta e explicar: O que acontece quando eu mato todos os processos raiz? Por que o anfitrião ainda está vivo? Por que o SSHD não pode atender solicitações, mas o servidor da web pode? Como é possível que o servidor da web esteja vivo? Não parecemos ter uma boa resposta canônica para esse tipo de pergunta. As respostas podem fornecer explicações valiosas sobre como o Unix funciona.
Stefan Lasiewski
2
Obrigado, Stefan, por usar sua cabeça e seu coração e não clicar compulsivamente no botão de votação como muitos outros fazem. Se ninguém nunca postar perguntas sobre seus erros nos sites de stackexchange, por medo de receber votos negativos, NINGUÉM aprenderá com eles. Estou ajudando as pessoas com minha pergunta e não deve ser punido por isso.
precisa saber é o seguinte
1
Eu votei a questão de cima para baixo porque era bom para rir, sem ofender. É como assistir a um vídeo de alguém caindo em um buraco enquanto enviava mensagens de texto.
UncaAlby

Respostas:

15

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

Espero que você tenha acesso físico à caixa; nesse caso, você provavelmente só precisa pressionar o botão liga / desliga. Perceba que você matou muitos processos e esteja preparado para alguma corrupção. O Linux foi projetado para se recuperar de uma falha no sistema e você basicamente 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 pergunta para entrevista de emprego. "O que acontece se você executou o X ..." Essa é uma coisa divertida de experimentar em sua própria máquina virtual privada, mas nunca deve ser feita em uma caixa real. Todo mundo comete erros. Lembre-se e aprenda com o seu erro. Cometer erros é a melhor maneira de aprender. Cometer erros na produção é uma lição dolorosa que acontecerá ocasionalmente em sua carreira.

raiz de pkill -KILL -u

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

Seu comando eliminou agressivamente todos os processos pertencentes à raiz; os processos foram eliminados imediatamente e não tiveram a chance de limpar. Para ter uma idéia do que você matou, faça login em uma caixa Linux saudável e liste os processos pertencentes ao root, usando um comando como um desses. 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. Portanto, ele pode continuar funcionando por enquanto, mas está doente e precisa ser reparado o mais rápido possível. Conforme o tempo passa, o sistema fica cada vez mais doente. Quanto mais você esperar, pior será.

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

Eu estou supondo que você está usando o Apache. Parece que os processos filhos do servidor da web ainda estão em execução porque não pertencem ao usuário 'root'. No entanto, o processo do servidor web pai normalmente é de propriedade do root e você o matou. Como resultado, novos processos filhos não serão gerados. Isso ficará bom por um tempo, porque você provavelmente possui processos filhos suficientes para atender a solicitações e, normalmente, esses processos filhos persistem até serem mortos ou travados. Novamente, a solução mais rápida é reiniciar a máquina.

Stefan Lasiewski
fonte
Não tenho acesso físico, mas vou descobrir algo. Fiquei agradavelmente surpreso ao ver que o Apache ainda está funcionando. Portanto, a máquina está indo bem sem raiz. PS: se você votou negativamente na questão, melhorei o título.
Buttle Butkus
1
@ButtleButkus Não diminui a votação da pergunta. Comecei a responder à pergunta e fiquei bastante interessado em saber por que as coisas funcionam da maneira que funcionam.
Stefan Lasiewski
1
Stefan, obrigado pela sua resposta. É a única resposta que votei desde o início, pois fazia sentido. Reiniciei o sistema em cerca de 10 minutos e tudo parece estar funcionando maravilhosamente desde então.
Buttle Butkus
4

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

user9517
fonte
Não parece que eu matei todos os processos críticos, na verdade. Caso contrário, por que o servidor da web ainda estaria servindo páginas da web perfeitas?
Buttle Butkus
@ButtleButkus: Seu servidor web não estará executando como root.
user9517
@lain Se um único serviço "crítico" foi morto, acho que isso faria todo o servidor ficar inoperante. Parece que o comando realmente não matou um único serviço crítico. Mas matou um serviço conveniente: sshd.
Buttle Butkus
2
Só porque um serviço crítico é morto, não significa que a máquina irá parar imediatamente. Por exemplo, eu consideraria meu daemon de controle de ventilador crítico - quando o uso da CPU aumentar, quero que o ventilador gire mais. Eu poderia matar o serviço e ter baixo uso da CPU por dias e, de repente, 1000 pessoas acessam meu site e minha CPU pega fogo. E há muitas maneiras mais menos perceptíveis de fazer dano ...
unhammer
3

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

Você não pode enviar um sinal para os threads do kernel, é por isso que o sistema está sendo executado, mas os serviços de propriedade raiz foram encerrados e, para uma ressurreição normal, você deve reiniciá-lo.

Soham Chakraborty
fonte
Obrigado pelos detalhes interessantes. Eu te dei um voto positivo, mas estou dando a Stefan a marca de seleção.
precisa saber é o seguinte