Я пытаюсь контролировать BackupPC с помощью Icinga2. Я скачал этот плагин но я получаю следующую ошибку.
Я добавил это в 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
Проблема в том, как вы помещаете команду в Icinga2.
Когда вы пишете:
command = [ "sudo", "-u backuppc", PluginContribDir + "/check_backuppc" ]
Это дает системе список аргументов, который помещает
"-u backuppc"
как не замужем аргумент. Теперь sudo пытается найти пользователя backuppc с двумя пробелами.
Вы должны либо написать: (2 аргумента)
"-u", "backuppc"
Или: (Один аргумент без пробела)
"-ubackuppc"
Обычно пробелы предназначены для разделения аргументов, но только при синтаксическом анализе оболочкой (например, bash).
Icinga2 пытается выполнить команду безопасным способом, чтобы инъекции кода оболочки не произошло.
Другой ответ от @lazyfrosh отлично указывает на проблему. Но я хотел бы добавить две вещи.
То, как вы тестируете, всегда будет работать, если вы вошли в систему как root
. Если вы хотите проверить, nagios
может запустить скрипт, затем сначала войдите как nagios
а затем запустите команду, используя sudo
чтобы посмотреть, работает ли это.
С точки зрения безопасности вы можете назначить nagios
пользователь права sudo ограничены тем, что необходимо только для запуска скрипта от имени пользователя backuppc
и больше ничего. Что-то вроде:
nagios ALL=(backuppc) NOPASSWD: /usr/lib/nagios/plugins/check_backuppc
Возможно, вам нужно будет настроить его по сценарию.
См. Это для аналогичной информации: Linux: Как разрешить обычному пользователю «su - anotherUser»?