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

11

Estou recebendo o erro mencionado no título.

Encontrei esta pergunta semelhante: Execute o rsync com permissão de root na máquina remota . Isso não responde à minha pergunta.

Sou o administrador do servidor remoto e quero usar rsyncpara fazer backup de arquivos na 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 uso e não consigo usar uma senha (EDIT: para efetuar 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 não quero mudar as permissões nesse arquivo. Ele (e outros semelhantes) não deve ser legível (exceto pela raiz).

Isso deve ser executado em um trabalho cron e eu prefiro uma solução simples de uma linha usando apenas o comando rsync. A próxima opção seria um script de shell que eu possa chamar no trabalho cron. Em nenhum caso, posso efetuar login manualmente na máquina remota e me tornar root (porque vou dormir quando isso for executado).

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

MountainX
fonte
você pode nos mostrar algo como ssh [email protected] "cat /var/www/webapp/securestuff/install.php"> localfile?
Florenz Kley
@Florenz Kley: Eu não entendo o seu comentário
MountainX
mostre-me que você pode ler o arquivo e eu mostro um comando rsync que funciona :-). A opção 2 da grawity é provavelmente a sua melhor aposta.
Florenz Kley
@Florenz Kley: ssh [email protected] "echo mypassword | sudo -S /var/www/webapp/securestuff/install.php gato"> LocalFile
MountainX
Eu tenho rsync: send_files failed to open "/cygdrive/...": Permission denied (13). Então, meu computador de origem era o cygwin do Windows. Situação ligeiramente diferente, mas para a posteridade, minha solução foi clicar com o botão direito do mouse em cmd.exe e Executar como administrador .
Bob Stein

Respostas:

8

Você não pode fazer backup de um arquivo que não pode ler de outra forma; portanto, as permissões deverão ser alteradas ou substituídas pela raiz .

Suas opções em mais detalhes:

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

  • ... ou configurando o sudo no servidor para permitir a execução sem senha do rsynccomponente 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 de "backup do site" no servidor. Altere as permissões dos arquivos para torná-los legíveis na conta "backup do site"; você pode usar ACLs e setfaclpara isso. Não use esta 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 o sudo para não exigir uma senha para esse script. Por exemplo:

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

    O backup seria feito puxando o tarball inteiro toda vez, 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 pela edição de sudoers :

    me     ALL=(root) NOPASSWD: /usr/sbin/dump-website
    
user1686
fonte
Obrigado. Boas sugestões. Qualquer um provavelmente funcionará para mim. Também estou pensando em usar a solução em superuser.com/questions/270911/… para descobrir seus possíveis efeitos colaterais.
MountainX
Entre, eu quis dizer uma das duas últimas escolhas. O login como root via SSH não é permitido no servidor.
MountainX
@ MountainX: Separei "rsync via sudo" como uma opção separada. Pode funcionar também.
precisa saber é o seguinte
Obrigado! "rsync via sudo" seria minha escolha preferida. Vou tentar sua sugestão. Parece que eu preciso implementar isso usando o visudo no Ubuntu no servidor. Não brinquei muito com o visudo, mas você me deu o suficiente para começar. Obrigado novamente.
MountainX
5

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

raiz uid

no /etc/rsyncd.confarquivo

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

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

somente leitura = verdadeiro

altmas5
fonte
0

Se os arquivos são legíveis apenas por rootvocê , você precisa ter rootacesso ao backup do arquivo, lendo-o no sistema de arquivos. rsyncestá lendo os arquivos do sistema de arquivos e não do dispositivo bruto.

Com a excepção de dump, dde backups semelhantes que copiam a partição vez que os programas de arquivos, backups ler os arquivos do sistema de arquivos. Os utilitários de backup falharão ao ler e fazer backup dos arquivos para os quais as permissões do ID do usuário usado para executá-los impedem o acesso. Este é o caso em que você está se deparando.

Na maioria dos casos, você precisa confiar no seu software de backup o suficiente para permitir a leitura de todos os seus dados. Isso também significa que você precisa confiar na 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 seu conteúdo.

EDIT: Ao arquivar os dados (copiando todas as permissões), você precisará de acesso root nos dois servidores. Se você estiver fazendo isso como um backup, poderá procurar uma solução como o BackupPC, que usa o rsync para ler os arquivos, mas armazena os arquivos em sua própria árvore de diretórios.

BillThor
fonte
Existem maneiras de conceder acesso root ao rsync. Eu simplesmente não os conheço. O que estou pedindo é como dar acesso ao rsync root para fazer backup desses arquivos. Talvez eu precise revisitar a resposta para "Executar o rsync com permissão de root na máquina remota" e ver se eu consigo descobrir isso ... #
MountainX