Executar script de rc.local como usuário em vez de raiz


26

Quero executar um script sempre que meu servidor for iniciado. O problema é que eu preciso ser um determinado usuário para executar o script, se eu tentar fazê-lo como root, ele não poderá encontrar certos pacotes (como ruby).

Eu tento mudar para xxx user01.

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

Isso não funciona no entanto.


Postar seu script init?
Quanta

Você tem alguns logs?
Dom

Por que você simplesmente não usa suno script rc?
Mat

Respostas:


30

A execução sudo su user01em um script não significa que os seguintes comandos sejam enviados ao shell resultante. De fato, isso provavelmente significa que um novo shell é gerado como user01, que nunca sai!

Duas coisas:

  • Você pode executar um comando como outro usuário, passando o -c 'command...'argumento para su, como su user01 -c '/etc/init.d/script start'.
  • Iniciar um serviço que usa o /etc/init.d a partir do rc.local não é a coisa correta a fazer. Você deseja usar ativar o serviço na inicialização usando suas ferramentas de distribuição, como chkconfigou update-rc.d. Você também não deseja trabalhos no /etc/init.d que não devam ser iniciados como root. Os trabalhos em si podem ficar à vontade para acessar outra conta de usuário, mas devem ser chamados pelo root.


4

Você pode simplesmente executar o comando através do sudo desta forma:

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

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

-u especifica o nome de usuário para executar como


0

Certamente você não pode executar esse script com sudo por causa do requiretty (impõe que os usuários devem estar logados) em sudoers. Você pode querer desativar, o que é um pouco arriscado

Também existe uma ferramenta um pouco antiga chamada runsuid: http://freecode.com/projects/runsuid

HTH

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.