web-dev-qa-db-fra.com

Préserver la propriété avec rsync, sans racine

Je voudrais effectuer des sauvegardes incrémentielles (pour l'ensemble du système de fichiers) à partir d'une machine. rsync Cela fera-t-il tout à fait, mais je voudrais également préserver la propriété du fichier - ce qui signifie, permettez-le de la restaurer.

Est-ce que cela est possible de faire sans exécuter rsync comme racine sur la machine cible (stocker les sauvegardes)?

Quelques idées...

  • Existe-t-il un moyen de monter un système de fichiers (fusible?) De manière à permettre chown pour un utilisateur non root? (Je suppose que cela aurait probablement besoin d'être noexec pour interdire l'élévation.)
  • Une manière à stocker et restaurer la propriété dans les fichiers de métadonnées au lieu du système de fichiers lui-même?
  • tar peut stocker la propriété de fichier, bien que le fait de le faire fonctionner avec RSYNC ou des sauvegardes incrémentielles serait un peu plus impliqué. Il serait également agréable de pouvoir parcourir les sauvegardes comme un système de fichiers régulier.
  • Peut-être une sorte de faux environnement root? Une machine virtuelle fonctionnerait, mais serait agréable d'éviter les frais de maintenance et de performance associés.
5
Vladimir Panteleev

Comme indiqué dans les autres réponses, pour préserver directement les informations de propriété, vous avez besoin d'un accès root à la machine de destination.

Cependant, vous avez eu au moins deux solutions de contournement pour éviter l'accès des racines tout en préservant la propriété:

  1. utilisez le --fake-super option rsync. De la page de l'homme:

Lorsque cette option est activée, RSYNC simule des activités super-utilisateur en enregistrant/restauration des attributs privilégiés via des attributs étendus spéciaux connectés à chaque fichier (au besoin).

Cela signifie que la propriété est non directement préservée dans un style classique Unix, plutôt que les informations de propriété sont stockées dans un attribut étendu spécial (c'est-à-dire: une sorte de "balise" attachée au fichier). Lors de la restauration, rsync peut utiliser cette ea/étiquette pour reconstruire correctement le propriétaire du fichier d'origine.

  1. ne laissez pas RSYNC préserver les informations de propriété, plutôt les conserver à l'aide de l'utilitaire getfacl. Par exemple, émettre getfacl -R MNTPOINT > acls.txt Vous économisez efficacement des informations sur la propriété (et ACL) dans un fichier texte pouvant être utilisé ultérieurement pour restaurer ces informations à l'aide de l'setfacl --restore commande.
14
shodanshok

Si j'étais vous, je mettais les sauvegardes sur un volume dans un conteneur Docker. De cette façon, vous pouvez mettre de bonnes limites à ce sujet et éviter les risques de sécurité, mais le gérer toujours comme une racine, de sorte que cela doit faire ce qu'il faut faire.

2
Florin Asăvoaie

Plutôt que de copier tous vos fichiers un seul no par exemple comme RSYNC, vous devriez envisager de placer les fichiers dans une sorte de "conteneur" qui vous permet d'emballer tous les fichiers, de les transporter et de ne jamais perdre de métadonnées.

Avez-vous considéré "tar"? Je sais que TRAIL est l'antithèse de RSYNC: ce n'est pas incrémental, cela ne transporte pas les données nulle part, etc.

Cependant, il est vraiment bon de préserver la propriété, les autorisations, les ACL, les temps de modification, etc. Vous pouvez créer un fichier de goudron, copier-le sur une machine qui ne comprend même pas la manière UNIX de faire des autorisations de fichier (IE Windows, Tops-20, VAX/VMS), puis la copie sur un hôte UNIX, Et vous obtenez toutes les autorisations, etc. que cela avait à l'origine.

Il y a un système de fichiers fusible qui sera montez (en lecture-seule) fichiers tar .

Bien sûr, vous perdez les copies incrémentielles et d'autres caractéristiques qui font de RSYNC si un excellent outil. Toutefois, le World Unix utilisait Tar depuis plus de 20 ans avant que RSYNC n'ait été inventé et cela fonctionne très bien pour certaines situations.

1
TomOnTime