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.
-
Dê ao usuário seu servidor da Web como o direito de executar
shutdown
. Executevisudo
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. -
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");
-
Torne o script executável com
sudo chmod 755 /var/www/yourpage/cgi-bin/shutdown.py
-
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.