Fazendo a saída de redirecionamento de tarefa do upstart como usuário não privilegiado

1

Atualmente, estou fazendo um trabalho iniciante como um usuário sem privilégios, como:

start on started mongodb
stop on runlevel [06]

respawn
respawn limit 10 100

env NODE_ENV=production

pre-start script
    ulimit -n 2048
end script

exec sudo -u mainuser /usr/bin/make -C /home/mainuser/app start-prod >> /home/mainuser/data/logs/app.log 2>> /home/mainuser/data/logs/app.err.log

Isso funciona bem, com uma exceção: os arquivos de log app.log e app.err.log estão sendo gravados como raiz (a raiz se torna a proprietária desses arquivos).

Como posso garantir que os arquivos de log sejam gravados pelo mainuser ? sem privilégios?

    
por Tom 20.05.2012 / 16:15

1 resposta

1

Alguns pensamentos da parte superior da minha cabeça: você poderia usar | sudo -u mainuser tee para gravar o arquivo (mas se você quiser dividir STDOUT e STDERR, ele pode tornar-se um pouco confuso ), ou você poderia no script verificar se o log arquivos existem e são de propriedade de mainuser , se não criar e chown mainuser . Em seguida, anexar a saída como você manteria a propriedade.

Snippet rápido:

#!/bin/sh
user="mainuser"
group="mainuser"
for i in /home/mainuser/data/logs/app.log /home/mainuser/data/logs/app.err.log; do
    if [ ! -f "${i}" ] || [ "$(stat -c%U -- "${i}")" != "${user}" ]; then
        touch -- "${i}"
        chown ${user}:${group} -- "${i}"
    fi
done

Isso é rápido e não lida com casos como os arquivos de log existentes como diretórios / links e assim por diante muito bem, mas na prática pode ser bom.

Eu não trabalhei com o Upstart, então talvez existam formas mais simples.

    
por 20.05.2012 / 16:53