4

Web サーバーのバックグラウンドでアプリケーションを実行する必要がありますが、root 権限でアプリケーションを開始/停止できる必要があります。

これを行うには、ルート権限を持つサービスを実行して、アプリケーションを強制終了し、必要に応じて再起動できるようにしたいと考えています。

最後に、Web を介して間接的に制御できるように、Apache/PHP を介してサービスに start コマンドと kill コマンドを送信できるようにする必要があります。

Linux サービスを作成するにはどうすればよいですか?
この方法で Linux サービスと通信するにはどうすればよいですか?

前もって感謝します!

4

8 に答える 8

6

PHP スクリプトで exec コマンドを使用して、シェル ファイルを呼び出します。シェル ファイルは「setuser」ビットでセットアップできるため、(Web サーバーのパーミッションで実行するのではなく) その所有者として実行されます。

もちろん、非常に注意する必要があります-多くのテスト、監視など.

最後に、root としてではなく、専用ユーザーとして実行されているサービスについて考えてみましょう。たとえば、apache や他のほとんどのよくできたサービスのように。

追加: Re: Linux でサービスを実行しています。Linux のフレーバーによって異なります。失敗した場合にアプリ サービスが自動的に再起動され、ログが記録されることを確認するには、Runit をチェックアウトします。

https://web.archive.org/web/1/http://blogs.techrepublic%2ecom%2ecom/opensource/?p=202

http://smarden.org/runit

追加: setuid ビットの代わりに、sudo システムを使用するという Frank の提案 (コメント) の方が優れていると思います。

于 2009-06-12T02:39:24.360 に答える
3

だから、ここに3つの部分があります:

  • ルート権限のないWebサーバー
  • アプリケーション
  • アプリケーションを監視しているデーモン

問題は、デーモンを起動することではなく、デーモンを書き込み、root権限を必要とせずにWebサーバーからデーモンと通信することです。

デーモンは、バックグラウンドで起動される非対話型アプリケーションと同じくらい単純にすることができます。

# my_dameon &

私はphp開発者ではありませんが、メッセージキューとphpを検索して、beanstalkdを発見
ました。最初のページの例を見ると、次のことを行うために使用できるようです。

  • apache/phpはbeanstalkdにメッセージを送信します
  • デーモンはbeanstalkdからメッセージを読み取ります。コマンドに基づいて、バックグラウンドアプリケーションを起動または強制終了またはリロードします。

多くの言語のクライアントがあるので、phpでデーモンを書くことができますこの質問
をチェックすることもできます

于 2009-06-12T07:42:01.013 に答える
1

次のコマンドを受け入れるデーモンを作成できます。

  • daemon_name start
  • daemon_name stop
  • daemon_name restart
  • deamon_name reload

デーモンの起動は難しくありません。daemon_name startPHPスクリプトから実行するだけで実行されます。開始後、プロセスの PID をロック ファイルに書き込むことができます (後で停止、再起動、または再ロードするため)。デーモンはシグナルを処理する必要があります。

次に、PHP スクリプトで を呼び出すことができますdaemon_name stop。これにより、ロックファイルをチェックして実行中のデーモンの PID を取得し、実行中のデーモンによって処理されるシグナルを送信する新しいデーモンが起動されます。ロック ファイルを削除/クリアする必要があります。その後、stop開始デーモン/プロセスを終了できます。

于 2009-06-12T02:49:26.053 に答える
1

inetd、あらゆる種類のサービスを実行するように構成でき、ルートとして実行されます。次に、それ自体は root 特権ではないが、root で実行すると必要なタスクを実行する比較的単純なプログラムを作成できます。

于 2009-06-12T02:51:19.060 に答える
1

サービスとの通信に関しては、サービスの種類については言及されていませんでしたが、自分で記述していると仮定すると、最も一般的な方法は UNIX ソケットまたは MMAP を介して通信することです。本当にあなたのニーズに依存します。

そうそう、Linux システムの Web 管理用のアプリケーションが既にあることを指摘しておく必要があります。Webminは、必要なだけ制御できるように構成できる非常に優れたツールです。

于 2009-06-12T02:52:29.243 に答える
1

@shodanex が示唆するように、Beanstalkd を使用することは、Web フロントエンドを root として実行中のコマンド ライン ワーカーから切断するための優れた方法です。必要なものだけを実行するように簡単に設定できます。

ワーカーを実行するために、Pear の System_Daemonは、起動/停止/再起動を伴うデーモン実行スクリプトを生成して実行できます。

于 2009-10-28T21:16:21.123 に答える
0

もちろん

sudo apt-get install openbsd-inetd

必要なサービスを作成できます

于 2012-05-08T21:26:25.653 に答える
0

これを行うときは、非常に注意してください。ユーザーが Web から送信したデータを exec コマンドで使用しないでください。これにより、誰かがあなたのマシンで任意にコマンドを実行できるようになる可能性があります。

また、Frank は sudo ルールを使用するので、必要な権限だけで特定のコマンドを実行できます。そうすればより安全になります。

于 2009-06-12T02:48:17.570 に答える