rsyncでユーザー/グループの所有権を任意にマッピングする方法


17

ソース(ローカル)マシンのユーザーXおよびグループYに属するすべてのファイルが宛先(リモート)マシンのユーザーWおよびグループZにマップされるように、ディレクトリをリモートサーバーにrsyncする必要があります。トランスポートとしてsshを使用して可能であれば、rsyncデーモンを使用する必要がある場合も問題ありません。

それを行う方法はありますか?次のような任意のユーザー/グループマップを確立する方法を探しています

local user X => remote user W
local group Y => remote group Z
... and as many of these as needed.

これはかなり一般的なユースケースになるはずですよね?たとえば、自分のユーザー名がXであるローカルコンピューターにファイルがあり、それらのファイルをWebサーバーにアップロードする必要があります。ファイルは、ユーザーと同じ名前または同じUIDを持たない特定のユーザーに属している必要があります。私のパソコン。

rsyncのmanページでそれを見つけることができません...

ローカルとリモートの両方のマシン上のLinux(Ubuntuローカル、centOSリモート)

私が試したコマンド:rsync -avz / path / to / local root@myhost.com:/ path / to / remote


1
してください、常にあなたのOSが含まれます。多くの場合、解決策は使用しているオペレーティングシステムによって異なります。Windows、Linux、Unix、OSX、BSDを使用していますか?どのバージョン?
terdon 2013年

回答:


21

Rsync バージョン3.1.0では、その目的のために--usermapおよび--groupmapオプションが正確に導入されました。manページを参照してください


これは知っておくと便利です。これには間違いなくユースケースのシナリオがあります。たとえば、2台のIcingaサーバーがあり、マスターからスレーブへの構成ファイルの一方向同期を実行する必要があります。しかし、マスターのicingaは、スレーブのicingaとは異なるuidです。したがって、rsyncがこれを処理できることを知っておくと役に立ちます。
Michael Martinez

バージョンノート:Ubuntu v16.04にはv3.1.1、CentOS 7にはv3.1.2、CentOS 6にはv3.0.6があります。これは新しいディストリビューションに最適です。
jimp 2018

4

rsyncの最新バージョン(少なくとも3.1.1)では、「リモート所有権」を指定できます。

--usermap=tom:www-data

Tomの所有権をwww-data(別名PHP / Nginx)に変更します。Macをクライアントとして使用している場合は、brewを使用して最新バージョンにアップグレードします。そして、サーバー上でアーカイブソースをダウンロードし、「作成」してください。


私にとっては--chown = tom:www-dataとして機能します
フェデリコガリ

0

ファイルの所有権を任意のユーザーに変更する場合は、最初に宛先ボックスのrootになる必要があります。

私はそのような機能がrsyncに統合されているとは思いませんが、rsyncを実行したfind後にを実行することで実現できます。

たぶん、このようなコマンドでうまくいくでしょう:たとえば、UID 1000 => 505およびUID 1001 => 700から変換します:

find /your/rsynced/path -user 1000 -exec chown 505 {} \;
find /your/rsynced/path -user 1001 -exec chown 700 {} \;

多くのユーザーがいる場合は、好みの言語でマッピング付きのループを使用することを検討してください。

楽しんで。


わかりましたので、rsyncでそれを行う方法はありません。驚いたことに、私にはそのような明らかな必要性が感じられました。
matteo 2013年

1
@matteoこれを使用する場合は注意してください。リモートマシンにID 1000または1001のユーザーがいる場合、リモートの場所に正当に所有されているファイルが存在する可能性があり、それらを所有すると問題が発生する可能性があります。
terdon 2013年

@terdonリモートマシンに名前のないユーザーがいるのでしょうか?(ファイルが一覧表示されるときに名前の代わりにIDが表示される場合、それはユーザーに名前がないことを意味しますよね?)
matteo

1
@matteoいいえ、すべてのユーザーにはユーザーIDと名前があります。ほとんどのDebianベースのシステム(およびおそらく他のシステム)では、最初のデフォルトユーザーはユーザー1000 idです。マシンで実行してみてください。したがって、このようなIDを使用する場合は、リモートマシンに同じIDを持つユーザーがいないことを想定しており、そうではない可能性があります。
terdon 2013年

