Skip to content

Instantly share code, notes, and snippets.

@matsuu
Forked from Tho85/Encbox.md
Last active December 20, 2015 01:09
Show Gist options
  • Save matsuu/6046968 to your computer and use it in GitHub Desktop.
Save matsuu/6046968 to your computer and use it in GitHub Desktop.

Dropbox風のプライベートで暗号化されたオープンソースの同期フォルダを作る

用意するもの:

  • UNIX系OSのクライアント。たとえばUbuntu 12.04 LTSなど。下記ソフトウェアが動作すれば他の環境でも問題ない(OSXも可)。
  • サーバ用途として安価でストレージを備えたUbuntu 12.04ベースのVPS。例えば月額5ドルで250GBを提供するBackupsyなど。クーポンコードはGoogleで検索すれば見つかる。

使用するソフトウエア:

  • Unison ファイル同期のため
  • EncFS フォルダ暗号化のため

Unisonでファイル同期をセットアップ

サーバ上で:

  • Unisonをインストール:

    $ sudo apt-get install unison
  • プロジェクト用のユーザを追加しきちんとパスワードを設定:

    $ sudo adduser encbox

クライアント上で:

  • Unisonをインストール:

    $ sudo apt-get install unison
  • SSHで公開鍵ベース認証を有効にする(your.vps.comは自分のサーバのホスト名に置き換えること):

    $ ssh-keygen
    $ cat ~/.ssh/id_rsa.pub | ssh encbox@your.vps.com "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"
  • 暗号化されたファイルを設置するフォルダを作成:

    $ mkdir ~/.encbox
  • Unisonのプロフィールを~/.unison/encbox.prfに作成 (your.vps.comは自分のサーバのホスト名に置き換えること):

    $ mkdir ~/.unison; tee ~/.unison/encbox.prf <<__EOF
    root = /home/$USER/.encbox
    root = ssh://encbox@your.vps.com/encbox
    prefer = ssh://encbox@your.vps.com/encbox
    
    backups = true
    times = true
    terse = true
    
    repeat = 2
    __EOF
  • 自動でファイル同期を行うためupstartファイルを作成(/etc/init/encbox.conf):

    $ sudo tee /etc/init/encbox.conf <<__EOF
    description "encbox"
    
    start on desktop-session-start
    stop on desktop-shutdown
    
    setuid $USER
    setgid $USER
    env HOME=$HOME
    
    respawn
    
    script
        bash -l -c "unison encbox; sleep 2"
    end script
    __EOF
  • Unisonを開始:

    # フォアグラウンドで実行する場合:
    $ unison encbox
    
    # システムサービスとして実行する場合:
    $ sudo service encbox start # starts your Encbox
    $ sudo service encbox stop  # stops your Encbox

    もしunisonがクライアント側にあるファイルについてエラーが発生した場合、一度だけ-ignorearchivesフラグをつけて実行:

    $ unison -ignorearchives encbox

EncFSを用いて暗号化されたフォルダを作成

クライアント上で:

  • EncFSをインストール:

    $ sudo apt-get install encfs
  • 暗号化されたディレクトリをマウント:

    $ encfs ~/.encbox ~/Encbox

    対象ディレクトリの作成に同意し、EncFSの設定されたパラノイアモードを使うためpを選択します。フォルダにパスワードを設定します。

  • これですべてです!~/Encbox内のすべてのファイルは暗号化され、サーバとクライアント間で暗号化されて同期されます。

Tips

  • ポーリングについて:

    残念ながら、Unisonはファイルシステムの通知機能(inotifyやlibnotifyなど)に対応していないため(上記プロフィール設定でrepeat = 2と設定したのであれば)2秒毎に変更内容をポーリングします。これはよくない設定ですが、今のところ私のノートPCのバッテリーへの悪影響は見受けられません。もし悪影響があるようであれば、repeatパラメータの値を上げてみてください。ポーリングによる帯域使用は無視できるほど小さいです(1ポーリングあたり0.9KB、3.5kbps)。

  • Unisonのバージョンについて:

    噂によると、サーバとすべてのクライアントはすべて同じバージョンのUnisonを使わなければ問題が発生すると言われています。しかし私は確認していません。

  • Android / iOS アプリについて:

    このセットアップはBoxcryptor Classicのスマートフォンアプリと互換性があります。EncFSフォルダをエキスパートモード(x)で作成する必要があるので、詳しくはBoxcryptor's Support Deskを参照してください。WebDAVサーバのインストールを選択し、WebDAV経由で/home/encbox/encboxを公開してください(このドキュメントの範疇ではありません)。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment