序文
この文章はNagiosをインストールする際に危険な方法でセットアップしないように心がける事柄の短い全体像を目指しています。 この文章は新しいので、Nagiosを安全にすることに関する注意書きやコメントに付け加えるものがあれば、 nagios@nagios.orgここに送ってください。
NagiosをRootで運用するな!
Nagiosはrootで立ち上げる必要はありませんし、そうしてはいけません。init スクリプトでマシン起動時にNagiosをスタートさせる時でさえ、メイン設定ファイルのnagios_user と nagios_group 命令を使うことで起動後に権限を落とし、別のユーザ/グループとして実行させることができます。
rootでのアクセスが必要なイベントハンドラーやプラグインを実行する必要がある場合、sudoを試してみたくなるかもしれません。
必要な時だけ外部コマンドを有効にする
初期設定では外部コマンドは使えません。これは管理者が気が付かないうちに外部コマンドインターフェイスを使用可能な状態にしてしまい、第三者に使用されてしまうことを防ぐためにそうしています。イベントハンドラーやウェブインターフェイスからコマンドを発行するつもりなら、外部コマンドを有効にしなければなりませんが、そうでないのなら外部コマンドを停止させておくことを勧めます。
外部コマンドファイルに適切なパーミッションを設定する
外部コマンドを有効にする場合、/usr/local/nagios/var/rw ディレクトリに適切なパーミッションを設定するのを忘れないでください。Nagiosユーザ(通常 nagios)とウェブサーバのユーザ(通常 nobody)にだけコマンドファイルへ書き込む権限を与えてください。Nagiosを監視と管理タスク専用で、公開サーバじゃないマシンにインストールするのはよいことです。
公開サーバや複数ユーザのいるマシンにインストールしている場合、ウェブサーバのユーザにコマンドファイルへの書き込み権限を与えるとセキュリティの問題になります。とにかく、どのユーザにでも外部コマンドファイルを通してNagiosを制御させてはいけません。この場合、nagios ユーザにだけコマンドファイルへの書き込み権限を与え、CGIWrap みたいなものを使ってCGIをnobodyじゃなくてnagios として実行させるようにしてください。
外部コマンドファイルのパーミッション設定の導入はここ にあります。
CGIの認証要求
CGIへのアクセスに認証を要求することを強くお勧めします。一旦設定したら認証されたユーザの初期設定の権限のドキュメントを読み、必要に応じて特定のユーザに追加の権限を許可させてください。認証のセットアップと認証の権限の設定の導入はここ にあります。CGI設定ファイルでuse_authentication 命令を使いCGI認証を停止させると、コマンド CGI は外部コマンドファイルにコマンドを書かなくなります。何といっても世界中の人がNagiosを制御出来るようにしたいわけじゃないよね?
コマンド定義でフルパスを使う
コマンドを定義する際、実行するスクリプトやバイナリへのフルパスを指定するようにしてください。
$USERn$ マクロで繊細な情報を隠す
CGIはメイン設定ファイル と オブジェクト設定ファイルを読み込むので、それらに繊細な情報(ユーザ名、パスワードなど)をもたせたくないかもしれません。コマンド定義でユーザ名やパスワードを指定する必要がある時は、$USERn$ マクロ を隠蔽するのに使ってください。$USERn$ マクロは一つかそれ以上のリソースファイル で定義されています。CGIはりソースファイルを読もうとはしないので、それらにより制限的なパーミッション(600 か 660)はを設定することが出来ます。$USERn$ マクロをどのように定義するのかの実例として、Nagiosディストリビューションのベース部分にあるresource.cfgを見てください。
マクロから危険な文字を除外する
$HOSTOUTPUT$,$SERVICEOUTPUT$,$HOSTPERFDATA$ と $SERVICEPERFDATA$ が通知などで使われる前に危険な文字を除外するためにillegal_macro_output_chars 命令を使ってください。危険な文字はシェルによって解釈されるもので、セキュリティホールになりえます。サンプルとして$OUTPUT$ や $PERFDATA$ マクロにバックティック(`) 文字が存在すると、攻撃者はNagiosユーザとして権威あるコマンドを実行出来ます。(Nagiosをrootユーザで運用しない一つの良い理由です)