EncFS

提供: ArchWiki
移動先: 案内検索

関連記事

EncFSeCryptfs と同じようなユーザースペースのスタック暗号ファイルシステムで、最小限の手間でデータを保護することができます。EncFS は FUSE を利用して暗号化したディレクトリをユーザーが指定した別のディレクトリにマウントします。TrueCryptdm-crypt などの他の暗号化システムのようにループバックシステムを使うことはありません。

Linux でディスク暗号化をしたいと思ったら、確実に、EncFS が一番シンプルなソフトウェアです。

EncFS は他の暗号化ソフトウェアと比べると様々な利点と欠点が存在します。まず、EncFS は使用するのに root 権限を必要としません。誰でも暗号化したファイルのリポジトリを作成することができます。次に、EncFS では何かファイルを作成したりファイルシステムを作成する必要がありません。EncFS は既存のファイルシステムでそのまま動作します。

しかしながら、このことは欠点にもなりえます。暗号化されたファイルが独自のファイルに保存されないため、システムにアクセスすることさえできれば、ディレクトリ構造やファイルの数、ファイルのサイズや変更日時などは丸わかりです。ただ、ファイルの中身を見ることはできません。

このようなデータ保護手法は完璧とはとても言えませんが、場合によっては役に立ちます。

EncFS と他のデータ暗号化ソリューションの比較については、ディスク暗号化#比較表にさらに詳しく載っています。

eCryptFS との比較

eCryptfs はカーネルスペースで実装されており設定の難易度がやや高くなっています。eCryptFS では様々な暗号化オプション (使用する暗号や鍵のタイプなど) を覚えておかなければなりませんが、EncFS ではその必要はありません。EncFS は暗号化のメタデータをディレクトリごとの設定ファイル (.encfs6.xml) に保存するため何も記憶する必要はないのです (パスフレーズは別ですが)。eCryptFS の開発者は (カーネルとユーザースペースの) コンテキストスイッチによるオーバーヘッドがないために eCryptFS の方が高速だと主張しています。

インストール

公式リポジトリから encfs パッケージをインストールしてください。

警告: encfs のセキュリティ レビュー (2014年2月) によって安定版リリースの 1.7.4 には様々なセキュリティの問題があることが発見されています (2014年6月)。このリリースを使う前に、このレポートと資料を読んで最新の情報を確認してください。

使用方法

安全なリポジトリを作成するには、次を入力:

$ encfs ~/.name ~/name

絶対パスを使う必要があるので注意してください。このコマンドを実行するとデフォルト設定 (paranoid オプション) とエキスパート設定のどちらかを使うか決めるプロンプトが表示されます。後者の設定ではアルゴリズムなどのオプションを指定することが可能です。前者ではまあまあ安全なデフォルト設定が使われます。暗号化のキーを入力した後、エンコードされたファイルシステムが作成されたマウントされます。エンコードされたファイルは、上の例では、~/.name に保存され、暗号化されてない状態のファイルは ~/name に置かれます。

ファイルシステムをアンマウントするには、次を入力:

$ fusermount -u ~/name

ファイルシステムを再マウントするには、最初のコマンドを実行して、エンコードに使用するキーを入力してください。キーを入力すれば、ファイルシステムはまたマウントされます。

パスワードの変更

EncFS で暗号化したディレクトリのパスワードを変更するには、以下のコマンドを使います:

$ encfsctl passwd ~/.name

~/.name をエンコードされたファイルが含まれているディレクトリのパスに置き換えてください。現在のパスワードが要求され、それから新しいパスワードを設定できます。

ユーザーフレンドリーなマウント方法

Gnome Encfs Manager を使ってマウント

Gnome Encfs Manager は使いやすい encfs の管理とマウントツールで、隠匿物ごとに設定を行ったり、Gnome Keyring をサポートしていたり、Cryptkeeper のようなトレイメニューがあります。AppIndicator API を使用していて多数のユニークな機能が存在します。

gnome-encfs-managerAUR もしくは開発版の gnome-encfs-manager-bzrAUR パッケージでインストールできます。

gnome-encfs を使ってマウント

gnome-encfs はキーリングにパスワードを保存することにより EncFS フォルダを GNOME デスクトップに統合します。また、任意で GNOME の自動起動機構を使ってログイン時にフォルダをマウントすることもできます。https://bitbucket.org/obensonne/gnome-encfs/ を見て下さい。マウントを自動化したりパスワードをユーザーのパスワードと一緒にする必要がないという利点があります。

