[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[linux-users:102135] Re: rsyncのパスワードについてお尋ねします。


ひろせといいます

on "[linux-users:102130] Re: rsyncのパスワードについてお尋ねします。"
   <JA20040306163720.25344656@xxxxxxxxxxx>
at Sat, 6 Mar 2004 16:41:01 +0900
   seijun86@xxxxxxxxxxx wrote:

> > ssh+rsyncをcronで自動実行させるためにパスワード(Passphraseのこと?)を
> > 省略するには秘密キーと公開キーをsskeygenで作るときにPassphraseなしにすれ
> > ばよい。私はその方法でssh+rsyncをcronで動かしています。何も難しい話はな
> > いと思います
> ご指示の方法で、ssh+rsyncができました。ただ、私の勘違いでなければ、接続元から
> 接続先にIPアドレスの指定のみで接続できてしまうので、セキュリティ上の問題があ
> るような気がしました。もしそうだとした場合、セキュリティ上の対策を取っておられ
> ましたら、ご教示をお願いしたいのですが。全くの見当違いでしたら、勘弁のほどお願
> い申し上げます。

私は別ホストにバックアップコピーするのに、それ専用のユーザーを作ってパ
スフレーズなしの秘密鍵を使い、cron から rsync -e ssh を実行するようにし
ています。

以下、ssh-agent 再利用ではなくパスフレーズなし秘密鍵を使っている理由をつらつ
らと書きますが、つっこみあればよろしくお願いします。

                                  //

ssh-agent 方式にしてもパスフレーズなし方式にしても、接続元ホストで不正
にそのユーザーになられてしまうと接続先ホストまで ssh を使って侵入されか
ねません。例えパスワードを潰して login できないようにしていても、接続元
ホストの root 権限を奪取されて su されたら同じことで、接続元ホストだけ
でなく接続先ホストも危険にさらされてしまいます。

そこで接続先ホストでは特定のコマンドだけが実行できるようにし、かつ、仮
想端末を割り当てないようにするために、接続先の authorized_keys の当該公
開鍵の先頭に command と no-pty オプション (sshd(8)) を追加します。
command に書くものは、接続元ホストから rsync に -vv オプションをつけて
実行して得られる情報を元にします。例えば、

  % rsync -vv -az -e ssh REMOTE:/R/BACKUP/DIR/ /L/BACKUP/DIR/
  opening connection using ssh REMOTE rsync --server --sender -vvlogDtprz . /R/BACKUP/DIR/
  receiving file list ...
  (snip)

ならば、-vv を除外したものを command に指定します。

  command="rsync --server --sender -logDtprz . /R/BACKUP/DIR/"

これでバックアップ用ユーザーで接続先ホストに不正に ssh アクセスされて
もできることを制限することができました。

次に、パスフレーズなし方式で秘密鍵を外部ホストに持ち出された場合を考え
ます。ssh-agent 方式ならばパスフレーズが破られない限り秘密鍵を使われる
ことはないのですが、パスフレーズのない秘密鍵を持ち出されると簡単に外部
ホストから接続先に ssh アクセスされてしまいます。いくらコマンドを限定
しているとはいえこれは気持悪いので、from オプション (sshd(8)) を使って
接続先ホストにアクセスできるのは期待した接続元ホストだけに限定するよう
にします。

この 2 点で両方式のセキュリティリスクは同程度となったので、「手間が少
ない」方を採用します。

ssh-agent 方式の場合は、

  1. ssh-agent を立ち上げる。
  2. ssh-add で鍵を登録する。
  3. ssh-agent を再利用する。

が必要になり、1 は rc のどこかに書いておけばいいし、3 は ssh-env のよう
なものを利用すればいいので手間はかかりませんが、2 はパスフレーズを入力
する以上、どうしても手動になり手間がかかります。また、接続元ホストを
reboot した後にすっかり ssh-add するのを忘れていてバックアップがとれて
いなかった、というミスも考えられます。一方、パスフレーズなし方式はこの
ような手間は一切かかりません。

以上の理由より、ssh-agent 方式ではなくパスフレーズ方式を使い、接続先ホ
ストの authorized_keys を次のようにして更にいくつか制限を加えています。
# 192.168.0.1 は接続元ホストの IP アドレス。

command="rsync --server --sender -logDtprz . /R/BACKUP/DIR/",from="192.168.0.1",no-port-forwarding,no-agent-forwarding,no-pty ssh-rsa ...(以下略)...


ではでは

-- 
ひろせ

この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
Follow-Ups: References: