Execute o script de rc.local como usuário em vez de root

21

Eu quero executar um script toda vez que meu servidor for inicializado. O problema é que eu preciso ser um certo usuário para executar o script, se eu tentar fazê-lo como root não consigo encontrar certos pacotes (como o Ruby).

Eu tento mudar para o usuário xxx01.

sudo su user01
/etc/init.d/script start

Isso não funciona no entanto.

    
por Philip 30.08.2012 / 18:04

4 respostas

29

Executar sudo su user01 em um script não significa que os seguintes comandos sejam enviados para o shell resultante. Na verdade, isso provavelmente significa que um novo shell é gerado como user01, que nunca sai!

Duas coisas:

  • Você pode executar um comando como outro usuário transmitindo o argumento -c 'command...' para su, como su user01 -c '/etc/init.d/script start' .
  • Iniciar um serviço que usa /etc/init.d de rc.local não é a coisa correta a ser feita. Você deseja ativar o serviço na inicialização usando suas ferramentas de distribuição, como chkconfig ou update-rc.d . Você também não quer trabalhos em /etc/init.d que não devam ser iniciados como root . Os trabalhos em si podem ser liberados para bifurcar-se com outra conta de usuário, mas devem ser chamados pelo root.
por 30.08.2012 / 18:08
8

Você pode colocar algo em /etc/crontab e executá-lo em @reboot

@reboot username /etc/init.d/script start
    
por 30.08.2012 / 18:08
2

Você pode apenas executar o comando através do sudo assim:

sudo -H -u user01 /etc/init.d/script start

-H define a variável de ambiente HOME para aquela do usuário

-u especifica o nome de usuário para ser executado como

    
por 11.08.2015 / 14:24
0

Certamente você não pode executar esse script com o sudo devido a requiretty (impõe que os usuários devem ser registrados) em sudoers. Você pode querer desativar, o que é um pouco arriscado

Existe também uma ferramenta antiga chamada runsuid: link

HTH

    
por 30.08.2012 / 18:23