システム監視ツールのNagiosには、コマンドやイベントを外部アプリケーションから受け取る強力な機能が装備されている。通常こうした外部コマンドの送信元となるのは、イベントハンドラないしNagiosのWebインタフェースである。外部コマンドが最も役立つ状況としては、各自のシステムで用いるハンドラを作成する場合や、Nagiosと情報交換をさせる外部アプリケーションを構築する場合を想定すればいい。
本稿はPackt Publishingより最近出版された『Learning Nagios 3.0』からの抜粋である。
外部コマンドパイプとは、Nagiosがメッセージの受信に使用するファイルシステム上に作成されたパイプファイルのことである。ここでの通信には特別な認証や権限は必要なく、唯一課される要件は、コンパイル時のlocalstatedirオプションにて指定されたディレクトリにあるパイプファイルrw/nagios.cmdへの書き込み権限を有していることだけだ。
一般に外部コマンドファイルへの書き込み権限は、所有者およびnagioscmdで使用される通常のグループに対して与えられている。Nagiosデーモンへのコマンド送信を許可したいユーザについては、このグループへの追加登録だけをしておけばいい。
コマンドパイプには、結果を返す機能が用意されていないという欠点が存在する。これは致命的な不備ではないものの、Nagiosに対してquery系のコマンドを送信することはできない。つまりコマンドパイプによる操作だけでは、Nagiosに渡したコマンドが既に処理済みであるのか、すぐに処理されるのかといった情報を確認できないのだ。ただし、Nagiosのログファイルを読み取ることはできるので、その情報を基にすれば、渡したコマンドが正常に解析されていたかを確認することはできる。
Webインタフェースを介したNagiosの制御は、外部コマンドパイプを用いて行うようになっている。Webインタフェースから行うNagiosへのコマンド送信や設定変更に、その他の機構が介在することはない。
Nagiosデーモンからは、どのユーザが何の操作を実施可能かを明確に区別することはできない。よって、リモートユーザによる外部コマンドパイプを用いたコマンド送信を実装する場合は、権限を有さないユーザによるNagiosへの危険なコマンド送信を防止する認証機構を設けておく必要がある。