私の場合、サーバーにUID 1000のユーザーはいません。少なくとも/ etc / passwdにリストされていません。「ls -la」でファイルを一覧表示すると、1000に属するファイル(ユーザー1000がデフォルトのユーザー「teo」であるローカルマシンからのrsync -avzの結果)が「1000」で表示されるため、これは私が推測したことです。 "所有者として。そのIDを持つユーザーがいて、その名前が "Someone"である場合、ファイルの所有者はlsの出力で "Someone"と表示されますよね?とにかく、それは考慮に入れるべき有用な警告です、ありがとう。
matteo 2013年

-1

接続sshするにはユーザー名を入力する必要があることを理解できません。そのユーザー名は、グループZに属するリモートマシン上のユーザーWになります。したがって、すべてが希望どおりに転送されます。

rsync /path/to/local userX@remote.com/path/to/remote

OPのコメントに応じて編集します。

このユーザーマッピングを行い、アクセス許可の設定を失わないようにする場合は、を使用しないでください-a。まず、rsyncを実行しmywww@myhost.comて正しいユーザー名を取得します。次に、-a所有権を維持する代わりに、手動でオプションを指定します。からman rsync

    -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
    -r, --recursive             recurse into directories
    -l, --links                 copy symlinks as symlinks
    -p, --perms                 preserve permissions
    -t, --times                 preserve modification times
    -g, --group                 preserve group
    -o, --owner                 preserve owner (super-user only)
    -D                          same as --devices --specials

したがって、-a上記のオプションをすべてアクティブにしますが、グループまたは所有者を保持する必要はありません。このコマンドはあなたが望むことをするはずです:

rsync -rlptDvz /path/to/local mywww@myhost.com:/path/to/remote

としてログインし、mywww所有者/グループ情報を保存していないため、によって作成されたコピーrsyncmywwwユーザーに属します。


いいえ、rsync -avz / path / to / local root@myhost.com:/ path / to / remoteを実行します。私の質問は、ローカルマシンのユーザー "x"に属するファイルをサーバーのユーザー "w"に再マップするにはどうすればよいですか?私のコンピュータでは、ファイルは「teo」に属しています。サーバーには「teo」というユーザーすらいません。「mywww」のように、Apacheが使用するユーザーである必要があります。グループについても同じです。デフォルトでは、rsyncは所有者を「teo」として保持しようとしますが、そのようなユーザーは存在しないため、UIDは保持され、サーバーに存在しないユーザーであるユーザー「1000」に属するファイルになります
matteo

ところで、同時に-aオプションですでに行っているファイルのアクセス許可を保持する必要があります。つまり、ファイルのアクセス許可を維持する機能を
失う原因

@matteo -aは、所有者とグループの保持オプションを有効にするためです。私の更新された答えを見てください。
terdon 2013年

1
@matteoは、質問するときに実際に必要なものを説明してください。そうすることで、不完全な回答を提供する時間を無駄にすることがなくなります。次回は、i)使用した実際のコマンドを含めることを忘れないでください(rsyncはデフォルトでは何も保存しません。使用すると、-aそのようになりました)ii)持つすべての制約を明確に説明します。最後のコメントまで単一のユーザーについて言及しました。iii )OSについて言及します。とにかく、これを行う方法は、rsync1つのファイルセットをとしてコピーmywww@remoteし、次のセットをとしてコピーすることroot@remoteです。
terdon 2013年

1
@matteo本当に明確ではなかったのは、-a所有権を維持するために使用していたことです。あなたが与えた例は、これを1人のユーザーに対して行うだけでよいことを示唆しています。とにかく、を使用することをお勧めします。rsyncユーザーごとにコピーするさまざまなファイルのリストを作成し、関連するユーザー名でリモートマシンに接続する複数のrsyncを実行します。それはより簡単で安全になります。
terdon 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.