88171.net


rrsyncがステキ

必要なディレクトリだけcpioなりでアーカイブして、rsync over SSHで吸い出すことにする。 まだ設定してないけど。

88171.net :: FreeNAS稼働開始

というわけで、この鯖 (さくらのVPS) のクリティカルなデータを自宅のNASにバックアップしましょう、と、ようやく重い腰を上げた次第。で、前々から目をつけてたrrsyncがいざ使ってみたらちょいステキだったので軽く紹介してみようかと。

rrsyncとは何ぞや

かの有名なrsyncに付属のプログラム、というか200行ちょっとのPerlスクリプト。名前の由来はRestricted rsyncの略 (のはず) 。

いざインターネット越しでサーバからデータを吸い出す処理を自動化しようと思うと、これが単純に見えて意外とめんどくさい。

このモヤモヤをさくっと解決してくれるのが、rrsync。

ざっくり使い方と仕組み

まずはrrsyncをサーバ上のどっかに置く。Debian系のパッケージならたぶん /usr/share/doc/rsync/scripts/rrsync.gz にgzip圧縮されたものが、source tarballなら support/rrsync に生スクリプトがあるはず。

次にrsyncしたいアカウントで普通に鍵ペアを作って、公開鍵認証の設定をする。で、ログインできるのを確認したらサーバ側でおもむろにauthorized_keysの command= にrrsyncを設定する。アクセスを許可するサブディレクトリと、必要なら -ro (read-only) オプションも。

これだけで、そのアカウントの権限でSSHログインする際、許可されたサブディレクトリに対するrsyncアクセス ( -ro オプションが付いていればpullなアクセス) 以外は慈悲なく蹴られるようになる。

仕組みとしては、公開鍵の設定で起動されたrrsyncが本来リクエストされたrsyncのサーバ側コマンドライン (OpenSSHの仕様上、 $SSH_ORIGINAL_COMMAND から取れる) と自分の引数を突き合わせて、問題がなければrsyncをexecするというもの。まぁ言ってしまえば単なるラッパなんだけど、これマジメに自分で書こうと思うとかなりめんどいはず。

まとめ

めんどくさいので細かい設定手順とか書かなかったけど、まぁ実際に自分でrrsyncのソースを読んでみてくだせぇ。大した分量じゃないし、設定方法も書いてあるし。

rrsyncを適切に設定できれば、万一秘密鍵を盗まれても被害を最小限に抑えられます。

# まぁ、そもそも秘密鍵を盗まれるという管理体制が問題アリアリなんじゃ、というツッコミもあるけど、それはまた別のお話。

参考文献


2015-03-07追記

どうも2月の頭くらいからバックアップが止まってた様子。いろいろ調べてみたところこのFIXで、crontabにrsyncのコマンドラインを書くときにリモートパスをより一層ご丁寧にクォートするようになったことが原因らしい。

"user"@remote-host:\""remote-path"\"

つまりこれはFreeNASのエンバグか?と言えばそう簡単な話でもなくて、普通はサーバ側のrsyncもシェル経由で実行されるので、シェルがクォートを外してくれるから何ら問題はない。一方でrrsyncは $SSH_ORIGINAL_COMMAND を自力でバラして解釈するので、結果的にクォートを外さずにrsyncにパスを渡してしまい、

rsync: link_stat ""remote-path"" failed: No such file or directory (2)

とか言われるというわけ。そりゃ、ねーわ。

まぁイレギュラーなことしてるのはこっちですよねー、というわけでrrsyncにクォート外す処理を入れて回避。

--- ./rrsync    2015-03-07 00:37:07+09  1.1
+++ ./rrsync    2015-03-07 00:43:58+09  1.2
@@ -180,6 +180,8 @@
       s{^$}{.};
       die "$0: do not use .. in any path!\n" if m{(^|/)\\?\.\\?\.(\\?/|$)};
     }
+    # Remove quotation from args
+    s{^["'](.*)["']$}{$1} if m{^".*"$} or m{^'.*'$};
     push(@args, bsd_glob($_, GLOB_LIMIT|GLOB_NOCHECK|GLOB_BRACE|GLOB_QUOTE));
   }
 }

セキュリティ的に本当に大丈夫かなこれ‥‥。


第3次カメラブーム

人生で3度目のカメラブームが来てる。俺の中で。

第1次: 高校生の頃

天安門広場, Zenit-122

カメラ欲しいなと思い立ったものの、当時重度なマニアック志向と金欠を拗らせていたために、 カメラ雑誌の通販広告か何かで見かけて安かったZenit-122に飛び付いた。 既に根っからのメガネ野郎だったので、ファインダーとの隙間から入る光のせいで露出計 (そんな立派な機構でもなかったけど) が全っ然アテにならず、電池抜いてフルマニュアルでバシバシ撮ってた。 修学旅行で普通に中国に持って行って、クラスの連中から軽く引かれたりもした。

結果的に写真の (というか露出の) イロハをこのZenit-122に教えてもらったわけだけど、 今になって思い返せば、最初に使うカメラのチョイスとしては如何なものか、と我ながら思う。

第2次: 大学生の頃

我が母校, たしか SMENA 8M

現役のZenit使い、しかもフルマニュアルに抵抗がない人間の興味がいわゆるソビエトカメラ全般に向かうのは最早必然で、 結果的にSMENA 8MにZarya、Zorkiを入手した。 中でもZaryaは、FED-2からレンジファインダーを取っ払ってピント目測、 という至極漢気溢れる仕様だった割に、一番扱いやすくて好きなカメラだった。 シャッターリボン切れちゃって以来、修理にも出さずに放置しちゃってるけど。

ちなみに、ダークレス使ってモノクロネガの自家現像とか手を出してたのもこの頃。 まぁ深く追い求める気にはならなかったけど。

第3次: なう

EOS M + EF28mm F2.8

デジタルな時代の流れには抗えず、 IXY DIGITAL 25 ISとか何となくメインで使ってたものの、 型落ちのさらに販売終了目前で安くなってたのに釣られて (ついでにM2の新機能に全く魅力を感じなかったので) EOS Mのダブルレンズキットを衝動買いしたのが去年の秋。

台湾に持って行って久しぶりに街角スナップとかしてて気付いたのは、 やっぱAF遅いなぁ、ということ。 図ったかのようなタイミングでAF性能がガチ強化されたEOS M3が発表されたのは見なかったことにして、 MFで満足に使えるレンズとしてEF28mm F2.8を中古で入手。 AFは言うほど遅くない代わりに (ホントに) ジーコジーコうるさくてビックリしたけど、 どうせMFでしか使わないからいいかな、と。

まぁ今日CP+ 2015でM3の実機触らせてもらったら、 AFめっちゃ速いしダイヤル操作楽だしグリップ快適だしで正直ちょっとだけ いいな なんて思っちゃったんだけど、 まぁ買いませんよ。 Mを使い潰しますよ。


台北旅行

先週ちょっくら台北に行ってきたので、その写真を何枚か。

Canon EOS M, EF-M18-55mm F3.5-5.6 IS STM, ISO 100, f/5.6, 1/320 sec, 1/3 EV

Canon EOS M, EF-M18-55mm F3.5-5.6 IS STM, ISO 250, f/5.6, 1/100 sec, 1/3 EV

Canon EOS M, EF-M18-55mm F3.5-5.6 IS STM, ISO 160, f/5.6, 1/30 sec, 0.7 EV

Canon EOS M, EF-M18-55mm F3.5-5.6 IS STM, ISO 6400, f/5.6, 1/30 sec, -1 EV

また行きたい。