Como inicio trabalhos como um usuário não privilegiado no Upstart?

14

Estou usando a última versão inicial do ubuntu 10.4 LTS. O upstart é lançado com o sinalizador --debug kernel.

Estou fazendo uma configuração de trabalho personalizada para o daemon nzbget. Basicamente, este trabalho possui um script de pré-inicialização que monta um sistema de arquivos, um script de pós-inicialização que desmonta o sistema de arquivos e uma exec nzbget -Dlinha.

O problema é que o daemon nzbget precisa ser executado como um usuário não privilegiado. Esse recurso já está incluído no nzbget. De fato, quando eu corro do console, sudo nzbget -Do processo é executado como um usuário não privilegiado. Mas quando inicio o trabalho inicial com a exec nzbget -Dlinha, o processo nzbget -D é executado como raiz. Como dito no livro de receitas inicial, tentei usar o usuário su -c "nzbget -D" e também iniciar-parar-daemon, ambos sem a estrofe de expectativa, conforme recomendado. Mas para ambos os comandos, como o upstart rastreia o PID errado, eu acho, ele vê o processo principal como morto (devido a logs iniciais) no final do processo de inicialização e, portanto, lança o script pós-processo que eu não quero.

=> Como posso fazer certo? Como é que exec nzbget -Do comando upstart faz com que o processo seja executado como root, enquanto o sudo nzbget -Dcomando faz com que seja executado como usuário não privilegiado?

ashe
fonte

Respostas:

12

Houve algum progresso com o lançamento da versão 1.4 .:

Novas sub-rotinas “setuid” e “setgid” para permitir que tarefas do sistema sejam executadas sob o uid / gid especificado correspondente ao nome / grupo especificado.

Você pode acessá-lo na página do LaunchPad, mas (estranhamente) não consigo ver um PPA; portanto, você pode precisar compilá-lo.

Caso contrário, use suou sudono seu comando exec da seguinte maneira:

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

Ambos fazem praticamente a mesma coisa, então escolha o que mais lhe agrada. Então, usando o seu comando de exemplo:

exec sudo -u me "nzbget -D"
Oli
fonte
nome de domínio upstart.at é morto-vivo
Prof. Falken suporta Monica
Obrigado por isso! Não estava claro para mim nos documentos do Upstart se eu deveria estar usando Session Init / Jobs etc.
Luke Hoersten
4

Sugiro usar o sudo com a seguinte sintaxe:

sudo -u foouser foocommand

isso executa o comando foocommand como usuário foouser.

Michael K
fonte