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


14

Я использую последнюю версию 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команда запускает его как непривилегированный пользователь?

Ответы:


12

Был достигнут некоторый прогресс с выпуском версии 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"

доменное имя upstart.at является нежитью
контракт профессора Фалькена нарушен

Спасибо за это! В документах Upstart мне не было ясно, следует ли мне использовать Session Init / Jobs и т. Д.
Люк Хёрстен

4

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

sudo -u foouser foocommand

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.