如何从 Web 界面关闭服务器

如何从 Web 界面关闭服务器

我希望能够通过单击网页上的按钮远程关闭我的服务器。该服务器运行 Ubuntu 14.04.1 64 位和一个 Python Web 应用程序。我还没有决定使用哪个,但它将是 Apache 或 Gunicorn。

我需要能够远程关闭服务器,因为我并不总是能够物理访问该机器。我不想通过 ssh 登录并执行 poweroff 命令,所以我想在浏览器中有一个按钮来启动关机。

我的想法是这样的

  • 创建关机程序,让其成为 root 所有者并设置粘滞位。python web 应用程序可以调用它
  • 以某种方式,使用 sudoers 文件
  • 让 Web 应用程序写入文件并监视该文件(inotify)以发送关机命令

最佳做法是什么,或者至少我可以做到这一点的最安全的方法是什么?

当然,网页界面是安全的,也会有防止意外点击的机制。

答案1

没有必要为此编写脚本,您可以通过 python 完成。无论如何,你不能设置 SUIDLinux 上的脚本。

最简单的方法是从您的 Python 脚本中运行关机命令,然后授予 Web 服务器的用户运行该命令的权限。

  1. 授予用户您的 Web 服务器以执行权限运行shutdown。运行visudo并将此行添加到文件:

    www-data ALL=NOPASSWD:/sbin/shutdown
    

    我假设您的服务器以用户身份运行www-data,如果不是,请进行适当更改。

  2. 编写一个运行关机命令的小脚本并将其保存在您的某个cgi-bin目录中:

    #!/usr/bin/env python
    import os;
    os.system("sudo shutdown -h now");
    
  3. 使用以下命令使脚本可执行

    sudo chmod 755 /var/www/yourpage/cgi-bin/shutdown.py
    
  4. 制作一个网页,上面有一个可运行该脚本的按钮:

    <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。然后,转到系统 -> 启动和关机,滚动到页面末尾并单击“关机”按钮:

在此处输入图片描述

这非常容易设置,并且可能比您实施的任何临时解决方案更安全。

相关内容