it-swarm-ja.com

Webインターフェイスからサーバーをシャットダウンする方法

Webページのボタンをクリックして、サーバーをリモートでシャットダウンできるようにしたい。サーバーはUbuntu14.04.164ビットとpython Webアプリケーションを実行します。どちらかはまだ決めていませんが、ApacheまたはGunicornのいずれかになります。

常にマシンに物理的にアクセスできるとは限らないため、サーバーをリモートでシャットダウンできる必要があります。 ssh経由でログインして、そのためにpoweroffコマンドを実行する必要はないので、シャットダウンを開始するための一種のボタンをブラウザーに配置したいと思います。

私のアイデアは次のようなものです

  • シャットダウンプログラムを作成してroot所有者にし、スティッキービットを設定します。 python Webアプリケーションはそれを呼び出すことができます
  • どういうわけか、sudoersファイルを使用する
  • webappにファイルに書き込み、その(inotify)を監視してシャットダウンコマンドを送信させる

ベストプラクティス、または少なくともこれを行うための最も安全な方法は何ですか?

もちろん、Webインターフェースは保護され、偶発的なクリックから保護するメカニズムもあります。

2
wenzul

このためのスクリプトを作成する理由はありません。Pythonを介して作成できます。いずれにせよ、 SUIDを設定することはできません Linux上のスクリプトのビット。

最も簡単な方法は、pythonスクリプト内からshutdownコマンドを実行し、Webサーバーのユーザーにそれを実行する権利を与えることです。

  1. Webサーバーが実行するユーザーにshutdownを実行する権利を与えます。 visudoを実行し、次の行をファイルに追加します。

    www-data ALL=NOPASSWD:/sbin/shutdown
    

    サーバーはユーザーwww-dataとして実行されていると想定しています。そうでない場合は、適切に変更してください。

  2. Shutdownコマンドを実行する小さなスクリプトを作成し、それをcgi-binディレクトリの1つに保存します。

    #!/usr/bin/env python
    import os;
    os.system("Sudo shutdown -h now");
    
  3. スクリプトを実行可能にする

    Sudo chmod 755 /var/www/yourpage/cgi-bin/shutdown.py
    
  4. そのスクリプトを実行するボタンを提供するWebページを作成します。

    <HTML>
     <BODY>
        <FORM method="post" action="cgi-bin/shutdown.py"> 
            <INPUT TYPE="submit" VALUE="Submit" NAME="Submit"> 
        </FORM>
     </BODY>
    </HTML>
    

これで、サーバーをシャットダウンするボタンができました。


セキュリティに関する注意

このためにWebインターフェイスを設定する理由がわかりません。これは明らかに非常に危険です。そのページにアクセスできる人は誰でもコンピュータをシャットダウンできます。ただし、それを回避する方法はありません。何をするにしても、マシンをシャットダウンできるWebページが作成されます。つまり、ページを表示できる人なら誰でもシャットダウンできます。ので注意してください。

はるかに優れた代替手段は、別のマシンから次のようなものを実行することです。

ssh [email protected] shutdown -h now

これは単一のコマンドであり、Linuxシステムを使用している場合は、その1ワードのエイリアスを作成することもできます。 bashを使用している場合は、この行を~/.bashrcに追加するだけです。

alias shtdn='ssh [email protected] shutdown -h now'

そうすれば、shtdnを実行するだけで、リモートマシンを安全かつ確実にシャットダウンできます。


Webインターフェースを介してこれを実行できることを本当に主張する場合は、 webmin のようなものを試してみることをお勧めします。これは、フル機能のWebベースのサーバー管理スイートです。これは無料でオープンソースであり、インストールが非常に簡単で、コンピューターのさまざまな側面に直感的なGUIを提供します。これを使用して、SAMBA共有、Webサーバー、データベースなどを構成できます。また、これを使用してシステムをシャットダウンすることもできます。

Debianベースのシステムでは、実行するだけでインストールできます

Sudo apt-get install webmin

完了したら、http://localhost:10000に移動し、rootとしてログインします。最初にSudo passwdを実行してrootアカウントをアクティブ化する必要がある場合があります。次に、[システム]-> [起動とシャットダウン]に移動し、ページの最後までスクロールして、[シャットダウン]ボタンをクリックします。

enter image description here

これはセットアップが非常に簡単で、実装するアドホックソリューションよりも安全である可能性があります。

7
terdon