Icinga2でBackupPCを監視しようとしています。ダウンロードしました このプラグイン ですが、次のエラーが発生します。
これをcommands.conf
に追加しました
object CheckCommand "backuppc" {
import "plugin-check-command"
command = [ "Sudo", "-u backuppc", PluginContribDir + "/check_backuppc" ]
arguments = {
"-w" = "$warn_lvl$"
"-c" = "$crit_lvl$"
"-v" = "$verbose$"
}
}
これは\etc\sudoers
に追加されました
Defaults:nagios !requiretty
nagios ALL=(ALL) NOPASSWD: /usr/lib/nagios/plugins/check_backuppc
そしてこれはservices.conf
に追加されました
apply Service "backuppc" {
import "generic-service"
check_command = "backuppc"
vars.warn_lvl = 14
vars.crit_lvl = 30
vars.verbose = ""
assign where Host.name == NodeName
}
シェルから実行すると、Backuppcユーザーが存在し、コマンドが機能しています。
root@backup:/# Sudo -u backuppc ./usr/lib/nagios/plugins/check_backuppc
Use of qw(...) as parentheses is deprecated at /usr/share/backuppc/lib/BackupPC/Storage/Text.pm line 302.
Use of qw(...) as parentheses is deprecated at /usr/share/backuppc/lib/BackupPC/Lib.pm line 1425.
BACKUPPC CRITICAL ( 1 OK, 0 UNKNOWN, 0 WARNING, 1 CRITICAL)
Ty
問題は、コマンドをIcinga2に配置する方法です。
あなたが書くとき:
command = [ "Sudo", "-u backuppc", PluginContribDir + "/check_backuppc" ]
これにより、システムに引数リストが与えられます。
"-u backuppc"
single引数として。ここで、Sudoは2つのスペースを使用してユーザー「backuppc」を見つけようとします。
次のいずれかを書く必要があります:(2つの引数)
"-u", "backuppc"
または:(スペースのない単一の引数)
"-ubackuppc"
通常、スペースは引数を区切ることを目的としていますが、シェル(bashなど)によって解析される場合に限ります。
Icinga2は安全な方法でコマンドを実行しようとするため、シェルコードインジェクションは発生しません。
@lazyfroshからの他の回答は、問題を完全に示しています。しかし、私が付け加えたいことが2つあります。
root
としてログインしているため、テスト方法は常に機能します。ユーザーnagios
がスクリプトを実行できるかどうかをテストする場合は、最初にnagios
としてログインし、次にSudo
を使用してコマンドを実行して動作するかどうかを確認します。
セキュリティを考慮して、nagios
ユーザーにSudo特権を割り当て、スクリプトをユーザーbackuppc
として実行するために必要なものだけに制限することができます。何かのようなもの:
nagios ALL=(backuppc) NOPASSWD: /usr/lib/nagios/plugins/check_backuppc
スクリプトに従って調整する必要があるかもしれません。
同様の情報については、これを参照してください: Linux:通常のユーザーに "su --anotherUser"を許可する方法は?