Там нет причин писать сценарий для этого, вы можете сделать это через Python. В любом случае вы не можете установить бит SUID для скриптов в Linux.
Самый простой способ - запустить команду shutdown из скрипта Python, а затем дать пользователю веб-сервера право на его запуск.
Предоставьте пользователю, на котором работает ваш веб-сервер, право на shutdown
. Запустите visudo
и добавьте эту строку в файл:
www-data ALL=NOPASSWD:/sbin/shutdown
Я предполагаю, что ваш сервер работает как пользовательские www-data
, если нет, измените соответствующим образом.
Напишите небольшой скрипт, который запускает команду shutdown и сохраните его в одном из ваших каталогов cgi-bin
:
#!/usr/bin/env python
import os;
os.system("sudo shutdown -h now");
Сделайте скрипт исполняемым с
sudo chmod 755 /var/www/yourpage/cgi-bin/shutdown.py
Создайте веб-страницу, которая даст вам кнопку для запуска этого скрипта:
<HTML>
<BODY>
<FORM method="post" action="cgi-bin/shutdown.py">
<INPUT TYPE="submit" VALUE="Submit" NAME="Submit">
</FORM>
</BODY>
</HTML>
Вот и все, теперь у вас есть кнопка, которая отключит ваш сервер.
Записка о безопасности
Я понятия не имею, почему вы хотите настроить веб-интерфейс для этого. Это, очевидно, очень небезопасно. Любой, кто имеет доступ к этой странице, сможет выключить компьютер. Тем не менее, нет никакого способа обойти это, что бы вы ни делали, у вас будет веб-страница, которая может выключить ваш компьютер, а это значит, что любой, кто может видеть страницу, может это сделать. Так что будьте осторожны.
Гораздо лучшая альтернатива - запустить что-то подобное с другой машины:
ssh root@server shutdown -h now
Это одна команда, и, если вы работаете в системе Linux, вы даже можете создать для нее псевдоним из одного слова. Если вы используете bash, просто добавьте эту строку в ваш ~/.bashrc
:
alias shtdn='ssh root@server shutdown -h now'
Таким образом, все, что вам нужно сделать, это запустить shtdn
и вы сможете безопасно и надежно завершить работу удаленного компьютера.
Если вы действительно настаиваете на возможности сделать это через веб-интерфейс, я предлагаю вам попробовать что-то вроде webmin. Это полнофункциональный веб-сервер для администрирования серверов. Это бесплатный и с открытым исходным кодом, очень прост в установке и предлагает интуитивно понятный графический интерфейс для различных аспектов вашего компьютера. Вы можете использовать его для настройки общих ресурсов SAMBA, веб-серверов, баз данных и т.д. Вы также можете использовать его для выключения вашей системы.
В системах на основе Debian вы можете установить его, просто запустив
sudo apt-get install webmin
После этого перейдите по http://localhost:10000
и войдите в систему как пользователь root. Возможно, вам придется сначала активировать учетную запись root, запустив sudo passwd
. Затем перейдите в Система -> Загрузка и завершение работы, прокрутите страницу до конца и нажмите кнопку "Завершение работы":
Это очень легко настроить и, вероятно, будет более безопасным, чем любое специальное решение, которое вы внедряете.