Emitir eventos de recomeço como usuário regular

1

Eu quero criar uma situação em que algo que um usuário não privilegiado faz (via SSH) aciona um evento que faz com que um trabalho iniciante execute alguma ação. As atividades dependem de mudanças no sistema de arquivos, então eu agradeço métodos alternativos.

Basicamente, quero ter algo como:

description "Foo job"
exec foo
start on foo

e depois o usuário aciona o evento como foo. Quando eu digo "user", eu realmente quero dizer um script git hook que é executado automaticamente quando o git envia para um repositório no host via SSH.

Eu tentei simplesmente executar initctl emit foo , mas isso só funciona quando eu faço isso como root.

Eu também não posso usar trabalhos do usuário para este caso em particular, porque eu quero que o trabalho em questão reinicie servidores e crie estruturas de diretórios onde o usuário emissor do evento não tenha acesso.

Alguma idéia de como eu poderia conseguir isso sem dar privilégios desnecessários ao usuário?

EDIT: Apenas para adicionar um requisito que eu esqueci de mencionar. Isso precisa ser passível de script, portanto, a inserção de senhas não é uma opção.

    
por hayavuk 22.01.2013 / 21:23

1 resposta

2

Para responder a minha própria pergunta, o arquivo sudoers pode ser modificado para permitir que os usuários executem comandos específicos completos com argumentos. Então, para a situação em questão, algo assim fará o trabalho:

Cmnd_Alias EMIT_CMD = /sbin/initctl emit foo
user ALL=(ALL) NOPASSWD: EMIT_CMD

Isso pode ser colocado em / etc / sudoers, ou em um arquivo em /etc/sudoers.d se o seu sistema de criação de arquivos estiver configurado dessa maneira.

Depois que o sudo estiver configurado, o usuário não privilegiado poderá chamar o comando initctl sem senha, mas apenas com os argumentos especificados, e qualquer outro conjunto de argumentos falhará, pois o usuário não estará (esperançosamente) na lista de sudoers em qualquer outra capacidade.

    
por 22.01.2013 / 22:00