--- title: rsyncでセキュアにローカル-リモート間のバックアップを行う author: kazu634 date: 2008-08-16 wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:4211;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - linux - rsync - ssh --- <div class="section"> <p> <a href="http://d.hatena.ne.jp/sirocco634/20080809#1218278616" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/sirocco634/20080809#1218278616', '2008-08-09 – 武蔵の日記');" target="_blank">2008-08-09 – 武蔵の日記</a>で<a href="http://d.hatena.ne.jp/otune/" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/otune/', 'id:otune');">id:otune</a>さんに指摘されたので、もう少しsshについて調べてみた。 </p> <h4> sshで接続したクライアントの利用を制限するのはサーバ側のauthorized_keys </h4> <p> ここら辺が参考になる: </p> <ul> <li> <a href="http://sonic64.com/2004-11-17.html" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://sonic64.com/2004-11-17.html', 'ssh scp sftp の正しい自動実行方法');" target="_blank">ssh scp sftp の正しい自動実行方法</a> </li> <li> <a href="http://sonic64.com/2004-11-22.html" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://sonic64.com/2004-11-22.html', 'authorized_keysに書く no-pty と command="" の意味');" target="_blank">authorized_keysに書く no-pty と command="" の意味</a> </li> </ul> <p> ここを読むとauthorized_keysを編集する必要があることがわかる。特に重要なのは </p> <ul> <li> command </li> <li> no-pty </li> </ul> <p> の二つの設定に思える(やや自信なし)。no-ptyはmanに </p> <blockquote> <p> 端末の割り当てを禁止します(仮想端末の割り当てが失敗するようになります)。 </p> </blockquote> <p> とある。要はsshでログインしても、端末にアクセスできなくなる。でも、これだとリダイレクトをしてコマンドを実行できてしまうことになる。参考にしたところではこれが例として取り上げられていた: </p> <blockquote> <p> $ echo “cat .ssh/authorized_keys2” |ssh -i /home/hiroaki/.ssh/auto remotehost.example.com -l hiroaki </p> </blockquote> <p> これでは制限していることにならないので、commandでクライアントが使えるコマンドを制限することができる。たとえば </p> <blockquote> <p> no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command=”ls -al” ssh-rsa [以下略] </p> </blockquote> <p> とすると、クライアントは「ls -al」を実行して接続が終わることになる。 </p> <p> とりあえず私は </p> <blockquote> <p> no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command=”ls -al” ssh-rsa [以下略] </p> </blockquote> <p> と設定しておいた。<span class="footnote"><a href="/sirocco634/#f1" name="fn1" title="no-port-forwarding, no-X11-forwarding, no-agent-forwardingの意味がいまいち理解できていない…">*1</a></span> </p> <h4> 後はcommandの設定のみ </h4> <p> rsyncは仕組み上、クライアント側で実行したrsyncがサーバ側のrsyncを実行する形式をとる。だからサーバ側でどのようにrsyncを実行しているかを調べてcommandを指定してあげればいい。 </p> <p> そのために「-v」スイッチをつけてクライアント側でrsyncを実行する。そうすると、サーバ側でどのようなスイッチをつけてrsyncが実行されているかわかる。私の場合はこんな感じだった: </p> <blockquote> <p> rsync –server –sender -vlogDtprz . /Users/simoom634/Documents/howm </p> </blockquote> <p> 後はこれはauthorized_keysに反映させるだけ。 </p> <h4> 結局できあがったauthorized_keys </h4> <p> こんな感じになった: </p> <blockquote> <p> no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command=”rsync –server –sender -vlogDtprz . /Users/simoom634/Documents/howm” ssh-rsa [以下略] </p> </blockquote> <h4> 参考にしたサイト </h4> <ul> <li> <a href="http://www.sakana.fr/blog/2008/05/07/securing-automated-rsync-over-ssh/" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://www.sakana.fr/blog/2008/05/07/securing-automated-rsync-over-ssh/', 'Securing automated rsync over SSH – Tech@Sakana – A sysadmin’s blog');" target="_blank">Securing automated rsync over SSH – Tech@Sakana – A sysadmin’s blog</a> </li> </ul> </div> <div class="footnote"> <p class="footnote"> <a href="/sirocco634/#fn1" name="f1">*1</a>:no-port-forwarding, no-X11-forwarding, no-agent-forwardingの意味がいまいち理解できていない… </p> </div>