Как мне начать работу как непривилегированный пользователь в Upstart?

Я использую последнюю версию для Ubuntu 10.4 LTS. upstart запускается с флагом ядра --debug.

Я делаю пользовательскую конфигурацию задания для демона nzbget. По сути, это задание имеет сценарий предварительного запуска, который монтирует файловую систему, сценарий пост-запуска, который монтирует файловую систему, и строку exec nzbget -D.

Проблема в том, что демон nzbget должен работать как непривилегированный пользователь. Эта функция уже включена в nzbget. Действительно, когда я запускаю из консоли sudo nzbget -D, процесс запускается как непривилегированный пользователь. Но когда я запускаю задание upstart со строки exec nzbget -D, процесс nzbget -D запускается от имени пользователя root. Как говорилось в готовой кулинарной книге, я пытался использовать пользователя su -c "nzbget -D", а также start-stop-daemon без ожидаемого строфа, как было рекомендовано. Но для обеих команд, поскольку upstart отслеживает неверный PID, я думаю, он видит основной процесс как завершенный (из-за журналов upstart) в конце процесса запуска и, таким образом, запускает сценарий пост-процесса, который мне не нужен.

=> Как я могу сделать это правильно? Как получается, что команда exec nzbget -D upstart запускает процесс от имени пользователя root, а команда sudo nzbget -D запускает его от имени непривилегированного пользователя?

14
задан 15 December 2011 в 03:25

2 ответа

Был достигнут некоторый прогресс в выпуске версии 1.4.:

Новые разделы «setuid» и «setgid», позволяющие запускать системные задания под указанным uid / gid, соответствующим заданному имя / группы.

Вы можете получить его со страницы на странице LaunchPad , но (странно), я не вижу PPA, поэтому вам, возможно, придется скомпилировать его самостоятельно.

В противном случае, используйте su или sudo в вашей команде exec следующим образом:

su -c "<commands>" <username>
sudo -u <username> <commands>

Они оба делают одно и то же, поэтому выбирайте, что вам больше нравится. Итак, используя ваш пример команды:

exec sudo -u me "nzbget -D"
0
ответ дан 15 December 2011 в 03:25

Я предлагаю использовать sudo со следующим синтаксисом:

sudo -u foouser foocommand

для запуска команды foocommand от имени пользователя foouser.

0
ответ дан 15 December 2011 в 03:25

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

Похожие вопросы: