EncFS (日本語) - ArchWiki

# EncFS (日本語)

関連記事

- ディスク暗号化

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

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

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

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

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

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

## eCryptFS との比較

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

## インストール

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

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

## 使用方法

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

    $ encfs ~/.name ~/name

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

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

    $ fusermount -u ~/name

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

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

### Gnome Encfs Manager を使ってマウント

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

開発者によって作成されたリポジトリがあり、AUR のパッケージ gnome-encfs-manager よりも少しだけ更新が早く行われます。パッケージをインストールする方法は pacman を見て下さい。

### gnome-encfs を使ってマウント

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

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

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

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

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

- http://pam-encfs.googlecode.com/svn/trunk/README
- http://pam-encfs.googlecode.com/svn/trunk/pam_encfs.conf
- https://wiki.edubuntu.org/EncryptedHomeFolder
- http://code.google.com/p/pam-encfs/

#### シングルパスワード

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

#### /etc/pam.d/

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

##### login

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

Note: 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

Warning: 自動アンマウントは他にセッションが存在する場合も行われます。例: VC でログアウトすると (まだ使用中の) GDM セッションによってマウントされた encfs もアンマウントしてしまいます。

##### gdm

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

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

`/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

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

    user_allow_other

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

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

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

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

#### 手順

1. まず USB の自動マウントが使えるようにしておく必要があります - thunar や nautilus などで設定します。
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 をアンマウントするようにしてください。

## 参照

- Security audit of EncFS by Taylor Hornby (January 14, 2014).

Categories:

- Security (日本語)
- File systems (日本語)