web-dev-qa-db-ja.com

nrpeユーザーはlsofを使用してリモートでスクリプトを適切に実行できません。netstatは機能します

Nagiosがリモートサーバーのポートをチェックするための簡単なスクリプトを作成しました。もともと、私はlsofを使おうとしました。

#!/bin/bash

RESULT=$(lsof -i :8080 | grep LISTEN)

if [ -n "$RESULT" ]
  then
  echo "$RESULT"
exit 0
  else
   echo "Check application port is down"
exit 2
fi

ローカルマシンで、nagiosユーザーはスクリプトを実行して実行し、期待される出力を得ることができます。しかし、リモートでは、check_nrpeを使用して、常にelseエコーが返されました

Check application port is down

スクリプトをローカルで実行すると言ったように、正しく機能しました

Nrpeユーザーはスクリプトを実行するために必要なすべての権限を持っていました。SELinuxは許可モードでしたが、私はそれを機能させることができませんでした。そこで、RESULT行をnetstatを使用するように変更しました。

RESULT=$(netstat -anp | grep ":8080" | grep LISTEN)

そして、check_nrpeをリモートで使用して期待される応答を取り戻すことができました。したがって、これはcheck_nrpelsofに関するある種の問題であると思います。しかし、私はログに何も見つけることができませんでした。

これをlsofで正しく機能させるためのアイデアや提案はありますか?

2
user53029

Root以外のユーザーには、lsof -iからの出力は表示されません。 (SELinuxなしのDebian8およびCent7で確認済み。)

これをnagiosチェックで使用する場合は、Sudoを介してlsofを実行する必要があります。

Sudoがttyを要求するように構成されている場合(CentOSのデフォルトである可能性があります)、次のようなことができます。

Defaults:nagios !requiretty
nagios ALL=NOPASSWD:/usr/bin/lsof

必要に応じてnagiosnrpeに置き換え、必要に応じてパスをlsofに変更します。

3
Keith