Icinga2 – 未知用户:backuppc

我试图用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 } 

当我从shell运行它时,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) 

问题是你把命令放入Icinga2的方式。

当你写:

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

这给系统一个参数列表,放

 "-u backuppc" 

作为一个单一的论点。 现在,sudo试图find用户“backuppc”,用2个空格。

你应该写:( 2个参数)

 "-u", "backuppc" 

或者:(单个参数不带空格)

 "-ubackuppc" 

通常,空格是用来分隔参数,但是只有在被shellparsing的时候(比如bash)。

Icinga2试图以一种安全的方式运行命令,所以不应该发生shell代码注入。

@lazyfrosh的另一个答案完全指出了这个问题。 但是我想补充两点。

  • 您正在testing的方式将始终工作,因为您是以root身份login的。 如果要testing用户nagios是否能够运行该脚本,那么首先以nagios身份login,然后使用sudo运行该命令以查看它是否有效。

  • 考虑到安全性,您可以将nagios用户分配给sudo privilage,仅限于以用户backuppc运行脚本所需的内容,仅此而已。 就像是:

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

可能你会需要根据脚本来调整它。

看到这个类似的信息: Linux的:如何让一个普通用户“su – anotherUser”?