Webサーバー経由でコマンドを受け付けるLinuxサービスを作成するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/984748

質問

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

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

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

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

前もって感謝します!

役に立ちましたか?

解決

シェルファイルを呼び出すために、あなたのPHPスクリプトでのexecコマンドを使用します。それは(代わりに、Webサーバの権限で実行されているの)その所有者として実行されますので、シェルのファイルは、「SETUSER」ビットで設定することができます。

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

最後に、専用のユーザーとしてではなく、rootとして実行しているサービスについて考えます。 Apacheのような例や他のほとんどのよくやっサービスが行います。

を追加しました:再:Linuxでのサービスを実行しています。 Linuxの味に依存します。あなたのアプリサービスが自動的にそれが失敗した場合に再スタート、プラスされることを確認したい場合は、ロギング、チェックアウト値Runitます:

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

http://smarden.org/runitする

を追加しました:代わりにsetuidビットを、私はsudoのシステムを使用しての(コメントで)フランクの提案が優れていると思います。

他のヒント

つまり、ここには 3 つの部分があります。

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

問題はデーモンを起動することではなく、ルート権限を必要とせずにデーモンを作成し、Web サーバーからデーモンと通信することです。

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

# my_dameon &

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

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

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

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

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

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

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

私はあなたのサービスのすべての種類を実行するように設定することができinetd、見なければならないと思うし、それがルートとして実行されます。 rootで実行するときには、あなたが完了必要なタスクを実行し、ルート特権が、それ自体ではない比較的単純なプログラムを書くことができます。

限りのサービスと通信して、あなたはそれがサービスの種類を言いませんでした、しかし、あなたが自分で最も一般的な方法でそれを書いていると仮定すると、UNIXソケットまたはMMAP経由comunicateことであろう。本当にあなたのニーズによって異なります。

そうそう、LinuxシステムのWeb管理のためのアプリケーションが既に存在している指摘しなければなりません。 のWebmin には、必要なだけか、わずかな制御を許可するように設定することができ、本当に良いものです。

@shodanexが示唆するように、

、Beanstalkdを使用して実行-ASルートコマンドライン作業者からのウェブフロントエンドを切断するための優れた方法であろう。これは自明のみ必要とされた正確に何を実行するように設定することができます。

のワーカーを実行するには、梨のSystem_Daemon には、デーモン・実行中のスクリプトを生成して実行することができます開始/停止/再起動してます。

これは非常に非常に気をつけてやってたとき。 EXECコマンドでウェブからのデータを提出し、任意のユーザーを使用しないでください。これは、誰かが任意にあなたのマシン上でコマンドを実行する可能性があります。

あなたが必要な権限が、他には何もして、その特定のコマンドを実行できるように

また、私は、第二のフランクはsudoのルールを使用します。それはそのように、より安全になります。

もちろん、

sudo apt-get install openbsd-inetd

あなたが望むサービスを作成することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top