NUT UPS: остановка определенной службы при сбое питания

Кто-нибудь знает, как остановить службу при сбое питания с помощью NUT?
Я сделал такой скрипт, проблема в том, что у пользователя скрипта (NUT) нет прав root для остановки службы.
Я хочу остановить boinc-клиент сразу после сбоя питания, чтобы я не разряжал батареи и не запускал генератор до того, как это действительно необходимо.

#! /bin/bash
# UPS notify script.

if [$NOTIFYTYPE == "ONBATT"]
then

    /etc/init.d/boinc-client stop
fi

/usr/bin/mail -s "UPS '$UPSNAME': $NOTIFYTYPE" bla@shee.com <<END
$*
END

2 ответа

Это выглядит просто отлично.

У вас есть два варианта, один лучше, чем другой.

Первый и лучший вариант - использовать sudo. Разрешите неинтерактивному nopasswd sudo для пользователя, от имени которого выполняется сценарий (укажите путь к сценарию в качестве разрешенной команды), и введите sudo перед командой остановки.

Другой вариант - использовать разрешения Unix. Убедитесь, что владельцем скрипта является root, а его группа - это то, к чему у работающего пользователя есть доступ (возможно, вам придется создать новую группу). Сделайте это suid, предоставьте исполняемый доступ группе, и все готово (но убедитесь, что у группы нет прав на запись, иначе у вас будет уязвимость безопасности).

У вас может быть задание cron с правами root, которое проверяет файл /tmp/poweroutage каждые 10 секунд и уничтожает boinc, как только вы его видите. Я согласен, что работа над разрешениями может быть предпочтительнее.

Другие вопросы по тегам