web-dev-qa-db-ja.com

rootなしでrsyncで所有権を保持する

マシンから(ファイルシステム全体の)増分バックアップを実行したいと考えています。 rsyncはこれで十分ですが、ファイルの所有権も保持したいと思います。つまり、ファイルを復元できるようにします。

ターゲットマシンでrootとしてrsyncを実行せずにこれを実行できますか(バックアップを保存します)?

いくつかのアイデア...

  • Root以外のユーザーにchownを許可するような方法でファイルシステム(FUSE?)をマウントする方法はありますか? (昇格を禁止するには、おそらくnoexecである必要があると思います。)
  • ファイルシステム自体ではなくメタデータファイルに所有権を保存および復元する方法はありますか?
  • tarはファイルの所有権を保存できますが、rsyncまたは増分バックアップで機能させるには少し複雑になります。また、通常のファイルシステムのようにバックアップを参照できるのもいいでしょう。
  • おそらく、ある種の偽のルート環境ですか?仮想マシンは機能しますが、関連するメンテナンスとパフォーマンスのオーバーヘッドを回避するのに適しています。
5

他の回答で述べたように、所有権情報を直接保存するには、宛先マシンへのrootアクセスが必要です。

ただし、所有権を維持しながらルートアクセスを回避するには、少なくとも2つの回避策があります。

  1. --fake-super rsyncオプションを使用します。 manページから:

このオプションを有効にすると、rsyncは、(必要に応じて)各ファイルに添付されている特別な拡張属性を介して特権属性を保存/復元することにより、スーパーユーザーのアクティビティをシミュレートします

つまり、所有権はnotで古典的なUnixスタイルで直接保存され、所有権情報は特別な拡張属性(つまり、ファイルに添付された「タグ」の一種)内に保存されます。リストア時に、rsyncはこのEA /タグを使用して、元のファイル所有者を正しく再構築できます。

  1. rsyncに所有権情報を保存させず、getfaclユーティリティを使用してそれらを保存します。たとえば、getfacl -R MNTPOINT > acls.txtを発行すると、所有権(およびACL)情報がテキストファイルに効率的に保存され、後でsetfacl --restoreコマンドを使用してそのような情報を復元するために使用できます。
14
shodanshok

私があなたなら、Dockerコンテナー内のボリュームにバックアップを置きます。このように、適切な制限を設定してセキュリティリスクを回避しながら、ルートとして実行することで、必要なことを実行できます。

2

Rsyncのようにすべてのファイルを1つずつコピーするのではなく、すべてのファイルをまとめて転送し、メタデータを失うことのない何らかの「コンテナー」にファイルを配置することを検討する必要があります。

「タール」を検討したことがありますか?私はtarがrsyncの正反対であることを知っています。インクリメンタルではなく、データをどこにも転送しません。

ただし、所有権、権限、ACL、変更時間などを保持することは非常に優れています。 tarファイルを作成し、ファイルのアクセス許可を実行するUnixの方法(Windows、TOPS-20、VAX/VMSなど)を理解していないマシンにコピーしてから、Unixホストにコピーして解凍します。そして、あなたはそれがもともと持っていたすべての許可などを得ます。

マウント(読み取り専用)tarファイル するFuseファイルシステムがあります。

もちろん、rsyncをこのような優れたツールにするインクリメンタルコピーやその他の機能は失われます。ただし、Unixの世界ではtarを20年以上使用してからrsyncが発明され、特定の状況で非常にうまく機能しました。

1
TomOnTime

ええと、基本的にはあなたはすでに答えを知っています。

これがunixやそれに類するもののファイルシステムの権限(環境のようです)の基本です。権利や所有権を持たないファイルに対しては、多くのことを行うことはできません。したがって、多くのルートファイルを含む「ファイルシステム全体」をコピーする場合は、ソースシステムと宛先システムの両方でスーパーユーザーである必要があります。

私は、tar、仮想マシンなどの他のツールを使用することをすでに提案しているため、その答えを知っていたと述べました。うまくいけば、ファイルシステムをだます簡単なトリックはありません。さもないと、基本的なセキュリティレベルすらありません。

宛先ファイルシステムでは、rsyncは内部に「非表示」の詳細な権限を持つtarファイルを受信できますが、その後
-対応する権限でそれらをuntarするにはrootである必要があります–それらにrootファイルが含まれている場合、
-rsyncは、そのようなtarボールを使用して増分を行っていません。
一方、設定ファイルのtarファイルを準備すると、重くならず、rsyncまたはFTP経由で任意のバックアップシステムに送信できます。

さらに、ユーザーのデータのみを保存し、それらが共通のグループ(たとえば、FTPユーザーのグループなど)に属している場合(明らかにrootではない)、そのグループIDを持つフォルダーのセット全体をrsyncできます。どちらのシステムでもrootになります。

その方法を使用する場合は、使用するユーザーとグループが存在し、両方のシステムで同じ(名前/番号)であることを確認してください。

もちろん、すべてがプロフェッショナルなソリューションのようには見えません。また、緊急時の復元手順や、復元する正しいバージョンを選択する方法なども準備する必要があります。

0
ondelettes

当然のことながら、宛先から「ルート」ファイルを取得するには、ルートアクセスが必要です。ただし、システムをねじ込むには多くの方法があります。

1)rsyncがパスワードなしでSudoを使用することを許可できます2)バックアップオーケストレーターがrootではなく通常のユーザーであるときに、setuidをrsyncに使用してrootファイルにアクセスできます。 3)rsshを使用して上記すべてのセキュリティリスクを制限する

0