Executando um script bash como um usuário menos privilegiado com upstart

5

Este é o script, /home/jack/myscript.sh , que eu quero executar:

export JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.26/
/home/jack/myapp/apache-tomcat-6.0.32/bin/./catalina.sh run

O arquivo upstart, /etc/init/myapp.conf , que escrevi:

  description "Myapp Server"
  start on runlevel [2345]
  stop on runlevel [06]
  respawn
  respawn limit 10 5
  exec 'su jack -c /home/jack/myscript.sh'

Então, se eu quiser executar o script como usuário jack , minha configuração acima funcionaria? Existe uma maneira melhor de fazer isso?

    
por nixnotwin 25.11.2011 / 17:57

3 respostas

5

De acordo com o livro de receitas do Upstart , um recurso para executar um serviço, já que um usuário diferente está planejado, mas ainda não implementado.

Se você tiver start-stop-daemon , use-o.

exec start-stop-daemon --start -u jack --exec /home/jack/myscript.sh

Caso contrário, use su (como você fez) ou sudo . Observe que start-stop-daemon sempre muda para o usuário indicado (erros de restrição), enquanto su e sudo obedecem a sua própria política (em particular, as políticas do PAM na maioria dos sistemas).

Observe que, no seu caso, você não precisa do script intermediário. Você pode definir variáveis de ambiente diretamente da definição de serviço do Upstart.

description "Myapp Server"
  start on runlevel [2345]
  stop on runlevel [06]
  respawn
  respawn limit 10 5
  env JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.26/
  exec /home/jack/myapp/apache-tomcat-6.0.32/bin/catalina.sh run
    
por 26.11.2011 / 02:27
4

Desde o Upstart 1.4, o Upstart tem a capacidade de executar um trabalho do sistema como um usuário especificado usando as estrofes setuid e setgid , por exemplo:

setuid username
setgid groupname

Nas versões anteriores, podemos usar Trabalhos do usuário , que estão armazenados na pasta base do usuário.

Ou use algum aplicativo no comando exec.

Se start-stop-daemon estiver disponível:

exec start-stop-daemon --start -c myuser --exec command

com sudo :

exec sudo -u myuser command

com su :

exec su -s /bin/sh -c 'exec "$0" "$@"' myuser -- command [parameters...]

Mais informações aqui

    
por 17.10.2012 / 16:02
0

Se você quiser executá-lo como usuário de sessão, crie um trabalho de sessão (a partir de 1.7) de um trabalho do sistema. Essas tarefas não são tão restritivas quanto as tarefas do sistema quando se trata de variáveis de ambiente e são executadas como usuário da sessão.

    
por 13.11.2015 / 11:35

Tags