rsync Permissão negada ao fazer backup de um diretório remoto para minha máquina local

10

Estou recebendo o erro mencionado no título.

Eu encontrei essa pergunta semelhante: Execute o rsync com permissão de root no remoto máquina . Isso não responde à minha pergunta.

Sou o administrador no servidor remoto e quero usar rsync para fazer backup de arquivos em minha caixa local. Aqui está o meu comando rsync:

$ rsync -avz [email protected]:/var/www/ /backups/Sites/MySite/

Funciona principalmente. O login é feito através de um par de chaves. Eu não e não posso usar uma senha (EDIT: para login via SSH). Apenas alguns arquivos não serão transferidos devido a permissões. Não quero alterar essas permissões.

Aqui está o erro:

receiving file list ... done
rsync: send_files failed to open "/var/www/webapp/securestuff/install.php": Permission denied (13)

Eu faço não deseja alterar as permissões nesse arquivo. Ele (e outros como ele) não deve ser legível (exceto pelo root).

Isso precisa ser executado em uma tarefa cron e eu prefiro uma solução simples de uma linha usando apenas o comando rsync. A próxima escolha seria um script de shell que eu possa chamar do cron job. Em nenhum caso eu posso logar manualmente na máquina remota e me tornar root (porque eu estarei dormindo quando isso for executado.

Como posso usar o rsync para fazer o backup em minha caixa local?

    
por MountainX 07.03.2012 / 21:57

3 respostas

8

Você não pode fazer o backup de um arquivo que você não pode ler de outra forma, então as permissões serão devem ser alteradas ou anuladas pelo root .

Suas opções com mais detalhes:

  • Substitua as permissões por rsync'ing como [email protected] diretamente. (

  • ... ou configurando sudo no servidor para permitir a execução sem senha do componente rsync do lado do servidor.

    me    ALL=(root) NOPASSWD: /usr/bin/rsync --server --sender -vlogDtprze.iLsf . /var/www/
    

    e

    rsync --rsh="ssh [email protected] sudo" -avz /var/www/ /backups/...
    
  • Crie uma conta dedicada "site-backup" no servidor. Altere as permissões dos arquivos para torná-los legíveis para a conta "website-backup"; você pode usar ACLs e setfacl para isso. Não use essa conta para mais nada.

    rsync -avz [email protected]:/var/www/ /backups/sites/mysite/
    
  • Escreva um script no servidor que despeje / var / www / em um tarball criptografado. Novamente, isso pode ser feito como root (via crontab) ou configurando sudo para não requerer uma senha para aquele script. Por exemplo:

    #!/bin/sh
    tar c /var/www/ | gpg -e -r [email protected]
    

    O backup seria feito ao se puxar todo o tarball todas as vezes, o que pode ser ineficiente em sites grandes:

    ssh [email protected] "sudo /usr/sbin/dump-website" > /backups/sites/mysite.tar.gpg
    

    O requisito de senha seria removido editando sudoers :

    me     ALL=(root) NOPASSWD: /usr/sbin/dump-website
    
por 07.03.2012 / 22:13
5

No host remoto, você pode executar o daemon do rsync com

uid root

no arquivo /etc/rsyncd.conf .

Isso permitirá que o daemon use o recurso CAP_DAC_OVERRIDE e leia o sistema de arquivos local sem alterar as permissões / propriedade.

Se você precisa apenas fazer um backup, é uma boa prática configurar o modo rsync para somente leitura:

read only = true

    
por 01.06.2013 / 00:46
0

Se os arquivos só puderem ser lidos por root , você precisará ter root access para fazer o backup do arquivo, lendo-o no sistema de arquivos. rsync está lendo os arquivos do sistema de arquivos não do dispositivo bruto.

Com exceção de dump , dd e backups semelhantes que copiam a partição em vez desses arquivos, os programas de backups leem os arquivos do sistema de arquivos. Os utilitários de backup falharão na leitura e os arquivos de backup para os quais as permissões do ID do usuário usaram para executá-los impedem o acesso. Este é o caso que você está correndo.

Na maioria dos casos, você precisa confiar em seu software de backup o suficiente para permitir que ele leia todos os seus dados. Isso também significa que você precisa confiar em sua mídia de backup com todos os seus dados. Em alguns casos, você pode excluir alguns arquivos do backup e usar um método alternativo para fazer backup de seus conteúdos.

EDIT: Como você está arquivando os dados (copiando todas as permissões), você precisará de acesso root em ambos os servidores. Se você estiver fazendo isso como backup, talvez seja melhor analisar uma solução como BackupPC que usa o rsync para ler os arquivos, mas armazena os arquivos em sua própria árvore de diretórios.

    
por 07.03.2012 / 22:06