Preserva a propriedade com o rsync, sem raiz

4

Eu gostaria de realizar backups incrementais (para todo o sistema de arquivos) de uma máquina. rsync faz isso, mas gostaria de preservar também a propriedade do arquivo - o que significa que é possível restaurá-lo.

É possível fazer isso sem executar rsync como root na máquina de destino (armazenando os backups)?

Algumas ideias ...

  • Existe uma maneira de montar um sistema de arquivos (FUSE?) de forma a permitir chown para um usuário não-root? (Eu acho que provavelmente seria noexec para proibir a elevação.)
  • Alguma maneira de armazenar e restaurar a propriedade em arquivos de metadados em vez do próprio sistema de arquivos?
  • tar pode armazenar a propriedade do arquivo, embora fazê-lo funcionar com backups rsync ou incrementais seria um pouco mais complicado. Também seria bom poder navegar pelos backups como um sistema de arquivos regular.
  • Talvez algum tipo de ambiente raiz falso? Uma máquina virtual funcionaria, mas seria bom evitar a sobrecarga de manutenção e desempenho associada.
por Vladimir Panteleev 12.02.2016 / 09:42

5 respostas

10

Como afirmado nas outras respostas, para preservar diretamente as informações de propriedade, você precisa ter acesso root à máquina de destino.

No entanto, você teve pelo menos duas soluções alternativas para evitar o acesso root, preservando a propriedade:

  1. use a opção --fake-super rsync. Na página do manual:

When this option is enabled, rsync simulates super-user activities by saving/restoring the privileged attributes via special extended attributes that are attached to each file (as needed)

Isso significa que a propriedade não é preservada diretamente no estilo clássico do Unix, e as informações de propriedade são armazenadas dentro de um atributo estendido especial (isto é, uma espécie de "tag" anexada ao arquivo). Ao restaurar, rsync pode usar essa tag EA para reconstruir corretamente o proprietário do arquivo original.

  1. não deixe o rsync preservar as informações de propriedade, em vez disso, preserve-as usando o utilitário getfacl . Por exemplo, emitindo getfacl -R MNTPOINT > acls.txt você efetivamente salva informações de propriedade (e ACL) em um arquivo de texto que pode ser usado posteriormente para restaurar essas informações usando o comando setfacl --restore .
por 12.02.2016 / 15:14
2

Se eu fosse você, colocaria os backups em um volume em um contêiner do Docker. Dessa forma, você pode colocar bons limites e evitar riscos de segurança, mas ainda executá-los como root, para que ele faça o que precisa fazer.

    
por 12.02.2016 / 10:52
1

Bem, basicamente você já sabe a resposta: não, você não pode.

Esse é o básico das permissões do sistema de arquivos do Unix e do Like (que parece ser seu ambiente): você não pode fazer muito em arquivos nos quais você não tem direitos ou propriedade. Então, se você quiser copiar "todo o sistema de arquivos", que inclui muitos arquivos raiz, você precisa ser super usuário nos sistemas de origem e de destino.

Eu afirmei que você sabia a resposta, porque você já sugeriu o uso de outras ferramentas como tar, máquinas virtuais e afins, que então não é "preservar com o rsync". Espero que não haja um truque fácil para enganar o sistema de arquivos, caso contrário, não teríamos nem mesmo um nível básico de segurança.

Em seu sistema de arquivos de destino, o rsync pode receber arquivos tar com permissões detalhadas "ocultas" dentro, mas, em seguida, - você ainda tem que ser root para descompactá-los com as permissões correspondentes - dado que eles incluem arquivos raiz,
- O rsync não está fazendo nada incremental com essas bolas de alcatrão.
Por outro lado, se você preparar arquivos tar de seus arquivos de configuração, eles não serão pesados e você poderá enviá-los em qualquer sistema de backup, via rsync ou FTP.

E separadamente, se você salvar apenas os dados de seus usuários e pertencerem a um grupo comum (como o grupo de usuários de FTP, por exemplo), que obviamente não é root, você poderá rsync o conjunto inteiro de pastas com esse grupo id, não sendo root em nenhum dos sistemas.

Se você for dessa maneira, certifique-se de que qualquer usuário e grupo que você use exista e seja igual (nome / número) em ambos os sistemas, ou você poderá obter surpresas.

Claro, a coisa toda não parece uma solução profissional. E você também precisará se preparar para o procedimento de restauração de emergência e maneiras de selecionar a versão correta que deseja restaurar, etc.

    
por 12.02.2016 / 12:29
1

Em vez de copiar todos os seus arquivos um a um, como o rsync, você deve considerar colocar os arquivos em algum tipo de "contêiner" que permita empacotar todos os arquivos, transportá-los e nunca perder metadados.

Você já considerou "tar"? Eu sei que o tar é a antítese do rsync: não é incremental, não transporta os dados para qualquer lugar, etc.

No entanto, é muito bom preservar propriedade, permissões, ACLs, horários de modificação e outros. Você pode fazer um arquivo tar, copiá-lo para uma máquina que nem entende a maneira Unix de fazer permissões de arquivo (ie Windows, TOPS-20, VAX / VMS), então copiá-lo para um host Unix, descompactá-lo, e você recebe todas as permissões, etc. que originalmente tinha.

Existe um sistema de arquivos FUSE que mount (somente leitura) arquivos tar .

Claro, você perde as cópias incrementais e outros recursos que tornam o rsync uma excelente ferramenta. No entanto, o mundo Unix usou o tar por mais de 20 anos antes que o rsync fosse inventado e funciona muito bem para certas situações.

    
por 12.02.2016 / 14:45
0

Obviamente, para obter os arquivos "root" do destino, você precisa de acesso root. No entanto, existem muitas maneiras de estragar seu sistema.

1) Você pode permitir que o rsync use o sudo sem senha 2) Você pode usar o setuid para rsync para poder acessar os arquivos raiz, enquanto o orquestrador de backup é um usuário normal em vez da raiz. 3) use rssh para limitar os riscos de segurança de todos os itens acima

    
por 12.02.2016 / 14:56