como desligar um servidor da interface web

2

Eu quero ser capaz de desligar meu servidor remotamente clicando em um botão em uma página da web. O servidor executa o Ubuntu 14.04.1 64 Bit e um aplicativo da web python. Ainda não decidi qual, mas será Apache ou Gunicorn.

Preciso desligar o servidor remotamente, pois nem sempre tenho acesso físico à máquina. Eu prefiro não ter que fazer login via ssh e executar um comando poweroff para isso, então eu quero ter um tipo de botão no navegador para iniciar o desligamento.

Minhas ideias são parecidas com

  • crie um programa de desligamento para tornar o proprietário da raiz e defina o bit pegajoso. O aplicativo da web python pode chamar isso de
  • de alguma forma, usando o arquivo sudoers
  • fazendo com que o webapp grave em um arquivo e monitore ( inotify ) para enviar o comando shutdown

Quais são as melhores práticas, ou pelo menos as formas mais seguras de fazer isso?

É claro que a interface da Web será protegida e também haverá um mecanismo para evitar o clique por acidente.

    
por wenzul 21.10.2014 / 02:23

1 resposta

7

Não há razão para escrever um script para isso, você pode fazê-lo através do python. Em qualquer caso, você não pode definir o bit SUID para scripts no Linux.

A maneira mais simples seria executar o comando shutdown a partir do seu script python e dar ao usuário do servidor da Web o direito de executá-lo.

  1. Dê ao usuário seu servidor da Web como o direito de executar shutdown . Execute visudo e adicione esta linha ao arquivo:

    www-data ALL=NOPASSWD:/sbin/shutdown
    

    Estou supondo que seu servidor seja executado como usuário www-data , caso contrário, mude de forma apropriada.

  2. Escreva um pequeno script que execute o comando shutdown e salve-o em um dos seus diretórios cgi-bin :

    #!/usr/bin/env python
    import os;
    os.system("sudo shutdown -h now");
    
  3. Torne o script executável com

    sudo chmod 755 /var/www/yourpage/cgi-bin/shutdown.py
    
  4. Crie uma página da Web com um botão para executar esse script:

    <HTML>
     <BODY>
        <FORM method="post" action="cgi-bin/shutdown.py"> 
            <INPUT TYPE="submit" VALUE="Submit" NAME="Submit"> 
        </FORM>
     </BODY>
    </HTML>
    

É isso aí, agora você tem um botão que irá desligar o seu servidor.

Uma nota sobre segurança

Não tenho ideia de por que você deseja configurar uma interface da web para isso. Isto é, obviamente, muito inseguro. Qualquer pessoa que tenha acesso a essa página poderá encerrar o computador. No entanto, não há maneira de contornar isso, o que você fizer, você terá uma página da Web que pode desligar sua máquina, o que significa que qualquer pessoa que possa ver a página pode fazê-lo. Por isso tem cuidado.

Uma alternativa muito melhor seria executar algo assim de outra máquina:

ssh root@server shutdown -h now

Esse é um único comando e, supondo que você esteja em um sistema Linux, você pode até criar um alias de uma palavra para ele. Se você estiver usando o bash, basta adicionar esta linha ao seu ~/.bashrc :

alias shtdn='ssh root@server shutdown -h now'

Dessa forma, tudo o que você precisa fazer é executar shtdn e desligar a máquina remota com segurança.

Se você realmente insistir em fazer isso por meio de uma interface da web, sugiro que tente algo como webmin . É uma suíte de administração de servidores completa e baseada na web. É gratuito e de código aberto, muito fácil de instalar e oferece uma interface intuitiva para muitos aspectos diferentes do seu computador. Você pode usá-lo para configurar compartilhamentos SAMBA, servidores da Web, bancos de dados, etc. Você também pode usá-lo para desligar o sistema.

Em sistemas baseados em Debian, você pode instalá-lo simplesmente executando

sudo apt-get install webmin

Depois de ter feito isso, vá para http://localhost:10000 e faça login como root. Você pode ter que primeiro ativar a conta root executando sudo passwd . Em seguida, vá para Sistema - > Inicialização e desligamento, vá até o final da página e clique no botão "Desligar":

Isso é muito fácil de configurar e provavelmente será mais seguro do que qualquer solução ad hoc que você implementar.

    
por 21.10.2014 / 23:40