web-dev-qa-db-ja.com

Icinga2-不明なユーザー:backuppc

Icinga2でBackupPCを監視しようとしています。ダウンロードしました このプラグイン ですが、次のエラーが発生します。

enter image description here

これを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

1
intelis

問題は、コマンドをIcinga2に配置する方法です。

あなたが書くとき:

command = [ "Sudo", "-u  backuppc",  PluginContribDir + "/check_backuppc" ]

これにより、システムに引数リストが与えられます。

"-u  backuppc"

single引数として。ここで、Sudoは2つのスペースを使用してユーザー「backuppc」を見つけようとします。

次のいずれかを書く必要があります:(2つの引数)

"-u", "backuppc"

または:(スペースのない単一の引数)

"-ubackuppc"

通常、スペースは引数を区切ることを目的としていますが、シェル(bashなど)によって解析される場合に限ります。

Icinga2は安全な方法でコマンドを実行しようとするため、シェルコードインジェクションは発生しません。

4
lazyfrosch

@lazyfroshからの他の回答は、問題を完全に示しています。しかし、私が付け加えたいことが2つあります。

  • rootとしてログインしているため、テスト方法は常に機能します。ユーザーnagiosがスクリプトを実行できるかどうかをテストする場合は、最初にnagiosとしてログインし、次にSudoを使用してコマンドを実行して動作するかどうかを確認します。

  • セキュリティを考慮して、nagiosユーザーにSudo特権を割り当て、スクリプトをユーザーbackuppcとして実行するために必要なものだけに制限することができます。何かのようなもの:

    nagios ALL=(backuppc) NOPASSWD: /usr/lib/nagios/plugins/check_backuppc

スクリプトに従って調整する必要があるかもしれません。

同様の情報については、これを参照してください: Linux:通常のユーザーに "su --anotherUser"を許可する方法は?

1
Diamond