rrsync - 制限付き rsync ユーザを ssh ログイン経由でセットアップするスクリプト
rrsync [-ro|-wo] [-munge] [-absolute] [-no-del] [-no-lock] [-no-overwrite] DIR
オプションではない単一の引数は、使用を制限された DIR を指定します。ユーザのホームディレクトリからの相対パス、または絶対パスを指定できます。
このマニュアルページのオンライン版 (トピックの相互リンクを含む) は、 https://download.samba.org/pub/rsync/rrsync.1 です。
ユーザの ssh ログインを制限して、rsync 転送の実行のみを許可するには、次の 2 つの簡単な方法のいずれかを使用できます。
これらの設定は両方とも、対話型シェルの代わりにコマンドを強制的に実行できる ssh の機能を使用します。ただし、ユーザのホームシェルが bash の場合は、 "BASH のセキュリティ問題" 節 を参照して潜在的な問題を確認してください。
rrsync スクリプトを使用するには、ユーザの ~/.ssh/authorized_keys ファイルを編集し、制限する各 ssh-key 行の前に、次のような接頭辞を追加します (後にスペースを 1 つ追加します):
command="rrsync DIR" command="rrsync -ro DIR" command="rrsync -munge -no-del DIR"
次に、rrsync スクリプトに必要なオプション制限があることを確認します。複数の設定が必要な場合は、スクリプトを一意の名前でローカルの bin ディレクトリにコピーすることもできます。転送をさらに制限する場合は、DIR の前に 1 つまたは複数の rrsync オプションを指定できます。
rsync デーモンのセットアップを使用するには、ユーザの ~/.ssh/authorized_keys ファイルを編集し、制限する必要がある各 ssh-key 行の前に、次のいずれかのような接頭辞 (スペースが続く) を追加します。
command="rsync --server --daemon ." command="rsync --server --daemon --config=/PATH/TO/rsyncd.conf ."
次に、rsyncd.conf ファイルが、1つ以上のモジュール名と適切なパスおよびオプション制限を使用して作成されていることを確認します。もし rsync の --config オプションが省略された場合、~/rsyncd.conf を既定値とします。rsync デーモンの設定方法の詳細については、rsyncd.conf(5) マニュアルページを参照してください。
rrsync を使用する場合、許可されたキーごとに制限されたディレクトリが 1つだけ存在できます。一方、デーモンのセットアップでは、構成ファイル内に複数のモジュール名を含めることができ、それぞれに独自のパス設定があります。
このマニュアルページの残りの部分は、rrsync スクリプトを使用するためのものです。
rrsync スクリプトは、送信されたパス引数を検証し、指定された DIR 内に収まるように制限しようとします。
rrsync スクリプトは (既定で) rsync の --copy-links オプションを拒否するため、コピーが DIR 内のシンボリックリンクを間接参照して DIR 外のファイルにアクセスすることはできません。
rrsync スクリプトは、rsync の --protect-args (-s) オプションを拒否します。これは、スクリプトがチェックできないオプションがサーバ側に送信される可能性があるためです。--protect-args をサポートしたい場合は、daemon-over-ssh セットアップを使用します。
rrsync スクリプトは、実際の rsync が server コマンドを実行するときに使用する rsync のオプションのサブセットのみを受け入れます。いくつかの追加の便利なオプションも含まれており、BackupPC と対話したり、便利なユーザオーバーライドを受け入れたりするのに役立ちます。
オプション処理をカスタマイズしたい場合は、スクリプト (またはそのコピー) を手動で編集できます。
ユーザがホームシェルとして bash を設定している場合、bash はあまりにも便利で、強制されたコマンドを実行する前にユーザのログイン bashrc ファイルが実行しようとするかもしれません。これは、ユーザが自分のホームにある bashrc ファイルを、制限付きコピーや共有ホームディレクトリなどを使って、何らかの方法で更新できる場合には問題になります。
この問題を回避する簡単な方法の 1つは、ユーザを dash などのより単純なシェルに切り替えることです。新しいホームシェルを選択するときは、セキュリティの問題を回避できるかどうかが不明であるため、偽装している bash を選択していないことを確認してください。
もう 1 つの修正方法は、ユーザのホームディレクトリが共有マウントではないこと、および制限されたディレクトリ以外にファイルをコピーする手段がないことを確認することです。そのためには、サーバ側で強制的にシンボリックリンクの破棄を有効にする必要があるかもしれません。
openssh の将来のバージョンでは、強制コマンドの処理方法が変更され、ユーザのホームシェルを使用しなくなる可能性があります。
~/.ssh/authorized_keys ファイルには、次のような行が含まれている場合があります:
command="rrsync client/logs" ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAzG... command="rrsync -ro results" ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAmk...
~/.ssh/authorized_keys
rsync(1), rsyncd.conf(5)
このマニュアルページは、バージョン 3.5.1 の rsync に対応しています。
rsync は、GNU General Public License の下で配布されます。詳細は、COPYING ファイルを参照してください。
rsync に関する Web サイトは、 https://rsync.samba.org/ にあります。このサイトの github プロジェクトは、 https://github.com/RsyncProject/rsync です。
元の rrsync perl スクリプトは Joe Smith によって書かれました。後に多くの人々がそれに貢献しました。Python バージョンは Wayne Davison によって作成されました。