如何从网络界面关闭服务器

wen*_*zul 2 linux shutdown python webserver

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

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

我的想法是这样的

  • 创建一个关机程序让 root 拥有者并设置粘滞位。python Web 应用程序可以调用它
  • 不知何故,使用 sudoers 文件
  • 让 webapp 写入文件并监视 ( inotify) 以发送关闭命令

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

当然,Web 界面将受到保护,并且还将有一种防止意外点击的机制。

ter*_*don 7

没有理由为此编写脚本,您可以通过python来完成。在任何情况下,您都无法为 Linux 上的脚本设置 SUID位。

最简单的方法是让您从 Python 脚本中运行关闭命令,然后授予网络服务器用户运行它的权限。

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

    www-data ALL=NOPASSWD:/sbin/shutdown
    
    Run Code Online (Sandbox Code Playgroud)

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

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

    #!/usr/bin/env python
    import os;
    os.system("sudo shutdown -h now");
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使脚本可执行

    sudo chmod 755 /var/www/yourpage/cgi-bin/shutdown.py
    
    Run Code Online (Sandbox Code Playgroud)
  4. 制作一个网页,为您提供一个将运行该脚本的按钮:

    <HTML>
     <BODY>
        <FORM method="post" action="cgi-bin/shutdown.py"> 
            <INPUT TYPE="submit" VALUE="Submit" NAME="Submit"> 
        </FORM>
     </BODY>
    </HTML>
    
    Run Code Online (Sandbox Code Playgroud)

就是这样,您现在有一个按钮可以关闭您的服务器。


安全注意事项

我不知道您为什么要为此设置 Web 界面。显然,这是非常不安全的。任何有权访问该页面的人都可以关闭计算机。但是,没有办法解决这个问题,无论您做什么,您都会拥有一个可以关闭机器的网页,这意味着任何可以看到该页面的人都可以这样做。所以,要小心。

一个更好的选择是从另一台机器上运行这样的东西:

ssh root@server shutdown -h now
Run Code Online (Sandbox Code Playgroud)

这是一个单一的命令,假设您使用的是 Linux 系统,您甚至可以为其创建一个单词别名。如果您使用 bash,只需将此行添加到您的~/.bashrc

alias shtdn='ssh root@server shutdown -h now'
Run Code Online (Sandbox Code Playgroud)

这样,您只需运行shtdn即可安全可靠地关闭远程机器。


如果你真的坚持能够通过网络界面做到这一点,我建议你尝试像webmin这样的东西。它是一个功能齐全、基于 Web 的服务器管理套件。它是免费和开源的,非常易于安装,并为计算机的许多不同方面提供直观的 GUI。你可以用它来配置 SAMBA 共享、网络服务器、数据库等。你也可以用它来关闭你的系统。

在基于 Debian 的系统上,您可以通过简单地运行来安装它

sudo apt-get install webmin
Run Code Online (Sandbox Code Playgroud)

完成后,转到http://localhost:10000并以 root 身份登录。您可能必须首先通过运行激活 root 帐户sudo passwd。然后,转到 System -> Bootup and Shutdown,滚动到页面末尾并单击“Shutdown”按钮:

在此处输入图片说明

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