web-dev-qa-db-fra.com

Préservation des autorisations de fichiers et de dossiers avec rsync

Je maintiens une sauvegarde de mes comptes de messagerie à l'aide de cette commande:

Sudo rsync -av --delete --progress -e "ssh -p pNumber" --rsync-path="/usr/bin/rsync" /vmail/ user@my_backup_server:/home/user/backups/vmail/

Source: la plupart des dossiers de messagerie appartiennent à l'utilisateur vmail.

Destination (serveur de sauvegarde): le système n'a pas d'utilisateur nommé vmail.

Ma question, la commande ci-dessus préserverait-elle les autorisations de fichier et de répertoire même si la machine de destination n'a pas d'utilisateur nommé vmail? Serait-il possible de restaurer complètement les fichiers et les autorisations de la destination à la source même si les noms d'utilisateur entre les deux machines ne sont pas les mêmes (certains manquants sur le serveur de sauvegarde).

6
W.M.

Ce que rsync copie est l'ID utilisateur numérique du fichier, qu'il existe ou non sur le système cible. Si un utilisateur avec cet identifiant n'existe pas, ls etc. affichera simplement ce numéro au lieu d'un nom. Si cet ID utilisateur appartient à un autre nom d'utilisateur sur le système cible, cet utilisateur sera désormais propriétaire du fichier.

La sauvegarde et la restauration fonctionneront sans problème dans ce scénario.

4
Sven

La façon dont rsync préserve la propriété des fichiers dépend de deux choses:

  • Êtes-vous super-utilisateur (root) sur la destination?
    Sinon, vous ne pouvez pas créer de fichiers et de répertoires avec un autre utilisateur que le vôtre.

  • Quels indicateurs d'option utilisez-vous?

Le -a L'option inclut le -o, --owner, -g, --group options conçues pour préserver la propriété.

Au niveau du système de fichiers, la propriété des utilisateurs et des groupes est stockée dans l'UID resp. Numéros GID. Lorsqu'il n'y a pas de mappage entre UID/GID et les noms d'utilisateur et les outils de nom de groupe afficheront simplement ces numéros à la place.
Les utilisateurs et les groupes portant les mêmes noms peuvent avoir des numéros UID/GID différents sur différents systèmes.

Par défaut, rsync essaiera de faire correspondre la propriété par nom d'utilisateur resp. nom du groupe . En d'autres termes, lorsque l'utilisateur vmail est le propriétaire d'un fichier à la source, rsync fera de l'utilisateur vmail également le propriétaire de la destination (même s'ils ont des numéros UID/GID différents) .
C'est généralement assez résistant et le plus prévisible pour les humains car nous ne considérons normalement pas la propriété sous la forme de numéros UID/GID.

Lorsqu'aucun utilisateur correspondant vmail n'est présent sur la destination distante, un scénario de secours se produit. Rsync conservera alors les numéros UID/GID sous-jacents réels et le numéro UID de l'utilisateur vmail sur la source sera utilisé pour définir le propriétaire.

Cela devrait préserver la propriété correcte lorsque vous inversez la direction rsync et restaurez la sauvegarde.

man rsync :

   -o, --owner
          This  option  causes  rsync to set the owner of the destination file to be the same as the source file,
          but only if the receiving rsync is being run as the super-user (see also the --super  and  --fake-super
          options).   Without this option, the owner of new and/or transferred files are set to the invoking user
          on the receiving side.

          The preservation of ownership will associate matching names by default, but may fall back to using  the
          ID number in some circumstances (see also the --numeric-ids option for a full discussion).


   --numeric-ids
          With  this option rsync will transfer numeric group and user IDs rather than using user and group names
          and mapping them at both ends.

          By default rsync will use the username and groupname to determine what ownership  to  give  files.  The
          special  uid  0 and the special group 0 are never mapped via user/group names even if the --numeric-ids
          option is not specified.

          If a user or group has no name on the source system or it has no match on the destination system,  then
          the  numeric ID from the source system is used instead.  See also the comments on the "use chroot" set‐
          ting in the rsyncd.conf manpage for information on how the chroot setting affects  rsync’s  ability  to
          look up the names of the users and groups and what you can do about it.
11
HBruijn

Avec votre cas en particulier, le vrai problème se pose quand vient le temps de restaurer les fichiers. La clé serait de spécifier le propriétaire/groupe souhaité lorsque vous retirez les fichiers. --chown=vmail:vmail

En supposant que vous avez déjà créé l'utilisateur vmail sur la nouvelle machine sur laquelle vous allez restaurer, vous émettriez quelque chose comme ceci:

Sudo rsync -av --chown=vmail:vmail --force --delete --progress user@my_backup_server:/home/user/backups/vmail/ /vmail/

Le faire de cette façon signifie que peu importe qui possède les fichiers sur le serveur de sauvegarde tant que vous pouvez rsync vers/depuis cet utilisateur (ce qui est implicite comme étant déjà vrai dans votre exemple).

2
rarawls