web-dev-qa-db-ja.com

SSH経由のrsyncは、www-dataが所有するファイルの所有権のみを保持します

Rsyncを使用して、Webフォルダー構造をローカルサーバーからリモートサーバーに複製しています。どちらのサーバーもubuntulinuxです。次のコマンドを使用すると、うまく機能します。

rsync -az /var/www/ [email protected]:/var/www/

ローカルシステムとリモートシステムのユーザー名は異なります。私が読んだことから、すべてのファイルとフォルダの所有者とグループを保存することは不可能かもしれません。それは問題ありませんが、両方のサーバーに存在するwww-dataユーザー専用の所有者とグループを保持したいと思います。

これは可能ですか?もしそうなら、私はそれをどのように行うのですか?

**編集**

Rsyncがリモートファイル同期の所有権とグループを保持できることについては、ここにいくつか言及されています: http://lists.samba.org/archive/rsync/2005-August/013203.html

**編集2 **

ここで役立つコメントと回答の多くのおかげで、私は最終的に望ましい効果を得ることができました。ソースマシンのIPが10.1.1.2であり、宛先マシンのIPが10.1.1.1であると仮定します。宛先マシンからこの行を使用できます。

Sudo rsync -az [email protected]:/var/www/ /var/www/

これにより、www-dataなどの共通のユーザー名を持つファイルの所有権とグループが保持されます。 rsyncなしでSudoを使用しても、これらの権限は保持されないことに注意してください。

13

--rsync-pathオプションを使用して、ターゲットホストでrsyncをSudoすることもできます。

# rsync -av --rsync-path="Sudo rsync" /path/to/files user@targethost:/path

これにより、targethostでuserとして認証できますが、それでもSudoを介して特権書き込み権限を取得できます。 Sudoによるパスワードの要求を回避するには、ターゲットホスト上のsudoersファイルを変更する必要があります。手順とサンプルについては、man sudoersまたはSudo visudoを実行してください。

Www-dataが所有するファイルの所有権を保持したいが、他のファイルは保持したくないとのことです。これが本当に当てはまる場合は、chownを実装するかrsyncを2回実行して権限を更新しない限り、運が悪い可能性があります。 1人のユーザーのみの所有権を保持するようにrsyncに指示する方法はありません。

そうは言っても、rsyncの--files-fromオプションについて読む必要があります。

rsync -av /path/to/files user@targethost:/path
find /path/to/files -user www-data -print | \
  rsync -av --files-from=- --rsync-path="Sudo rsync" /path/to/files user@targethost:/path

私はこれをテストしていないので、findの出力を--files-from=-にパイピングする方法が正確にわかりません。間違いなく実験する必要があります。

21
ghoti

同様の問題が発生し、rsyncコマンドをだましました。

rsync -avz --delete [email protected]:/ home // domains/site/public_html// home/domains2/public_html && chown -R wwwusr:wwwgrp/home/domains2/public_html /

&&は、rsyncが正常に完了すると、フォルダーに対してchownを実行します(1x '&'は、rsyncの完了ステータスに関係なくchownを実行します)

3
user2485267

ローカルシステムとリモートシステムのルートユーザーは異なります。

これは何を意味するのでしょうか? rootユーザーはuid 0です。どのように違いますか?

コピーするディレクトリへの読み取り権限を持つユーザーは、どのユーザー名がどのファイルを所有しているかを判断できます。ルートのみがファイルの所有権を変更できます書き込まれます

現在、ソースマシンでコマンドを実行しています。これにより、書き込みは[email protected]に関連付けられたアクセス許可に制限されます。代わりに、targetマシンでコマンドas rootを実行してみることができます。 読み取りソースマシンへのアクセスは問題ではありません。

したがって、ターゲットマシン(10.1.1.1)では、ソースが10.1.1.2であると想定しています。

# rsync -az [email protected]:/var/www/ /var/www/

グループが両方のマシンで一致していることを確認してください。

また、DSAまたはRSAキーを使用して[email protected]へのアクセスを設定し、パスワードが変動しないようにします。たとえば、ターゲットマシンのrootとして、次のコマンドを実行します。

# ssh-keygen -d

次に、ファイル/root/.ssh/id_dsa.pubの内容を取得し、ソースマシンの~user/.ssh/authorized_keysに追加します。ターゲットマシンからrootとしてssh [email protected]して、それが機能するかどうかを確認できます。パスワードプロンプトが表示された場合は、エラーログをチェックして、キーが機能しない理由を確認してください。

3
Graham

私の知る限り、あなたがルートでない場合、あなた以外の誰かにファイルをchownすることはできません。したがって、すべてのファイルは指定されたユーザーを所有者として作成されるため、www-dataアカウントを使用してrsyncする必要があります。したがって、後でファイルをchownする必要があります。

3
user1252065

そうですね、rsyncの課題を完全にスキップして、tarトンネルを介してこれを行うことができます。

Sudo tar zcf - /path/to/files | \
  ssh user@remotehost "cd /some/path; Sudo tar zxf -"

Grahamが説明したように、SSHキーを設定する必要があります。

これは、rsyncのような増分更新ではなく、完全なディレクトリコピーを処理することに注意してください。

ここでの考え方は次のとおりです。

  • ディレクトリをtarアップします。
  • tarファイルを作成する代わりに、tar出力をstdoutに送信します。
  • そのstdoutは、SSHコマンドを介して他のホストのreceiveing tarにパイプされます。
  • ただし、その受信tarはSudoによって実行されるため、ユーザー名を設定するための特権書き込みアクセス権があります。
2
ghoti

rsyncバージョン3.1.2

私は主にローカルでウィンドウを使用しているので、これはファイルをサーバーと同期するために使用するコマンドラインです(debian):

user@user-PC /cygdrive/c/wamp64/www/projects

$ rsync -rptgoDvhP --chown=www-data:www-data --exclude=.env --exclude=vendor --exclude=node_modules --exclude=.git --exclude=tests --exclude=.phpintel --exclude=storage ./website/ username@hostname:/var/www/html/website
0
chebaby