注釈
以下の方法はノーマルユーザアカウント(つまり、公開マシンではない)を持たない監視/管理者boxにNagiosをインストールしているものと想定しています。もし、Nagiosをマルチユーザー/公開マシンにインストールしている場合、外部コマンドファイルにより排他的なパーミッションを与えて、CGIを特定のユーザで実行するようCGIWrapの様なものを使用する事をお勧めします。 私はあなたがそうしたくはないだろうと推測します。Nagiosのセキュリティに関してより詳しい情報はここにあります。
序文
人々が抱えている一般的な問題の1つには外部コマンドファイルの適切なパーミッションの設定だと思います。/usr/local/nagios/var/rwディレクトリ(もしくは メイン設定ファイルのcommand_file ディレクティブで指定したポイントのどこであっても)に適切なパーミッションを設定する必要があります。ここではその方法を述べます。Note: 以下の方法はroot権限が必ず必要です・・・
ユーザとグループ
初めにウェブサーバがどのユーザで稼働しているか調べてください。多くのシステムではnobodyです。ただし、これは稼働しているOS/ディストリビューションに依存しています。 同様に、Nagiosもどのユーザーで稼働しているか知っている必要があります。- これはメインコンフィグファイルのnagios_userで設定しています。
次に、ウェブサーバを稼働させているユーザとNagiosを稼働させているユーザが含まれるグループを作成します。このグループを'nagiocmd'グループと称しましょう(望むなら名前は変更できます)。RedHat Linuxなら、以下のコマンドで新しいグループを作成できます(他のシステムならおそらく違うやり方でしょう):
/usr/sbin/groupadd nagiocmd
次に、ウェブサーバユーザ(nobodyもしくはapacheとか)とNagiosユーザ(nagios)を新しく作成したグループに追加します。
/usr/sbin/usermod -G nagiocmd nagios
/usr/sbin/usermod -G nagiocmd nobody
ディレクトリを作成する
次に、コマンドファイルを置くディレクトリを作成します。 デフォルトでは、/usr/local/nagios/var/rwですが、command_fileで異なるディレクトリの指定は可能です。
mkdir /usr/local/nagios/var/rw
ディレクトリのパーミッションの設定
次に、コマンドファイルを置くディレクトリのオーナーを変更します・・・
chown nagios.nagiocmd /usr/local/nagios/var/rw
Nagiosユーザにはこのディレクトリに全権限を与えます・・・
chmod u+rwx /usr/local/nagios/var/rw
作成したグループにはこのディレクトリに全権限を与えます・・・
chmod g+rwx /usr/local/nagios/var/rw
このディレクトリに作成されるファイルにはディレクトリのグループ権限が継承されるようにするため、以下にグループのスティッキービットを立ててください・・・
chmod g+s /usr/local/nagios/var/rw
パーミッションの検証
'ls -al /usr/local/nagios/var'を実行して、rw/サブディレクトリのパーミッションを確認してください。それは以下のような感じになるはずです:
drwxrws--- 2 nagios nagiocmd 1024 Aug 11 16:30 rw
nagiosユーザはディレクトリのオーナーで、nagiocmdはディレクトリのグループオーナーであることに注意してください。そのディレクトリに対しnagiosユーザーはrwx権限を持ち、nagiocmdグループはrw権限を持っています。同様に、グループスティッキービットが有効になっていることにも注意してください。これで良いはずです・・・
ウェブサーバの再起動
外部コマンドファイルを含むディレクトリに適切なパーミッションを設定したら、ウェブサーバを再起動させます。これを行わなければたとえnagiocmdグループにapacheのユーザを追加していても外部コマンドファイルへapacheが書き込みできないでしょう。
追加情報...
もし、configureスクリプト実行時に--with-command-grp=somegroupオプションを使用すると、'make install-commandmode'を実行したときに自動的に適切なパーミッションがそのディレクトリに設定することができます。