Як запустити роботу як непривілейований користувач у Upstart?


14

Я використовую останню версію для запуску для ubuntu 10.4 LTS. на початку запущено прапор ядра --debug.

Я створюю власну конфігурацію роботи для демона nzbget. В основному, це завдання має сценарій перед запуском, який монтує файлову систему, сценарій після запуску, який відключає файлову систему та exec nzbget -Dрядок.

Проблема полягає в тому, що демон nzbget повинен працювати як неприхований користувач. Ця функція вже включена в nzbget. Дійсно, коли я запускаю з консолі, sudo nzbget -Dпроцес працює як непривілейований користувач. Але коли я запускаю завдання на початку роботи з exec nzbget -Dрядком, процес nzbget -D працює як root. Як сказано в початковій кулінарній книзі, я спробував використовувати користувача su -c "nzbget -D", а також як start-stop-демон, так і без строфи очікування, як пропонувалося. Але для обох команд, як upstart відстежує неправильний PID, я думаю, що він бачить основний процес вбитим (завдяки журналам upstart) наприкінці процесу запуску, і, таким чином, він запускає сценарій після процесу, який я не хочу.

=> Як я можу це зробити правильно? Як це так, що exec nzbget -Dкоманда upstart змушує процес запускати як rootsudo nzbget -D команда змушує його запускатись як неприхований користувач?

Відповіді:


12

Був певний прогрес у випуску версії 1.4 .:

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

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

В іншому випадку використовуйте suабо sudoу своїй команді exec так:

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

Вони обоє роблять майже те саме, тому вибирайте те, з чим ви найщасливіші. Отже, використовуючи вашу команду example:

exec sudo -u me "nzbget -D"

доменне ім’я upstart.at нежить
договір проф.

Дякую за це! Не було мені зрозуміло в документах Upstart, чи варто мені використовувати сеанс Init / Jobs etc.
Luke Hoersten

4

Я пропоную використовувати sudo із таким синтаксисом:

sudo -u foouser foocommand

це запускає команду foocommand як foouser користувача.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.