NRPEは出力を読み取れませんが、なぜですか?


27

私はNRPEでこの問題を抱えています。これまでにネットで見つけたすべてのものは、私がすでに試したことを示しているようです。

# /usr/local/nagios/plugins/check_nrpe -H nrpeclient

与える

NRPE v2.12

予想通り。

手動でコマンドを実行すると(「nrpeclient」のnrpe.cfgで定義されているように、予期される応答が得られます)

nrpe.cfg:

command[check_openmanage]=/usr/lib/nagios/plugins/additional/check_openmanage -s -e   -b ctrl_driver=0 bat_charge

"Expected response"

しかし、Nagiosサーバーからコマンドを実行しようとすると、次のようになります。

# /usr/local/nagios/plugins/check_nrpe -H comxps -c check_openmanage
NRPE: Unable to read output

誰も私がこれで間違いを犯したかもしれない他の場所を考えることができますか?他の複数のサーバーで同じことを問題なく行いました。これに関して考えることができる唯一の違いは、このボックスがRHEL 5ベースであるのに対して、他のボックスはRHEL 4ベースであることです。

私がテストした上記の2ビットは、ほとんどの人がこの問題を抱えているときに示唆しているようです。

再起動すると、ログに奇妙なエラーが記録されることに言及する必要がありますnrpe

nrpe[14534]: Unable to open config file '/usr/local/nagios/etc/nrpe.cfg' for reading 
nrpe[14534]: Continuing with errors...
nrpe[14535]: Starting up daemon
nrpe[14535]: Warning: Daemon is configured to accept command arguments from clients!
nrpe[14535]: Listening for connections on port 5666 
nrpe[14535]: Allowing connections from: bodbck,combck,nam-bck

とはいえ、その/usr/local/nagios/etc/nrpe.cfgファイルを読み上げて、それについて話している内容を取得しています。



もう1つは閉じられているので、これを保持しましょう。
バート・デ・ヴォス

また、STDOUTが実際にフラッシュされることを確認してください。

回答:


35

権利に問題があります。

コマンドを次のように変更します。

command[check_openmanage]=sudo /usr/lib/nagios/plugins/additional/check_openmanage -s -e -b ctrl_driver=0 bat_charge

(sudoを追加)

次に、sudoersにnagios-userを追加します。

nagios ALL=(ALL) NOPASSWD:/usr/lib/nagios/plugins/additional/check_openmanage

または、単にファイルをchmodすることもできます...それも機能します。

CentOS、Red Hat、Scientific、またはFedoraを使用Defaults requirettyしている場合は、sudoersファイルで必ず無効にしてください。


1
@Bart De Vosですが、追加した答えはセキュリティホールになります> sudoersファイルに何かを追加すると、潜在的なセキュリティリスクにさらされます。すなわち、バッファオーバーフローを介して誰かが同じ場所に同じ名前のファイルをドロップできる場合、彼らはルートパスワードを知らずにそれを実行し、ボックスの制御を得ることができます:S何らかの方法で署名を置く方法はありませんか(SHA1またはMD5)sudoersファイル内のアプリケーションのそのタイプの攻撃を防止します。つまり、挿入されたファイルは同じ署名を持たないため、実行されません。[ここで最初のコメントを読む](crashatau.blogspot.co
アフマド

1
@ X-Ware:これは事実ですが、ここでバッファオーバーフローが悪用される可能性は非常にわずかです。ただし、発生を防ぐには、apparmor / SELinuxを使用する必要があります。それがこれらの物が存在する理由です。
バート・デ・ヴォス

私の場合、visudoに追加するユーザーはnagiosではなくnpreでした。私はまだBart De Vosのソリューションに従いましたが、/ var / log / secureアクセスログを表示すると、nrpeコマンドにアクセスしようとしているユーザーを確認できます。7月24日15:39:09ホスト名sudo:nrpe:ユーザーNOT sudoers; TTY = unknown; PWD = /; USER = root; COMMAND = / usr / lib64 / nagios / plugins / check_disk -w 20%-c 10%-p / dev / mapper / vg_uxp-lv_root

@AhmadHajjarあなたは本気ですか?誰かがnagios(20年前のシステム)をハッキングし、そのユーザーを使用してroot権限でファイルを実行すると思います。そして、誰かがその上にファイルをコピーするのを防ぐために、実行可能ファイルを読み取り専用としてルートとして実行するようにしたわけではないと思いますか?心配な場合は、sudoを使用する代わりに、check_openmanage実行可能ファイル自体をsetuidして、誰でも実行できるようにすることができます。
エヴァンラングロワ

11

簡単な答え:Bashプラグインを使用している場合は、どのインタープリターを使用すべきかを示すシェバンがあることを確認してください:#!/bin/bash


私は自分で書いたNagiosプラグインで同じ問題に直面していました。nagios次のステートメントを使用してユーザーとして実行している場合でも、ローカルで起動すると、スクリプトは期待どおりに実行されていました

$ sudo sudo -s -u nagios
$ /path/to/my/plugin.sh
STATUS: OK

しかし、Nagios3サーバーからNRPEを使用したリモート起動は失敗しました。

$ /usr/lib/nagios/plugins/check_nrpe -H my-nagios-client -c my_plugin
NRPE: Unable to read output

NRPEを介してスクリプトを実行すると、を介して実行するときと同じインタープリターを使用しなかったように見えたため、スクリプトにシェバンを追加することでこのケースを最終的に解決しましたsudo sudo -s -u nagios


rbenvでrubyスクリプトnagiosプラグインを使用するときにこの問題が発生しました。修正は、#!/bin/bash -el eval "$(rbenv init -)" /usr/lib/nagios/plugins/check_something $@
TrinitronX

1
素晴らしい答え!sudo -s -u nagiosにより、特定のプラグインからnagiosが出力を返せなかった理由を確認できました。どうもありがとうございます!
ufk

6

私の場合、問題は単純でした-ユーザーnagiosはスクリプトを実行できませんでした。chmodの後、動作し始めました。須藤は必要ありません。その悪さえ:)


