Usando o inittab para garantir que o sshd (e outros itens importantes) ainda estejam rodando - alguma desvantagem?

6

Tendo conseguido matar o sshd em uma máquina remota (rodando um script que usava toda a memória disponível na máquina, oops ...) que eu não tenho acesso senão visitar a hospedagem para [1], eu estava considerando maneiras de garantir que o sshd seja sempre mantido em execução.

Diferentemente de um trabalho do cron hacky para reiniciar o sshd a cada n minutos ou horas, usando inittab para obter o init para manter o sshd rodando parece ser uma boa idéia .

Existe alguma desvantagem desta abordagem? Parece algo que seria sensato para as distribuições Linux fazer por padrão, uma vez que o sshd é frequentemente o único método disponível de acesso para uma máquina. .

Além disso, existem outros daemons para os quais eu deveria estar usando essa abordagem? Talvez um agente de monitoramento como o nrpe para nagios?

[1] Sim, cartões de gerenciamento ou um interruptor de rede seriam uma boa ideia, mas foram considerados "desnecessários" no momento ...

    
por David Gardner 24.07.2009 / 11:48

8 respostas

3

Existem algumas implementações dessa ideia. Upstart é usado pelo Ubuntu e pode reiniciar serviços se eles morrerem, o Solaris 10 tem o Instalação de gerenciamento de serviços , runit é cruzada -plataforma e há daemontools como já mencionado.

    
por 24.07.2009 / 14:25
2

Eu não consigo pensar em nenhum outro motivo não para fazer o inittab, do que reiniciar o sshd após uma atualização é um pouco mais inconveniente.

Além disso: ideia interessante.

    
por 24.07.2009 / 14:44
2

você pode dizer ao assassino de OOM do linux para não matar o sshd, procurar pelo google oom_adj para mais detalhes, ou veja isto aqui manual do rhel

    
por 24.07.2009 / 15:28
1

Existem benefícios em ter serviços que precisam ser confiáveis sob um esquema que garantirá que eles estejam sempre em execução. Eu prefiro usar daemontools, eu mesmo, pelas razões documentadas aqui: link

Eu não rodei o ssh dessa maneira, mas eu ficaria feliz o suficiente fazendo isso se eu estivesse na situação em que eu achava que meu atual gerenciamento de SSH não funcionaria. Quanto ao problema de "falta de memória", você pode despriorizar certos processos como o sshd para que eles não sejam mortos pelo OOM killer em favor do programa realmente causando o problema.

    
por 24.07.2009 / 12:21
1

Uma ideia interessante.

Eu não tentei nada parecido, mas gostaria de verificar a que horas do processo de inicialização as coisas do inittab são iniciadas. Se for cedo demais, talvez você não tenha a rede em funcionamento.

    
por 24.07.2009 / 12:51
1

O Monit é um daemon de monitoramento projetado para o que você deseja fazer aqui.

    
por 24.07.2009 / 15:16
0

O único problema que posso prever é se ele tentou reaparecer com um erro de configuração.

Eu achei que você poderia avaliar o respawning de limite, mas parece que não consigo encontrar nenhuma documentação que suporte isso.

    
por 24.07.2009 / 15:15
0

Como outros notaram antes de mim, usar uma ferramenta existente como daemontools ou monit provavelmente será a rota mais inteligente. Você não pode usar o inittab para gerar o sshd enquanto ele roda no background, e o init tentará executar vários sshd's. Você provavelmente obterá mensagens "init: re-spawning too fast".

Você pode escrever um pequeno script de monitoramento que será executado em um loop e certificar-se de que o sshd original (aquele que aceita conexões e forquilhas para manipular as sessões) ainda esteja em execução. Uma falha, basta usar o script de inicialização do sistema para executá-lo novamente.

Apenas uma nota, se o seu sshd for eliminado pelo manipulador de OOM do kernel, não haverá garantia de que o seu sshd sobreviverá a uma reinicialização ...

    
por 24.07.2009 / 15:24