我希望能够通过单击网页上的按钮远程关闭我的服务器。该服务器运行 Ubuntu 14.04.1 64 位和一个 Python Web 应用程序。我还没有决定使用哪个,但它将是 Apache 或 Gunicorn。
我需要能够远程关闭服务器,因为我并不总是能够物理访问该机器。我不想通过 ssh 登录并执行 poweroff 命令,所以我想在浏览器中有一个按钮来启动关机。
我的想法是这样的
- 创建关机程序,让其成为 root 所有者并设置粘滞位。python web 应用程序可以调用它
- 以某种方式,使用 sudoers 文件
- 让 Web 应用程序写入文件并监视该文件(
inotify
)以发送关机命令
最佳做法是什么,或者至少我可以做到这一点的最安全的方法是什么?
当然,网页界面是安全的,也会有防止意外点击的机制。
答案1
没有必要为此编写脚本,您可以通过 python 完成。无论如何,你不能设置 SUIDLinux 上的脚本。
最简单的方法是从您的 Python 脚本中运行关机命令,然后授予 Web 服务器的用户运行该命令的权限。
授予用户您的 Web 服务器以执行权限运行
shutdown
。运行visudo
并将此行添加到文件:www-data ALL=NOPASSWD:/sbin/shutdown
我假设您的服务器以用户身份运行
www-data
,如果不是,请进行适当更改。编写一个运行关机命令的小脚本并将其保存在您的某个
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>
就是这样,您现在有一个可以关闭服务器的按钮。
安全注意事项
我不知道你为什么要为此设置一个 Web 界面。这显然非常不安全。任何有权访问该页面的人都可以关闭计算机。但是,没有办法解决这个问题,无论你做什么,你都会有一个可以关闭你机器的网页,这意味着任何能看到该页面的人都可以这样做。所以,要小心。
一个更好的选择是从另一台机器运行类似的程序:
ssh root@server shutdown -h now
这是一个命令,假设您使用的是 Linux 系统,您甚至可以为其创建一个单词别名。如果您使用的是 bash,只需将此行添加到您的~/.bashrc
:
alias shtdn='ssh root@server shutdown -h now'
这样,您只需运行shtdn
即可安全地关闭远程机器。
如果你真的坚持要通过网络界面做到这一点,我建议你尝试类似网页管理工具。它是一款功能齐全的基于 Web 的服务器管理套件。它是免费的开源软件,安装非常简单,并且为计算机的许多不同方面提供了直观的 GUI。您可以使用它来配置 SAMBA 共享、Web 服务器、数据库等。您还可以使用它来关闭系统。
在基于 Debian 的系统上,你只需运行即可安装
sudo apt-get install webmin
完成后,转到http://localhost:10000
并以 root 身份登录。您可能必须先通过运行激活 root 帐户sudo passwd
。然后,转到系统 -> 启动和关机,滚动到页面末尾并单击“关机”按钮:
这非常容易设置,并且可能比您实施的任何临时解决方案更安全。