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