スポンサーサイト 

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Nagios/Web I/Fからコマンド実行でエラー 

NagiosのWeb I/Fでコマンド実行させようとするとエラーが出るので直したい。

こんな感じ

Error: Could not open command file '/usr/local/nagios/var/rw/nagios.cmd' for update!

Nagiosデーモンは適切なユーザ/グループで実行している。「open出来ねー」と言われたファイル(パイプ)も、適切な権限。nagios用グループを作ってapacheユーザとnagiosユーザを含めている。

# ps -eo pid,user,rgroup,command | grep nagios
3254 nagios nagios /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg
# ls -alF /usr/local/nagios/var/rw/
合計 8
drwxrwsr-x 2 nagios nagcmd 4096 2月 17 09:03 ./
drwxrwxr-x 4 nagios nagcmd 4096 2月 17 09:26 ../
prw-rw---- 1 nagios nagcmd 0 2月 17 09:03 nagios.cmd|
# grep nagcmd /etc/group
nagcmd:x:201:apache,nagios
#

けど、apacheはnobodyで実行されているのは良いのかなぁ?

# ps -ef |grep httpd
root 3280 1 0 09:04 ? 00:00:00 /usr/sbin/httpd
nobody 3282 3280 0 09:04 ? 00:00:00 /usr/sbin/httpd
nobody 3283 3280 0 09:04 ? 00:00:00 /usr/sbin/httpd
nobody 3284 3280 0 09:04 ? 00:00:00 /usr/sbin/httpd
nobody 3285 3280 0 09:04 ? 00:00:00 /usr/sbin/httpd
nobody 3286 3280 0 09:04 ? 00:00:00 /usr/sbin/httpd
nobody 3287 3280 0 09:04 ? 00:00:00 /usr/sbin/httpd
nobody 3288 3280 0 09:04 ? 00:00:00 /usr/sbin/httpd
nobody 3289 3280 0 09:04 ? 00:00:00 /usr/sbin/httpd
nobody 3307 3280 0 09:05 ? 00:00:00 /usr/sbin/httpd
root 3583 3168 0 09:30 pts/2 00:00:00 grep httpd
#

ここが原因ぽいんだけど。nobody権限で実行していたら駄目だよねぇ。試しにユーザnobodyをグループnagcmdへ追加してapacheを再起動して試してみる。

# usermod -a -G nagcmd nobody
# grep nagcmd /etc/group
nagcmd:x:201:apache,nagios,nobody
# service httpd restart
httpd を停止中: [ OK ]
httpd を起動中: [ OK ]
#

ありゃー、うまくいっちゃったよ。でもnobodyをnagcmdに追加しておくわけにはいかないよね...どうするのが普通なわけ? みじんこれべるとかいくつかのサイトを見ると

chmod o+rw /usr/local/nagios/var/rw/nagios.cmd

って書いてあるけど、それって駄目じゃん。正解は明らかにapacheのCGI実行ユーザをnagcmdへ参加させておくことで、しかもそれをnobodyではなくてapache専用にすることだよね。httpd.confで指定すれば出来るんだっけ? httpdの親プロセスはroot権限なのだけど、それは実際のコネクションを待ち受ける子プロセスを作るだけしかしてくれなくて、子プロセスはnobody権限なので頑張ったってapache権限に昇格したりしないぜ? ということでapacheの実行ユーザをnobodyからapacheへ変更することで対応することとした。
/etc/httpd/conf/httpd.confをこんな感じに書き換えてapacheを再起動。

# egrep -e '^#?(User|Group)' /etc/httpd/conf/httpd.conf
User apache
Group apache
#User nobody
#Group nobody
#service httpd restart
(略)
#


これでうまくいった。

ちょっと気になるのはapacheの実行ユーザを変更したのだけれど、それで不具合が出ていないかどうかはチェックすらしていないことだね。あとでnobody権限での実行を前提にしたソフトをいじる必要が出てきたらどうするんだろう、nagiosの方で妥協してchmod o+rw nagios.cmdするのかしら。

コメント

コメントの投稿















管理者にだけ表示を許可する

トラックバック

この記事のトラックバックURL
http://haginov.blog35.fc2.com/tb.php/213-9fcf9b13

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。