我正在尝试使用 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 用户存在并且命令正在运行,当我从 shell 运行它时:
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 的方式。
当你写:
这给了系统一个参数列表,它把
作为一个单一的论点。现在 sudo 尝试使用 2 个空格查找用户“backuppc”。
你应该写:(2个参数)
或:(单参数,无空格)
通常空格是用来分隔参数的,但仅在由 shell(如 bash)解析时。
Icinga2 尝试以安全的方式运行命令,因此不应发生 shell 代码注入。
@lazyfrosh 的另一个答案完美地指出了这个问题。但有两点我想补充。
您的测试方式将始终有效,因为您以
root
. 如果你想测试用户nagios
是否能够运行脚本,那么首先登录nagios
,然后运行命令sudo
,看看它是否有效。考虑到安全性,您可以
nagios
为用户分配 sudo 权限,仅限于以用户身份运行脚本所需的权限backuppc
,仅此而已。就像是:nagios ALL=(backuppc) NOPASSWD: /usr/lib/nagios/plugins/check_backuppc
可能您需要根据脚本对其进行调整。
有关类似信息,请参阅此内容:Linux:如何允许普通用户“su - anotherUser”?