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