1
本当の答えはこれです。Nagiosは、不正なアクセス許可、スクリプトのスペルミス、またはスクリプトが存在しないため、スクリプトを実行できませんでした。
ドループ

5

check_nrpeは、使用しているプラ​​グインがSELinuxでうまく機能しなかったため、ローカルでのチェックにもかかわらず「NRPE:出力を読み取れません」を取得していました。無効にして、ファイルのコンテキストを必ず削除してください。

$ ls -l check_om_storage
-r-xr-xr--. 1 root nrpe 3808 Feb 27 17:54 check_om_chassis
$ setfattr -x security.selinux check_om_storage
$ ls -l check_om_chassis 
-r-xr-xr-- 1 root nrpe 3808 Feb 27 17:54 check_om_chassis

一般的に、selinuxを無効にすることはテストのために良い考えではないかもしれませんが、これはまだ有効です。
デニス・ノルティ

4

パス、権限、selinux、iptablesを確認してください。

私の場合、client:nrpe.cfgでパスの問題が発生しました。check_*プラグイン名へのコマンドパスを再確認してください。これらは、パス名として(lib / local)(libexec / plugins)を混乱させる可能性があります。間違ってパッケージ化したnrpe cfgファイルからパスをヤンクし、コマンドを作成しました。make installまたはyumプラグインのインストールは、これらをdifftディレクトリに配置します。

カンマネット:/ usr / local / nagios / libexec / check_disk

realpath:/ usr / lib / nagios / plugins / check_disk

サーバーから、ファイアウォールの問題ではないことを確認でき、5666ポートにtelnetを実行し、ブランケットcheck_nrpeを実行して、戻り値としてステータスを取得できました。コマンドをローカルで実行できましたが、nrpeのクライアントのパスはnrpe.cfgで間違っていました。


4

私の場合、1つのプラグインだけが失敗し、他のいくつかのプラグインは正常に機能しました。それはローカルの問題であることが判明しました。

プラグインがcheck_mem.shあり、それMemはの出力でgrepを実行しましたfree。ただし、システム全体のLOCALEはのSpeicher代わりに(ドイツ語)を返したMemため、受信した値はすべて空の文字列でした。


2
ラッシュ、SFへようこそ!私の意見では、これは優れた最初の回答です。要するに、簡潔に言えば、すでにここにある回答のコレクションに何か新しいものを追加します。私からの+1であり、将来、このような回答をもっと読みたいと思います(私の小さなフォーマット編集を許してくれることを望みます)。
MadHatterは、

2

これは権限の問題であり、スクリプトの実行権を与えるだけで問題ありません。

ここに例を示します: Before / Remote host

[root@puppet1 nrpe.d]# ls -l /usr/lib/nagios/plugins/check_mem.sh
-rwxr--r-- 1 root root 1598 Jul  7 10:55 /usr/lib/nagios/plugins/check_mem.sh

NRPEサーバー

[root plugins]# ./check_nrpe -H 172.19.9.200 -c check_mem_vb
NRPE: Unable to read output

後:リモートホスト

[root@puppet1 plugins]# chmod o+x /usr/lib/nagios/plugins/check_mem.sh

[root plugins]# ./check_nrpe -H 172.19.9.200 -c check_mem_vb
Memory: OK Total: 1980 MB - Used: 139 MB - 6% used|Total=2076479488;;;Used=145076224;;;Cache=1528111104;;Buffer=211890176;;;

問題が解決しました。


1
良い答えですが、chmod o + xのように、すべてのユーザーがcheck_nrpeを実行できるようにすることは、システムの構成/アクセス/使用方法によっては潜在的なセキュリティリスクになる可能性があることに注意してください。
オースティン

1

私の場合、監視対象のログファイルはroot:admによって所有されていたため、nagiosユーザーをadmグループに追加するとcheck_logコマンドが成功しましたが、監視対象ホストで直接実行された場合のみです。監視対象ホストでnagios-nrpe-serverサービスを再起動するまで、Nagiosサーバーでcheck_nrpeを使用して失敗し続けました。たとえば