CryptKeeper トレイアイコンを使ってマウント

とてもシンプルなアプリケーションです。AUR から cryptkeeperAUR をインストールして X セッションに追加してください。

encfsui を使ってマウント

bash スクリプトの encfsui はシンプルな zenity による gui で EncFS コマンドラインユーティリティを使って暗号化ディレクトリをマウント・アンマウントします。デスクトップランチャーも含まれています。encfsuiAUR パッケージでインストールしてください。

fstab によるマウント

エントリを /etc/fstab に追加することで mount /target/path コマンドだけで encfs ボリュームをマウントできるようになります:

/etc/fstab
encfs#/path/to/encfs/data  /mnt/decrypted  fuse  noauto,user  0  0

noauto オプションを指定することで起動時にボリュームがマウントされなくなります。root だけでボリュームをマウントする場合は user は省略してかまいません。

pam_encfs を使ってログイン時にマウント

pam_encfsAUR をインストールしてください。参照:

シングルパスワード

警告: ログイン時に使用するパスワードを (ログイン中に encfs がマウントできるように) encfs にも使用する (例: try_first_pass または use_first_pass を使う) 場合は、SHA パスワードハッシュ (ラウンド数が多い SHA512 を推奨) と安全なパスワード (これが一番重要) を使うようにしてください。パスワードのハッシュは /etc/shadow に暗号化されてない状態で保存されるので、encfs のパスワードを得るためにクラックされる可能性があるからです。

/etc/pam.d/

'pam_unix.sotry_first_pass パラメータを使用する場合、ログイン時に使用するのと同じパスワードを使うように EncFS を設定する必要があります (もしくは EncFS で設定したパスワードをログイン時に使うようにする)。このパラメータを使わない場合は2つのパスワードを設定する必要があります。

login

このセクションではログイン時に仮想端末で encfs を自動マウントする方法を説明します。

ノート: GDM を使用する場合は、このセクションではなくて下の GDM のセクションを見て下さい。

/etc/pam.d/login ファイルを編集:

#%PAM-1.0

auth		required	pam_securetty.so
auth		requisite	pam_nologin.so
auth		sufficient	pam_encfs.so
auth		required	pam_unix.so nullok try_first_pass
#auth		required	pam_unix.so nullok
auth		required	pam_tally.so onerr=succeed file=/var/log/faillog
# use this to lockout accounts for 10 minutes after 3 failed attempts
#auth		required	pam_tally.so deny=2 unlock_time=600 onerr=succeed file=/var/log/faillog
account		required	pam_access.so
account		required	pam_time.so
account		required	pam_unix.so
#password	required	pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
#password	required	pam_unix.so md5 shadow use_authtok
session		required	pam_unix.so
session		required	pam_env.so
session		required	pam_motd.so
session		required	pam_limits.so
session		optional	pam_mail.so dir=/var/spool/mail standard
session		optional	pam_lastlog.so
session		optional	pam_loginuid.so
-session	optional	pam_ck_connector.so nox11
#Automatic unmount (optional):
#session	required	pam_encfs.so
警告: 自動アンマウントは他にセッションが存在する場合も行われます。例: VC でログアウトすると (まだ使用中の) GDM セッションによってマウントされた encfs もアンマウントしてしまいます。
gdm

このセクションではログイン時に GDM で encfs を自動マウントする方法を説明します。

ノート: まず最初に仮想端末での自動マウントを試してみて下さい。上のセクションを参照。

/etc/pam.d/gdm-password ファイルを編集して下さい。

以下を gdm-password の一番下に挿入します (上書きしないでください):

#%PAM-1.0
auth            requisite       pam_nologin.so
auth            required        pam_env.so
auth            sufficient      pam_encfs.so
auth            required        pam_unix.so try_first_pass
auth            optional        pam_gnome_keyring.so
account         required        pam_unix.so
session         required        pam_limits.so
session         required        pam_unix.so
session         optional        pam_gnome_keyring.so auto_start
password        required        pam_unix.so
session         required        pam_encfs.so

保存して終了してください。

設定

/etc/security/pam_encfs.conf を編集:

推奨: 次の行をコメントアウトしてください:

