rsync

2.6.3pre1 以前の rsync に脆弱性。


rsync は rcp を非常に強力にしたようなものです。 rdist より便利です(特に ssh と併用する場合は)。 また,単なる cp の強化版としても使えます。

ホームページは http://rsync.samba.org/ です。samba で有名なところですね。 ダウンロードは Ring Server の /pub/net/rsync あたりからするのがいいと思います。

rsync は非常に賢いことをしています。 A から B にファイル転送するなら, B のマシンのファイルを500〜1000バイトのブロックに分け, ブロックごとにチェックサムを求め, それを A に送ってもらいます。 A はこれを A のマシンのファイルと照合し, バイナリ差分にあたる情報だけ B に送ります。 詳しくは次の文献をご覧下さい。 オリジナルの PS 版 TR-CS-96-05.ps.gz とその HTML 版 があります。

Andrew Tridgell and Paul Mackerras. The rsync algorithm. TR-CS-96-05, The Australian National University, June 1996.

インストールは ./configuremakemake install だけです。

使い方は通常の rcp とほぼ同じですが, オプションがたくさんあります。一度 man rsync してみてください。

たとえば自宅のマシンからリモートのマシン www~/public_html 以下の新しい部分を送るには

rsync -auvvzb --exclude '*~' ~/public_html www:
とします。ここで
     -a   archive (ファイルについての情報を保つ)
     -u   update  (より新しければ更新しない)
     -v   verbose (-vv more verbose)
     -z   compress with zlib (電話線経由ならずいぶん速くなります)
     -b   backup  (古いファイルは ~ の付いた名前になる)
です。

さらに SSH を使うなら

rsync -auvvzb -e ssh --exclude '*~' ~/public_html www:
とします。相手方に ssh1 しかなければもちろん -e ssh1 とします。

相手方にも rsync がインストールされて root のサーチパスに入っていなければなりません。

私は自宅のマシンの ZIP ドライブの /zip/public_html からインターネット経由で www.matsusaka-u.ac.jp のホームディレクトリの public_html をアップデートする次のようなシェルスクリプトを作って使っています。

#! /bin/sh
rsync -auvvzb -e ssh --exclude '*~' --exclude 'xxx/' /zip/public_html www.matsusaka-u.ac.jp:

逆に向こうからこちらに新しい差分を送ってきたいときは次のようにします。

rsync -auvvzb -e ssh --exclude '*~' www.matsusaka-u.ac.jp:public_html /zip

トラブル

最近の rsync が一般ユーザで -a オプションを付けたとき次のようなメッセージを出すことがあります:

rsync error: partial transfer (code 23) at main.c(925)

これはファイルの owner が違っていて変更できなかったといったことのようです。 実際,-v で次のようなメッセージが出ます。

chown hoge/hoge/hoge : 許可されていない操作です

-a-rlptgoD と等価ですが一般ユーザでは goD オプションは一般に使えないので,-a ではなく -rlpt を指定すればいいのだろうと思います。


奥村晴彦

Last modified: 2004-08-16 15:15:30