service nagios-nrpe-server restart

そのため、NRPEのアクセス許可の変更を有効にするには、明らかにサービスを再起動する必要がありましたが、これを理解するにはしばらく時間がかかりました。


1

カスタムNRPEプラグインの場合は、終了値とともに出力を必ず出力してください。スクリプトからの出力がない場合、NRPEは「NRPEは出力を読み取れません」と文句を言います。nrpe.cfgでデバッグを有効にして、このエラーを観察できます。


1

私の場合、問題はselinux関連でした(RHEL 6.5を実行すると、selinuxは強制に設定されます)。

yumを使用してnagios-plugins- *をインストールすると、/ usr / lib64 / nagios / pluginsにプラグインファイルが作成されます。これらのプラグインファイル(ls -lZ)のfcontextをチェックすると、ファイルのコンテキストタイプが「nagios_system_plugin_exec_t」に設定されていることがわかります。これは、check_nrpeが予期するコンテキストタイプです。

私の場合、「vi」を使用してカスタムスクリプト「check_mem.sh」を作成しました。結果のファイルのコンテキストタイプは「lib_t」に設定されていました。これにより、nrpeは「NRPE:出力を読み取れません」を出力していました。

ファイルコンテキストを「nagios_system_plugin_exec_t」に変更すると、問題が解決しました。

chcon -t nagios_system_plugin_exec_t /usr/lib64/nagios/plugins/check_mem.sh

通常のselinuxのトラブルシューティングでもこの問題が指摘されていました(/var/log/audit/audit.logを確認します)が、もちろん最後に考えたのはそれでした

編集:chconはコンテキストを一時的に変更するだけです。永続的に変更するには semanage fcontext -a -t nagios_system_plugin_exec_t /usr/lib64/nagios/plugins/check_mem.sh restorecon -vF /usr/lib64/nagios/plugins/check_mem.sh


0

Nagiosプラグインをインストールしていないか、NRPEがそれらを見つけられないか、アクセスできない可能性があります。

コマンドをSudoersに追加する必要はありませんでした。コマンドがNagiosユーザーによって所有され、読み取り可能であることを確認してください。


0

ローカルディレクトリにプラグインを追加する必要があると思います/usr/lib64/nagios/plugins/*。私はあなたと同じ問題を抱えていたので、この解決策で解決できます。


0

あなたが書く問題がありました。私が実行したテストはperlからのものでした。この行をファイル/etc/nagios/nrpe.cfgに追加して機能させます。

command [check_memory] = /usr/bin/perl /usr/lib64/nagios/plugins/check_memory -w 75-c 90 

0

多くのcheck_commandsの例が記載されたNRPEエージェントのインストールと設定全体をカバーする本当に素晴らしい記事があります。新しいサーバーにNRPEをインストールする必要があるときはいつでもこの記事を使用します。さらに、ページの最後に、(設定した変数に基づいて)NRPEを自動的にインストールして構成するクールなスクリプトを見つけることができます。記事はこちらです。


リンクが更新されました
イタイガノ

0

これは通常、NRPEサーバーがnagiosではなくユーザーnrpeで起動されたときに発生します。

ファイルnrpe_user内の値をnagiosに変更/etc/nagios/nrpe.cfgすると、問題が解決するはずです。

nrpe_group必要に応じて、あまりにも変更することができます。


0

チェックすべきもう1つのことは、コマンドがコマンドのsudo -u <another user>実行に使用されている場合、libexecディレクトリ(およびその上のディレクトリ)は、sudoされているユーザーが読み取り可能でなければならないということです。

たとえば、コマンドが次の場合:

command[check_tomcat]=sudo -u tomcat /usr/local/nagios/libexec/check_tomcat ...

Tomcatユーザーはそのファイルにアクセスできる必要があります。

これを修正する1つの方法は次のとおりです。

chmod 0775 /usr/local/nagios/
chmod 0755 /usr/local/nagios/libexec

最後の部分を実行可能ファイルが存在する場所に置き換える


0

私は同じ問題を抱えていましたが、監視対象のマシンでnagiosプロセスを強制終了することで解決できました。

ps -ef | grep nagios
kill -9 [NagiosProcessNumber]
/etc/init.d/nagios-nrpe-server start

その後、すべてうまくいった。


0

FreeBSDでこの問題が発生しました。頭を壁に1時間ぶつけた後、問題は/usr/local/nagios/etc/nrpe.cfgsudoの間違った場所を指していることだと気づきました。

sudoコマンドを実行するための正しい場所を見つけるには、次を実行します。

# whereis sudo

次に、nrpe.cfgのcommand_prefixを次から変更しました。

command_prefix=/usr/local/sudo

に:

command_prefix=/usr/local/bin/sudo

その後、実行service nrpe restartし、問題が解決しました。

他のオペレーティングシステムでも同様の問題が発生する可能性がありますが、他の考えられるすべてのアクセス許可の問題をチェックしても、この問題が発生するかどうかを確認するだけです。



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.