arquivos rsync com permissões do apache sobre o ssh

3

Estou executando um rsync via apache para sincronizar um diretório de ativos

rsync -avz -e 'ssh -l rsync -i /home/rsync/.ssh/rsync -o StrictHostKeyChecking=no' /var/www/html/site/Uploads centos@$IP:/var/www/html/site/Uploads

Isso funciona corretamente, mas a propriedade muda de apache para centos, pois é o usuário. Eu poderia configurar as chaves para o usuário do apache, mas esse usuário não pode estar logado para que não funcione.

Como posso fazer com que o rsync seja executado como apache para preservar a propriedade ou executar como o usuário centos e manter o proprietário como apache (o cron não funciona no meu caso).

    
por Rudiger 20.11.2016 / 23:38

3 respostas

0

Portanto, a melhor maneira que encontrei é ter um usuário com acesso sudo somente para esse comando e usar --rsync-path='sudo rsync' . por exemplo:

rsync -avz -e 'ssh -l rsync -i /home/rsync/.ssh/rsync -o StrictHostKeyChecking=no' /path/ --rsync-path='sudo rsync' [email protected]:/path/
    
por 23.11.2016 / 23:16
0

O Rsync tem uma opção numeric-ids , que você pode aproveitar aqui.

Duas coisas: certifique-se, em ambos os servidores, de que o usuário do apache tenha o mesmo ID numérico; e certifique-se de que o usuário que está executando o rsync possa gravar / atualizar arquivos de propriedade do apache para segmentar.

    
por 21.11.2016 / 00:47
0

A propriedade dos arquivos no diretório de destino é determinada inteiramente pela conta de destino usada para criar / transferi-los. (Não é possível que contas comuns alterem a propriedade dos arquivos.)

Se você quiser que os arquivos de destino sejam de propriedade de apache , há quatro opções que lembram

  1. Transfira os arquivos, fazendo login na conta de destino como o usuário apache . Com um certificado ssh , você pode evitar a necessidade de incorporar uma senha. Você também pode configurar a conexão ssh para negar qualquer operação diferente de executar o serviço rsync .

  2. Puxe os arquivos do host de destino. Você poderia configurar este trabalho para executar no cron com freqüência ( rsync sem trabalho pode ser uma opção relativamente barata), ou você poderia obtê-lo para verificar um gatilho como a criação de um arquivo e somente se isso for ativado, execute o processo rsync completo.

    Nesta situação, eu teria cron em execução no host de destino, verificando um arquivo localmente a cada cinco minutos com um snippet como este

    test -f "$HOME"/.rsync_trigger && rsync ... && rm -f "$HOME"/.rsync_trigger
    
  3. Use inotifywait para corrigir as propriedades do arquivo depois que os arquivos tiverem sido copiados. Isso exigiria que o processo fosse executado como raiz, mas poderia ser cuidadosamente autocontido para que pudesse alterar apenas as propriedades dos arquivos de propriedade de centos no diretório apache de destino.

  4. Copie os arquivos com rsync executando como root. Não é o ideal, mas pode ser necessário se tudo mais falhar.

por 21.11.2016 / 11:13