Criando uma pasta em '/ var / run' quando o job é executado como um usuário não privilegiado

1

Eu tenho alguns scripts upstart que são executados como um usuário não privilegiado usando setuid . Os arquivos Pid devem ser criados em /var/run/my-service : /var/run/my-service/v1.pid , /var/run/my-service/v2.pid e assim por diante.

Os scripts iniciantes são criados por um script, que também cria /var/run/my-service e define as permissões, portanto, tudo funciona inicialmente. Mas esta pasta desaparecerá após uma reinicialização e os serviços falharão.

Eu tentei isso:

pre-start script
    [ -n $PID_DIR ] && [ ! -d $PID_DIR ] && mkdir $PID_DIR
    sudo chown my-user:my-group $PID_DIR
end script

setuid my-user

Mas isso não funciona:

sudo: no tty present and no askpass program specified
my-user is not in the sudoers file.  This incident will be reported.

Acho que é porque setuid afeta todos os processos, mesmo depois que pre-start e sudo start my-service foram usados.

Como posso criar a pasta e definir permissões antes que o serviço seja iniciado?

    
por Mihai Rotaru 24.07.2014 / 11:01

1 resposta

3
  1. sudo não é a ferramenta certa para qualquer coisa em relação a sistemas init. por favor evite usá-lo se possível.

  2. setuid e setgid afetam todas as sub-rotinas do job upstart, incluindo o pré-início.

  3. Isso pode ser facilmente trabalhado com o seguinte trabalho, my-service-prep.conf:

    start on starting my-service
    
    task
    
    PIDDIR=/var/run/my-service
    
    exec install -o my-user -g my-group -d $PIDDIR
    

Com isso, você pode usar setuid e setgid dentro do job upstart principal e não enfrentar erros de permissão.

    
por 24.07.2014 / 23:37