web-dev-qa-db-ja.com

rsyncを使用してファイルとフォルダーのアクセス許可を保持する

次のコマンドを使用して、メールアカウントのバックアップを保持しています。

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

出典:ほとんどのメールフォルダーはユーザーvmailが所有しています。

宛先(バックアップサーバー):システムにvmailという名前のユーザーがいません。

私の質問です。宛先のマシンにvmailという名前のユーザーがいない場合でも、上記のコマンドはファイルとディレクトリの権限を保持しますか? 2台のマシン間のユーザー名が同じでなくても(バックアップサーバーで一部が欠落している場合)、ファイルと権限を宛先からソースに完全に復元することは可能でしょうか。

6
W.M.

rsyncがコピーするのは、ターゲットシステムに存在するかどうかに関係なく、ファイルの数値ユーザーIDです。そのIDのユーザーが存在しない場合、lsなどは名前ではなくその番号を表示します。そのユーザーIDがターゲットシステムの別のユーザー名に属している場合、このユーザーはファイルを所有します。

このシナリオでは、バックアップと復元は問題なく機能します。

4
Sven

Rsyncがファイルの所有権を保持する方法は、次の2つに依存します。

  • 宛先でスーパーユーザー(root)ですか?
    それ以外の場合は、自分以外のユーザーでファイルやディレクトリを作成することはできません。

  • どのオプションフラグを使用していますか?

-aオプションには、所有権を保持するように設計された-o, --owner-g, --groupオプションが含まれています。

ファイルシステムレベルでは、ユーザーとグループの所有権はUIDに保存されます。 GID番号。 UID/GIDからユーザー名とグループ名へのマッピングがない場合、ツールは代わりにそれらの番号を表示します。
同じ名前のユーザーとグループは、異なるシステムで異なるUID/GID番号を持つことができます。

デフォルトでは、rsyncはユーザー名とrespで所有権を照合しようとします。グループ名。言い換えると、ユーザーvmailがソースのファイルの所有者である場合、rsyncはユーザーvmailを宛先の所有者にもします(異なるUID/GID番号を持っている場合でも) 。
私たちは通常、UID/GID番号の形式で所有権を確認しないため、これは通常、非常に弾力性があり、人間にとって最も予測可能です。

リモート宛先に一致するユーザーvmailが存在しない場合、フォールバックシナリオが発生します。その後、Rsyncは実際の基になるUID/GID番号を保持し、ソース上のvmailユーザーのUID番号を使用して所有者を設定します。

これにより、rsyncの方向を逆にしてバックアップを復元するときに正しい所有権が保持されます。

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

具体的には、ファイルを復元するときに実際の問題が発生します。重要なのは、ファイルを元に戻すときに目的の所有者/グループを指定することです。 --chown=vmail:vmail

復元先の新しいマシンでユーザーvmailをすでに作成していると想定すると、次のようなコマンドを発行します。

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

この方法でこれを行うと、そのユーザーとの間でrsyncを実行できる限り、バックアップサーバー上のファイルの所有者は問題ではありません(これは、この例では既にtrueであることが示されています)。

2
rarawls