Upstart - setuid dentro da estrofe pós-início

2

Eu tenho este script upstart que parece um pouco com isto:

setuid userA
setgid userB

script
    # ... bunch of stuff run as userA
end script

post-start script
    # ... command run as userA

    # ... the following command needs to be run as root
    setuid root                  # <---- this is not legal syntax
    service myservice restart    # <---- I need to run this as root
end script

Então, passei pela documentação e descobri que o setuid não funciona dentro de post-start , e userA não está na lista de sudoers, portanto, não posso fazer apenas sudo service myservice restart . Na verdade, na situação mais ideal, eu deveria estar executando myservice como outro usuário.

Como obtenho isso? Estou coçando a cabeça sem nenhuma solução por um dia inteiro agora.

Como sugerido pela resposta, uma maneira é criar outra tarefa de inicialização que é executada quando o script anterior de inicialização é executado. Então, em vez de ter service myservice restart em jobA, criamos /etc/init/myservice-hook.conf e ativamos quando jobA está em execução (conforme a resposta).

Do meu lado, consegui resolver o problema removendo setuid e setgid para que o script seja executado como root e, em seguida, colocando seletivamente sudo -u userA <command> no script. Vou usar a resposta fornecida, porque acho que tem melhor isolamento das preocupações.

    
por Ruben Tan 26.08.2014 / 05:44

1 resposta

1

Uma opção é criar outro trabalho assim:

start on started jobA

task

exec service myservice restart

Em seguida, remova o bit da raiz do setuid e o que estava abaixo dele no script de pós-inicialização.

    
por 26.08.2014 / 20:15

Tags