encfs_default --idle=1

このフラグによって1分間操作がないと暗号化されたフォルダをアンマウントします。ログイン時に自動マウントする場合、ログインしている間はずっとマウントしていて欲しいということもあるでしょう。

一番下にある、既存のデモエントリをコメントアウトして以下を追加:

#USERNAME       SOURCE                                  TARGET PATH                 ENCFS Options           FUSE Options
foo             /home/foo/EncryptedFolder             /home/foo/DecryptedFolder       -v                    allow_other
ノート: pam_encfs を使ってログイン時に複数の EncFS フォルダをマウントすることはできません。/etc/security/pam_encfs.conf に複数のエントリを指定しても、一番最初のエントリだけマウントされ、他のエントリは無視されます。ログイン時に複数の EncFS フォルダをマウントするには pam_mount を使う必要があります。詳しくは #pam_mount を使ってログイン時にマウントを見てください。

また、以下の行が存在する場合、allow_root をオプションから外してください。オプションを外さないと上記で定義した allow_other と衝突します。

fuse_default allow_root,nonempty

次に /etc/fuse.conf を編集して、以下をアンコメント:

user_allow_other

設定をテストするには、新しい仮想端末を開いて (例: Ctrl+Alt+F4) ログインを行なって下さい。pam が EncFS フォルダをマウントするはずです。

pam_mount を使ってログイン時にマウント

先に pam_mount をインストール・設定してください。EncFS のマウントは pam_mount の設定ファイルに以下のように指定できます:

/etc/security/pam_mount.conf.xml
<volume fstype="fuse" path="encfs#/path/to/encfs/encrypted/data" mountpoint="/path/to/decrypted/data/mountpoint" options="nonempty" />

EncFS のパスワードはユーザーアカウントのパスワードと一緒にする必要があります。nonempty オプションを指定するとマウントポイントが空でない場合でも暗号化されたファイルシステムがマウントされます。マウントして欲しくない場合、オプションを削除してください。

設定ファイルに <volume> エントリを複数指定することで EncFS フォルダを複数マウントできます。

fsniper を使って EncFS フォルダが入った USB ドライブが接続されたときにマウント

EncFS フォルダが入った USB ドライブが接続されたときに (パスワードをきいて) encfs を自動マウントするシンプルな方法として fsniperAUR (inotify を使用してファイルシステムを監視するデーモン) と git (askpass バイナリ) を使います。

詳しくは https://github.com/Harvie/Programs/tree/master/bash/encfs/automount を参照 (手順で使用されるファイルの最新版)。

手順

  1. まず USB の自動マウントが使えるようにしておく必要があります - ThunarNautilus などで設定します。
  2. ドライブ上に暗号化フォルダを作成、例: encfs /media/USB/somename /media/USB/somename.plain (そして全てをアンマウント)。
  3. ~/.config/fsniper/config ファイルを作成:
    watch {
    	/etc/ {
    		mtab {
    			# %% is replaced with the filename of the new file
    			handler = encfs-automount.sh %%;
    		}
    	}
    }
    
  4. ヘルパースクリプトをインストール:
    #!/bin/sh
    #	~/.config/fsniper/scripts/encfs-automount.sh
    # Quick & dirty script for automounting EncFS USB drives
    # TODO:
    #  - Unmounting!!!
    #
    ASKPASS="/usr/lib/git-core/git-gui--askpass"
    
    lock=/tmp/fsniper_encfs.lock
    lpid=$(cat "$lock" 2>/dev/null) &&
    ps "$lpid" | grep "$lpid" >/dev/null && {
    	echo "Another instance of fsniper_encfs is running"
    	exit;
    }
    echo $BASHPID > "$lock";
    sleep 2;
    
    echo
    echo ==== EncFS automount script for fsniper ====
    
    list_mounts() {
    	cat /proc/mounts | cut -d ' ' -f 2
    }
    
    list_mounts | while read mount; do
    	config="$mount"'/*/.encfs*';
    	echo Looking for "$config"
    	config="$(echo $config)"
    	[ -r "$config" ] && {
    		cyphertext="$(dirname "$config")";
    		plaintext="$cyphertext".plain
    		echo Found config: "$config";
    		echo Trying to mount: "$cyphertext to $plaintext";
    		list_mounts | grep "$plaintext" >/dev/null && {
    			echo Already mounted: "$plaintext"
    		} || {
    			echo Will mount "$cyphertext to $plaintext"
    			"$ASKPASS" "EncFS $cyphertext to $plaintext" | encfs --stdinpass "$cyphertext" "$plaintext"
    		}
    	}
    done
    echo
    
    rm "$lock" 2>/dev/null
    
  5. /usr/lib/git-core/git-gui--askpass が動作することを確認 (git パッケージが必要な理由 - ただしヘルパースクリプトを変更することもできます)。
  6. ターミナルで fsniper --log-to-stdout をテスト (USB ドライブが接続されたときに askpass が表示される)。
  7. fsniper --daemon をセッションに追加。
  8. ドライブを取り外す前に encfs をアンマウントするようにしてください。

