Não quebrando permissões ao executar comandos relacionados ao Rails no servidor

1

Como parte do meu processo de implantação, eu executaria um chown -R www-data: www-data em todo / var / www / projectx. Isso está demorando muito, então, em vez de corrigir periodicamente as permissões, eu quero evitar quebrá-las.

Acho que uma das razões pelas quais eles estão quebrados é porque nós executamos comandos relacionados ao Rails no servidor, como:

rvm 1.9.3@projectx && RAILS_ENV=production rake regenerate_thumbnails
rvm 1.9.3@projectx && RAILS_ENV=production bundle exec rails console

e todos os arquivos gerados durante esses comandos acabam sendo de propriedade do usuário que o executa, em vez de www-data.

Qual seria a solução adequada para esse problema? Pensei em usar o sudoing como www-data para executar os comandos, mas o rvm precisa do bash e o www-data está atualmente usando sh da versão antiga sem arquivos de perfil, para que eu precise melhorar o ambiente shell do www-data. Aquele é o caminho para ir? Qualquer efeito colateral que eu deveria tomar cuidado?

    
por pupeno 27.11.2012 / 09:49

1 resposta

1

Depende do usuário que você está usando para executar o Rails. De acordo com as práticas recomendadas de segurança, esse deve ser um usuário diferente de www-data (que é o uso dos sistemas baseados no Debian pelos arquivos de propriedade do apache / nginx). O www-data só deve possuir o que você exporta no diretório estático.

Dito isto, se os arquivos que você está gerando são estáticos (como miniaturas) e você está obtendo o rvm do /etc/profile.d/rvm.sh, você pode tentar executar o seguinte:

sudo -u www-data bash -l -c 'rvm 1.9.3@projectx && RAILS_ENV=production rake regenerate_thumbnails'

Isso executará o comando como www-data, iniciará um shell bash de login instantaneamente (o que significa que /etc/profile.d/rvm.sh será carregado) que por sua vez executará rvm com seus gemset e comandos especificados.

Lembre-se de hospedar seu código fora do docroot do servidor web!

    
por 27.11.2012 / 10:18