KDE KWallet を使ってマウント

KDE では kdeencfs スクリプトを使うことで KDE Wallet でマウントができます。スクリプトを使うには公式リポジトリから kdialogkwallet-pam パッケージをインストールする必要があります。kwallet-pam はセッションと一緒に起動させる必要があります。kdeencfs encrypted-folder decrypted-folder を実行することで使用できます。

暗号化バックアップ

警告: 以下の手順に従ってデータから暗号化オプションファイルを分離する場合、プレーンテキストのオプションファイルのバックアップも作る必要があります。ディスクが壊れたときにオプションファイルをプレーンテキストでバックアップしていなかった場合、バックアップだけでは何もできません。オプションファイルに含まれている暗号化メタデータが必要です。ファイルは静的であるため、パスワードを変えない限り何度もバックアップする必要はありません。

暗号化ディレクトリのバックアップ

暗号化ディレクトリは他の場所にそのままバックアップ・リストアできます。暗号化オプションやメタデータの設定ファイルはディレクトリの中に保存されているためです。ファイルはプレーンテキスト形式で .encfs6.xml という名前です。パスワードは入っていないためプレーンテキストで直接的な問題は何もありません。

ただし、バックアップをリモートの場所 (クラウドなど) や携帯デバイスに保存する場合、面倒なことになります。そのような場合、バックアップを作成する前に、ディレクトリの外にファイルを手動で移動しても何も問題ありません。ENCFS6_CONFIG 環境変数を使って encfs に場所を指定すれば、ずっと別の場所に置いておいてもディレクトリをマウントしてファイルにアクセスできます。上の#使用方法に書かれている例の場合:

$ mv ~/.name/encfs6.xml ~/.
$ ENCFS6_CONFIG=~/encfs6.xml encfs ~/.name ~/name

プレーンテキストディレクトリのバックアップ

以下の例では thesis.txt ファイルが含まれている既存のプレーンテキストディレクトリ ~/mythesis の暗号化バックアップを作成したいとします。

まず、既存のプレーンテキストディレクトリの暗号化バックアップを作成:

$ encfs --reverse ~/mythesis /tmp/thesisbackup 

ディレクトリの順番は通常の使用の場合と逆になります。--reverse オプションを使用することで、まず設定ファイルがプレーンテキストディレクトリに保存され /tmp/thesisbackup には暗号化された状態で保存されます。そして、/tmp/thesisbackup のファイルは永続的ではありません。アンマウントするとファイルは消えます (/tmp マウントポイントを使用していることとは無関係です)。

それから、適当なバックアップ場所に暗号化ファイルをコピーして、一時的な encfs ディレクトリをアンマウントしてください:

$ cp -R /tmp/thesisbackup/* /mnt/usbstick/
$ fusermount -u /tmp/thesisbackup

バックアップを復元したいときは、プレーンテキスト形式の暗号化オプションが必要になります。ENCFS6_CONFIG 環境変数を使って以下のように encfs に指定してください (既存の ~/mythesis を破壊しないように別のディレクトリを使用しています):

$ ENCFS6_CONFIG=~/mythesis/.encfs6.xml encfs ~/mnt/usbstick/thesisbackup ~/restoremythesis 

リストアしたディレクトリを確認すると、ファイルが2つ含まれていることが確認できます:

$ ls -la ~/restoremythesis
... 
-rw-r--r--  1 student student    1078  3. Jan 12:33 .encfs6.xml
-rw-r--r--  1 student student      42  3. Jan 12:33 thesis.txt
...

参照