「ECryptfs」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(カテゴリの修正)
 
(4人の利用者による、間の13版が非表示)
1行目: 1行目:
 
{{Lowercase title}}
 
{{Lowercase title}}
[[Category:セキュリティ]]
+
[[Category:保存データ暗号化]]
[[Category:ファイルシステム]]
+
[[Category:スタック可能なファイルシステム]]
 
[[en:ECryptfs]]
 
[[en:ECryptfs]]
 
[[fr:Encryption avec eCryptfs]]
 
[[fr:Encryption avec eCryptfs]]
11行目: 11行目:
 
この記事では [https://launchpad.net/ecryptfs eCryptfs] の基本的な使い方を説明します。プライベートな暗号化ディレクトリを {{ic|$HOME}} ディレクトリに作成して機密ファイルや個人情報を保存する方法を解説していきます。
 
この記事では [https://launchpad.net/ecryptfs eCryptfs] の基本的な使い方を説明します。プライベートな暗号化ディレクトリを {{ic|$HOME}} ディレクトリに作成して機密ファイルや個人情報を保存する方法を解説していきます。
   
''ブロックデバイスの暗号化レイヤー''を提供する [[dm-crypt]] とは異なり eCryptfs はファイルシステムそのものです – [http://en.wikipedia.org/wiki/Cryptographic_filesystems スタック暗号化ファイルシステム] になります。その違いについては [http://ksouedu.com/doc/ecryptfs-utils/ecryptfs-faq.html#compare この表] や[[ディスク暗号化#比較表]]を参照してください。大きな特徴として既存のファイルシステム上に暗号化が積み重ねられるという点が挙げられます。eCryptfs はあらゆる既存のディレクトリにマウントすることができ、特別なパーティション (や領域の事前割り当て) を必要としません。
+
''ブロックデバイスの暗号化レイヤー''を提供する [[dm-crypt]] とは異なり eCryptfs はファイルシステムそのものです – [https://en.wikipedia.org/wiki/Cryptographic_filesystems スタック暗号化ファイルシステム] になります。その違いについては[[ディスク暗号化#比較表]]を参照してください。大きな特徴として既存のファイルシステム上に暗号化が積み重ねられるという点が挙げられます。eCryptfs はあらゆる既存のディレクトリにマウントすることができ、特別なパーティション (や領域の事前割り当て) を必要としません。
 
{{Note|この記事は再構築中です。あるべき場所に情報がない場合は、再構築する前の版 [https://wiki.archlinux.org/index.php?title=ECryptfs&oldid=291214] を見て下さい。}}
 
   
 
== 基本 ==
 
== 基本 ==
24行目: 22行目:
 
* ドキュメントの中では eCryptfs の専門用語が頻繁に登場します:
 
* ドキュメントの中では eCryptfs の専門用語が頻繁に登場します:
 
** eCryptfs のドキュメントやこの記事では暗号化されるディレクトリは '''lower''' (下層) と呼称して暗号化されていないディレクトリは '''upper''' (上層) ディレクトリと呼びます。この記事とは無関係ですが、Linux 3.18 で導入された "overlay" ファイルシステム ([https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/filesystems/overlayfs.txt]) では同じ upper/lower という単語をファイルシステムのスタック化について使います。
 
** eCryptfs のドキュメントやこの記事では暗号化されるディレクトリは '''lower''' (下層) と呼称して暗号化されていないディレクトリは '''upper''' (上層) ディレクトリと呼びます。この記事とは無関係ですが、Linux 3.18 で導入された "overlay" ファイルシステム ([https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/filesystems/overlayfs.txt]) では同じ upper/lower という単語をファイルシステムのスタック化について使います。
** '''mount''' パスフレーズ (キー) は暗号化されたファイルへのアクセス権限を与えます。つまり暗号化を解除します。eCryptfs は '''wrapped''' という言葉を使って mount パスフレーズが暗号的に安全であることを示します。
+
** マウントパスフレーズ (キー) は暗号化されたファイルへのアクセス権限を与えます。つまり暗号化を解除します。eCryptfs は '''wrapped''' という言葉を使って暗号的に安全なマウントパスフレーズを示します。
 
** {{ic|FEFEK}} は '''F'''ile's '''E'''ncryption key '''E'''ncryption '''Key''' のことです ([https://www.kernel.org/doc/Documentation/security/keys-ecryptfs.txt カーネルドキュメント] を参照)。
 
** {{ic|FEFEK}} は '''F'''ile's '''E'''ncryption key '''E'''ncryption '''Key''' のことです ([https://www.kernel.org/doc/Documentation/security/keys-ecryptfs.txt カーネルドキュメント] を参照)。
 
** {{ic|FNEK}} は '''F'''ile '''N'''ame '''E'''ncryption '''K'''ey のことです。暗号化ディレクトリに保存されたファイル名を暗号化する鍵になります (任意)。
 
** {{ic|FNEK}} は '''F'''ile '''N'''ame '''E'''ncryption '''K'''ey のことです。暗号化ディレクトリに保存されたファイル名を暗号化する鍵になります (任意)。
32行目: 30行目:
 
=== 欠陥 ===
 
=== 欠陥 ===
   
  +
* 使いやすさ
* 変数がハードコードされている
 
 
:eCryptfs の使いやすさは主として {{Pkg|ecryptfs-utils}} パッケージの "Ubuntu tools" に依存しています。決定的な欠点として、ツールの中では多数の変数 (暗号化オプションやディレクトリパス) が決め打ちされています。変数を変更するとなると大変面倒な手動設定が必要ということです。
 
:eCryptfs の使いやすさは主として {{Pkg|ecryptfs-utils}} パッケージの "Ubuntu tools" に依存しています。決定的な欠点として、ツールの中では多数の変数 (暗号化オプションやディレクトリパス) が決め打ちされています。変数を変更するとなると大変面倒な手動設定が必要ということです。
  +
  +
* ファイル名の長さ
  +
:143文字よりも長いファイル名は暗号化できません ({{ic|FNEK}} オプションを使用した場合 [https://bugs.launchpad.net/ecryptfs/+bug/344878])。一部のプログラムがホームディレクトリで動作しなくなる可能性があります (例: [[wikipedia:ja:Symfony|Symfony]] のキャッシュ)。
  +
 
* ネットワークストレージマウント
 
* ネットワークストレージマウント
 
:eCryptfs にはネットワークストレージに関する長年の [https://bugs.launchpad.net/ecryptfs/+bug/277578 バグ] や機能リクエストが存在します。暗号化したディレクトリの中身をネットワークのバックアップストレージに複製することは可能です。しかしながら、ネットワークストレージ上に直接、暗号化ディレクトリを保存してそれをローカルでマウントしたい場合、まずネットワークツール (NFS や Samba など) に対応した解決方法を検索する必要があります。よく分からない場合、[[EncFS]] を使うのがベターです。
 
:eCryptfs にはネットワークストレージに関する長年の [https://bugs.launchpad.net/ecryptfs/+bug/277578 バグ] や機能リクエストが存在します。暗号化したディレクトリの中身をネットワークのバックアップストレージに複製することは可能です。しかしながら、ネットワークストレージ上に直接、暗号化ディレクトリを保存してそれをローカルでマウントしたい場合、まずネットワークツール (NFS や Samba など) に対応した解決方法を検索する必要があります。よく分からない場合、[[EncFS]] を使うのがベターです。
41行目: 43行目:
   
 
:巨大なディレクトリ構造を暗号化するときは予めこのことを考えておく必要があります。大抵の場合、スパースファイルを使えないことが致命的な問題になることはありません。(eCryptfs の標準の {{ic|.Private}} ディレクトリではなく) 暗号化を施さない {{ic|.Public}} ディレクトリにスパースファイルを保存する方法と、{{ic|.Public}} で ''dm-crypt' の[[dm-crypt/root 以外のファイルシステムの暗号化#Loop デバイス|コンテナ]]を使う方法があります。
 
:巨大なディレクトリ構造を暗号化するときは予めこのことを考えておく必要があります。大抵の場合、スパースファイルを使えないことが致命的な問題になることはありません。(eCryptfs の標準の {{ic|.Private}} ディレクトリではなく) 暗号化を施さない {{ic|.Public}} ディレクトリにスパースファイルを保存する方法と、{{ic|.Public}} で ''dm-crypt' の[[dm-crypt/root 以外のファイルシステムの暗号化#Loop デバイス|コンテナ]]を使う方法があります。
 
== セットアップ例の概要 ==
 
 
The following [[#Setup & mounting]] section describes alternatives using eCryptfs to encrypt a data directory. The alternatives start with [[#Using the Ubuntu tools]], which make eCryptfs usage particularly easy and also safe against user errors. This also applies to [[#Encrypting a home directory]] with the tools. During setup, instructions are given on the console by the scripts. The [[#Using ecryptfs-simple]] section then introduces an alternative package to aide using eCryptfs. The [[#Manual setup]] section then describes the setup using the {{ic|ecryptfs}} filesystem directly. The first subsection ([[#With ecryptfs-utils]]) still uses one more script and is suggested to read to familiarize with the setup of the manual options before using them [[#Without ecryptfs-utils]].
 
 
The alternatives include
 
# the setup step for the encrypted directory structures
 
# the setup to mount, unmount the directory at runtime manually and/or automatically at user login
 
Each of the described alternative examples can be removed after setup very easily, so do not refrain from testing which suits your needs best.
 
   
 
== セットアップ & マウント ==
 
== セットアップ & マウント ==
   
  +
セットアップを始める前に、eCryptfs のドキュメントを確認してください。素晴らしい [http://ecryptfs.org/documentation.html マニュアルページ] が付属しています。
eCryptfs はバージョン 2.6.19 から Linux に含まれています。ただし eCryptfs を使うにはユーザースペースツールが必要になります。[[公式リポジトリ]]の {{pkg|ecryptfs-utils}} パッケージに入っています。
 
   
パッケージをイストールしたら {{ic|ecryptfs}} モジュールをロードしてからセットアップに進みます:
+
eCryptfs はバージ 2.6.19 かLinux に含まれています。{{ic|ecryptfs}} モジュールをロードしてからセットアップに進みます:
 
# modprobe ecryptfs
 
# modprobe ecryptfs
   
  +
eCryptfs ファイルシステムをマウントするには、{{pkg|ecryptfs-utils}} パッケージに含まれているユーザースペースツールが必要です。残念ながら、ツールの設計上、それぞれ長短のある以下の3つから eCryptfs を設定する方法を選択する必要があります:
セットアップを始める前に、eCryptfs のドキュメントを確認してください。素晴らしい [http://ecryptfs.org/documentation.html マニュアルページ] が付属しています。
 
   
  +
# [[#Ubuntu のツールを使う|Ubuntu のツール]]を使用する。設定を自動的に行うことができますが、ディレクトリは {{ic|~/.Private/}} に決め打ちになり、ユーザーごとにひとつしか暗号化ファイルシステムを作成できません。
{{Tip|{{Pkg|linux-grsec}} を使用している場合、{{ic|ecryptfs-mount-private}} ラッパーを実行しても暗号モジュールは自動ロードされないことがあります (2014年11月)。その場合、手動でモジュールをロードしてください。例えば root で {{ic|modprobe md5}} を実行して次の起動時にロードされるように[[カーネルモジュール#ロード|設定]]してください。}}
 
  +
# [[#ecryptfs-simple を使う|ecryptfs-simple]] を使用する。下層ディレクトリと上層ディレクトリを使って eCryptfs ファイルシステムを簡単にマウントすることができます。
  +
# パスフレーズのロードと eCryptfs のマウントを別々に行う[[#手動セットアップ|手動セットアップ]]。ディレクトリや暗号化設定を完全に制御できます。
   
 
=== Ubuntu のツールを使う ===
 
=== Ubuntu のツールを使う ===
   
  +
''ecryptfs-utils'' パッケージでインストールされるユーザーフレンドリで便利なツールは特殊な eCryptfs セットアップを使います。つまり Ubuntu によって公式で使われているセットアップです (ディストリのインストール時にオプションとして選択できます)。残念ながら、デフォルトのオプションは使われずにツールにハードコードされています。このセットアップがあなたに合わない場合、便利なツールを使うのを諦めて [[#手動セットアップ]] を行う必要があります。
Most of the user-friendly convenience tools installed by the ''ecryptfs-utils'' package assume a very specific eCryptfs setup, namely the one that is officially used by Ubuntu (where it can be selected as an option during distro installation). Unfortunately, these choices are not just default options but are actually hard-coded in the tools. If this set-up does not suit your needs, then you can not use the convenience tools and will have to follow the steps at [[#Manual setup]] instead.
 
   
  +
ツールで使われるセットアップとは以下になります:
The set-up used by these tools is as follows:
 
   
  +
* ツールで管理できる暗号化ディレクトリはユーザーごとに一つずつになります:
* each user can have '''only one encrypted directory''' that is managed by these tools:
 
  +
** {{ic|$HOME}} ディレクトリを完全に暗号化する。あるいは、
** either full {{ic|$HOME}} directory encryption, or
 
  +
** 単一の暗号化データディレクトリ (デフォルトでは {{ic|~/Private/}} ですがカスタマイズできます)。
** a single encrypted data directory (by default {{ic|~/Private/}}, but this can be customized).
 
* the '''lower directory''' for each user is always {{ic|~/.Private/}}<br><small>(in the case of full home dir encryption, this will be a symlink to the actual location at {{ic|/home/.ecryptfs/$USER/.Private/}})</small>
+
* ユーザー各自の'''下層ディレクトリ''' {{ic|~/.Private/}} になります。<br><small>(ホームディレクトリを暗号化する場合、{{ic|/home/.ecryptfs/$USER/.Private/}} へのシンボリックリンクになります)</small>
  +
* 使用される暗号化オプション:
* the '''encryption options''' used are:
 
** ''cipher:'' AES
+
** ''暗号:'' AES
** ''key length:'' 16 bytes (128 bits)
+
** ''鍵長:'' 16 バイト (128 ビット)
  +
** ''鍵の管理方式:'' パスフレーズ
** ''key management scheme:'' passphrase
 
  +
** ''プレーンテキストパススルー:'' 有効
** ''plaintext passthrough:'' enabled
 
* the '''configuration / control info''' for the encrypted directory is stored in a bunch of files at {{ic|~/.ecryptfs/}}:<br><small>(in the case of full home dir encryption, this will be a symlink to the actual location at {{ic|/home/.ecryptfs/$USER/.ecryptfs/}})</small>
+
* 暗号化ディレクトリの設定や制御情報は {{ic|~/.ecryptfs/}} のファイルに保存されます:<br><small>(ホームディレクトリを暗号化する場合、{{ic|/home/.ecryptfs/$USER/.ecryptfs/}} へのシンボリックリンクになります)</small>
** {{ic|Private.mnt}} ''[plain text file]'' - contains the path where the upper directory should be mounted (e.g. {{ic|/home/lucy}} or {{ic|/home/lucy/Private}})
+
** {{ic|Private.mnt}} ''[プレーンテキストファイル]'' - 上層ディレクトリをマウントするパスが記述されます (例: {{ic|/home/lucy}} {{ic|/home/lucy/Private}})
  +
** {{ic|Private.sig}} ''[プレーンテキストファイル]'' - カーネルのキーリングでマウントパスフレーズを確認するのに使われる署名。
** {{ic|Private.sig}} ''[plain text file]'' - contains the signature used to identify the mount passphrase in the kernel keyring
 
** {{ic|wrapped-passphrase}} ''[binary file]'' - the mount passphrase, encrypted with the login passphrase
+
** {{ic|wrapped-passphrase}} ''[バイナリファイル]'' - マウントパスフレーズ。ログインパスフレーズで暗号化されます。
** {{ic|auto-mount}}, {{ic|auto-umount}} ''[empty files]'' - if they exist, the {{ic|pam_ecryptfs.so}} module will (assuming it is loaded) automatically mount/unmount this encrypted directory when the user logs in/out
+
** {{ic|auto-mount}}, {{ic|auto-umount}} ''[空のファイル]'' - ファイルが存在する場合、ユーザーのログイン・ログアウト時に {{ic|pam_ecryptfs.so}} モジュールが (ロードされていれば) 自動的に暗号化ディレクトリをマウント・アンマウントします。
   
 
==== データディレクトリの暗号化 ====
 
==== データディレクトリの暗号化 ====
  +
{{ic|$HOME}} ディレクトリを暗号化する場合は [[#ホームディレクトリの暗号化]] を見て下さい。
For a full {{ic|$HOME}} directory encryption see [[#Encrypting a home directory]]
 
   
  +
データディレクトリの暗号化をセットアップする前に、手動でマウントするか、ユーザーのログイン時に自動的にマウントするか決めておいて下さい。
Before the data directory encryption is setup, decide whether it should later be mounted manually or automatically with the user log-in.
 
   
  +
一人一個のデータディレクトリを暗号化して手動でマウントする場合、次を実行:
To encrypt a single data directory as a user and mount it manually later, run:
 
 
$ ecryptfs-setup-private --nopwcheck --noautomount
 
$ ecryptfs-setup-private --nopwcheck --noautomount
   
  +
指示に従って下さい。{{ic|--nopwcheck}} オプションが付いているのでユーザーのログインパスフレーズ以外のパスフレーズを選択することができます。{{ic|--noautomount}} オプションはその名の通りです。つまり、ログイン時に自動的に暗号化ディレクトリをマウントするようにセットアップしたい場合、両方のオプションを取り除いて実行してください。
and follow the instructions. The option {{ic|--nopwcheck}} enables you to choose a passphrase different to the user login passphrase and the option {{ic|--noautomount}} is self-explanatory. So, if you want to setup the encrypted directory automatically on log-in later, just ''leave out'' both options right away.
 
   
The script will automatically create the {{ic|~/.Private/}} and {{ic|~/.ecryptfs/}} directory structures as described in the box above. It will also ask for two passphrases:
+
スクリプトは先に述べた {{ic|~/.Private/}} {{ic|~/.ecryptfs/}} ディレクトリを自動的に作成します。2つのパスフレーズが要求されます:
   
  +
;'''ログインパスフレーズ''': 暗号化ディレクトリをマウントするたびに入力する必要があるパスワードです。ログイン時に自動マウントさせる場合、ユーザーアカウントにログインするときに使うのと同じパスワードでなくてはなりません。
;'''login passphrase''': This is the password you will have to enter each time you want to mount the encrypted directory. If you want auto-mounting on login to work, it has to be the same password you use to login to your user account.
 
   
  +
;'''マウントパスフレーズ''': ファイル暗号化のマスターキーを取得するのに使われます。そのため、よく分からない場合は自分で入力してはいけません。Enter を押せば勝手にランダムなパスフレーズが自動生成されます。ログインパスフレーズを使って暗号化され {{ic|~/.ecryptfs/wrapped-passphrase}} に保存されます。必要になったときに RAM で自動的に復号化されるため ("unwrapped")、手動で入力する必要は二度とありません。このファイルが消えてしまうと、暗号化フォルダに永久にアクセスできなくなります。暗号化されていないマウントパスフレーズは {{ic|ecryptfs-unwrap-passphrase}} を実行することで確認できます。紙に書き写して、金庫 (など) に保管しておくのが良いでしょう。書き写したパスフレーズを使えば、何らかの理由で ''wrapped-passphrase'' ファイルが消失・破損してしまった場合やログインパスフレーズを忘れてしまった場合に暗号化データを復元することができます。
;'''mount passphrase''': This is used to derive the actual file encryption master key. Thus, you should not enter a custom one unless you know what you are doing - instead press Enter to let it auto-generate a secure random one. It will be encrypted using the login passphrase and stored in this encrypted form in {{ic|~/.ecryptfs/wrapped-passphrase}}. Later it will automatically be decrypted ("unwrapped") again in RAM when needed, so you never have to enter it manually. Make sure this file does not get lost, otherwise you can never access your encrypted folder again! You may want to run {{ic|ecryptfs-unwrap-passphrase}} to see the mount passphrase in unencrypted form, write it down on a piece of paper, and keep it in a safe (or similar), so you can use it to recover your encrypted data in case the ''wrapped-passphrase'' file is accidentally lost/corrupted or in case you forget the login passphrase.
 
   
  +
暗号化ディレクトリのマウントポイント ("上層ディレクトリ") はデフォルトでは {{ic|~/Private}} となっていますが、セットアップコマンドを実行した後に以下を実行することで手動で変更できます:
The mount point ("upper directory") for the encrypted folder will be at {{ic|~/Private}} by default, however you can manually change this right after the setup command has finished running, by doing:
 
   
 
$ mv ~/Private /path/to/new/folder
 
$ mv ~/Private /path/to/new/folder
 
$ echo /path/to/new/folder > ~/.ecryptfs/Private.mnt
 
$ echo /path/to/new/folder > ~/.ecryptfs/Private.mnt
   
  +
実際に暗号化フォルダを使うには、マウントする必要があります。下の [[#マウント]] を見て下さい。
To actually use your encrypted folder, you will have to mount it - see [[#Mounting]] below.
 
   
 
==== ホームディレクトリの暗号化 ====
 
==== ホームディレクトリの暗号化 ====
   
  +
{{ic|ecryptfs-migrate-home}} スクリプトは特定のユーザーの {{ic|$HOME}} に暗号化ディレクトリをセットアップして、暗号化されていないホームディレクトリに存在する既存のファイルを自動的に移動します。設定するユーザーは''ログアウト''していること、''ユーザーのプロセスが存在しない''ことを確認してください ({{ic|ps -U ''username''}} で何も出力されないことをチェックしてください)。問題ないようでしたら、以下を実行:
The following wrapper script will set up an encrypted {{ic|$HOME}} directory for a user and take care of migrating any existing files they have in their not yet encrypted home directory. Ensure that the user in question ''owns no processes'' and is ''logged out''. You also need to ensure that you have {{pkg|rsync}} and {{pkg|lsof}} installed. Once the prerequisites have been met, run:
 
   
  +
# modprobe ecryptfs
 
# ecryptfs-migrate-home -u ''username''
 
# ecryptfs-migrate-home -u ''username''
   
  +
そして指示に従って下さい。ラッパースクリプトを実行したら、自動マウントの設定をしてください。下の [[#自動マウント]] を参照。設定を完了するには、再起動する''前''にユーザーがログインする必要があります。
and follow the instructions. After the wrapper script is complete, follow the instructions for auto-mounting - see [[#Auto-mounting]] below. It is imperative that the user logs in ''before'' the next reboot, to complete the process.
 
  +
  +
全て設定できたら、{{ic|/home/''username''.''random_characters''}} に保存されたホームディレクトリのバックアップは削除してかまいません。
   
 
==== マウント ====
 
==== マウント ====
125行目: 123行目:
 
$ ecryptfs-umount-private
 
$ ecryptfs-umount-private
   
  +
{{Tip|ユーザーセッションの間に永続的にプライベートのデータにアクセスする必要がない場合、[[Bash#エイリアス|エイリアス]]を定義することで高速化できます。}}
{{Tip|If it is not required to access the private data permanently during a user session, maybe define an [[Bash#エイリアス|alias]] to speed the manual step up.}}
 
   
  +
ツールには、暗号化された {{ic|.Private}} のデータやホームディレクトリにアクセスするための便利なスクリプトも含まれています。root で {{ic|ecryptfs-recover-private}} を実行するとディレクトリが存在しないかシステムが検索されて (あるいはパスを指定することもできます)、インタラクティブにパスフレーズが要求されてディレクトリがマウントされます。ライブ CD や別のシステムから、リカバリを行う時に暗号化データにアクセスするのに使うことができます。Arch Linux ISO から起動する場合、まず {{pkg|ecryptfs-utils}} をインストールしないと使えないので注意してください。さらに、このスクリプトは Ubuntu ツールで作成した {{ic|.Private}} ディレクトリしかマウントできません。
The tools include another script that can be very handy to access an encrypted {{ic|.Private}} data or home directory. Executing {{ic|ecryptfs-recover-private}} as root will search the system (or an optional specific path) for the directory, interactively query the passphrase for it and mount the directory. It can, for example, be used from a live-CD or different system to access the encrypted data in case of a recovery. Note that if booting from an Arch Linux ISO you must first install the {{pkg|ecryptfs-utils}} to it. Further, it will only be able to mount {{ic|.Private}} directories created with the Ubuntu tools.
 
   
 
===== 自動マウント =====
 
===== 自動マウント =====
   
The default way to auto-mount an encrypted directory is via [[Pam_mount|PAM]]. See {{ic|man pam_ecryptfs}} and - for more details - 'PAM MODULE' in:
+
暗号化ディレクトリを自動マウントするデフォルトの方法は [[Pam_mount|PAM]] です。詳しくは {{man|8|pam_ecryptfs}} や以下のファイルの 'PAM MODULE' を見て下さい:
 
/usr/share/doc/ecryptfs-utils/README
 
/usr/share/doc/ecryptfs-utils/README
   
  +
自動でマウントするには、暗号化ディレクトリにアクセスするためのパスフレーズとユーザーがログイン時に使用するパスフレーズが一致している必要があります。
For auto-mounting it is required that the passphrase to access the encrypted directory is synchronised with the user log-in.
 
   
  +
以下の手順でセットアップします:
The following steps set it up:
 
   
1. Check if {{ic|~/.ecryptfs/auto-mount}}, {{ic|~/.ecryptfs/auto-umount}} and {{ic|~/.ecryptfs/wrapped-passphrase}} exist (these are automatically created by ''ecryptfs-setup-private'').
+
1. {{ic|~/.ecryptfs/auto-mount}}, {{ic|~/.ecryptfs/auto-umount}}, {{ic|~/.ecryptfs/wrapped-passphrase}} が存在することを確認してください (''ecryptfs-setup-private'' によって自動的に作成されます)
   
  +
2. 以下のように pam に ''ecryptfs'' を追加することでログイン時に透過的にパスフレーズが解除されるようにします:
2. Add ''ecryptfs'' to the pam-stack exactly as following to allow transparent unwrapping of the passphrase on login:
 
   
Open {{ic|/etc/pam.d/system-auth}} and ''after'' the line containing {{ic|auth required pam_unix.so}} add:
+
{{ic|/etc/pam.d/system-auth}} を開いて {{ic|auth required pam_unix.so}} と書かれた行の''後ろ''に以下を追加:
 
auth required pam_ecryptfs.so unwrap
 
auth required pam_ecryptfs.so unwrap
Next, ''above'' the line containing {{ic|password required pam_unix.so}} insert:
+
次に、{{ic|password required pam_unix.so}} と書かれた行の''上''に以下を挿入:
 
password optional pam_ecryptfs.so
 
password optional pam_ecryptfs.so
And finally, ''after'' the line {{ic|session required pam_unix.so}} add:
+
最後に、{{ic|session required pam_unix.so}} という行の''後''に以下を追加:
session optional pam_ecryptfs.so
+
session optional pam_ecryptfs.so unwrap
   
  +
3. 再ログインして ''mount'' の出力を確認します。以下のようにユーザーの暗号化ディレクトリのマウントポイントが表示されるはずです:
3. Re-login and check output of ''mount'' which should now contain a mountpoint, e.g.:
 
 
/home/$USER/.Private on /home/$USER/Private type ecryptfs (...)
 
/home/$USER/.Private on /home/$USER/Private type ecryptfs (...)
  +
これで自動的に {{ic|~$HOME/Private/}} を読めるようになります。
for the user's encrypted directory. It should be perfectly readable at {{ic|~$HOME/Private/}}.
 
  +
  +
ディレクトリはユーザーのログオフ時に自動的にアンマウントされて読めなくなります。
   
  +
{{Note|The above changes to {{ic|system-auth}} enable auto-mounting for normal login. If you switch users instead, using {{ic|su -}} or {{ic|su -l}}, you need to apply similar changes also to {{ic|/etc/pam.d/su-l}}.}}
The latter should be automatically unmounted and made unavailable when the user logs off.
 
   
 
{{Warning|1=Unfortunately the automatic unmounting is susceptible to [https://bbs.archlinux.org/viewtopic.php?id=194509 break] with systemd and bugs are filed against it.[https://bugs.freedesktop.org/show_bug.cgi?id=72759] [https://nwrickert2.wordpress.com/2013/12/16/systemd-user-manager-ecryptfs-and-opensuse-13-1/] [https://bugs.launchpad.net/ubuntu/+source/ecryptfs-utils/+bug/313812/comments/43] [http://lists.alioth.debian.org/pipermail/pkg-systemd-maintainers/2014-October/004088.html]
 
{{Warning|1=Unfortunately the automatic unmounting is susceptible to [https://bbs.archlinux.org/viewtopic.php?id=194509 break] with systemd and bugs are filed against it.[https://bugs.freedesktop.org/show_bug.cgi?id=72759] [https://nwrickert2.wordpress.com/2013/12/16/systemd-user-manager-ecryptfs-and-opensuse-13-1/] [https://bugs.launchpad.net/ubuntu/+source/ecryptfs-utils/+bug/313812/comments/43] [http://lists.alioth.debian.org/pipermail/pkg-systemd-maintainers/2014-October/004088.html]
160行目: 160行目:
 
=== ecryptfs-simple を使う ===
 
=== ecryptfs-simple を使う ===
   
[[EncFS]] と同じように任意のディレクトリをマウントすることだけに eCryptfs を使う場合 [http://xyne.archlinux.ca/projects/ecryptfs-simple/ ecryptfs-simple] を使って下さい。ecryptfs-simple は root 権限を必要とせず {{ic|/etc/fstab}} にエントリを書く必要もありません。さらに {{ic|~/.Private}} などのディレクトリにハードコードもされていません。{{AUR|ecryptfs-simple}} や [http://xyne.archlinux.ca/repos/ Xyne のリポジトリ] からパッケージを[[インストール]]できます。
+
[[EncFS]] と同じように任意のディレクトリをマウントすることだけに eCryptfs を使う場合 [https://xyne.archlinux.ca/projects/ecryptfs-simple/ ecryptfs-simple] を使って下さい。ecryptfs-simple は root 権限を必要とせず {{ic|/etc/fstab}} にエントリを書く必要もありません。さらに {{ic|~/.Private}} などのディレクトリにハードコードもされていません。{{AUR|ecryptfs-simple}} や [https://xyne.archlinux.ca/repos/ Xyne のリポジトリ] からパッケージを[[インストール]]できます。
   
 
名は体を表すとおり、使用方法はシンプルです:
 
名は体を表すとおり、使用方法はシンプルです:
177行目: 177行目:
 
=== 手動セットアップ ===
 
=== 手動セットアップ ===
   
  +
以下では eCryptfs による暗号化ディレクトリを手動でセットアップする方法を説明します。設定は2段階で行います。まず、パスフレーズをカーネルのキーリングにロードします。そして、キーリングのキーを使ってファイルシステムをマウントします。
The following details instructions to set up eCryptfs encrypted directories manually. The first section still relies on one extra script from the {{Pkg|ecryptfs-utils}} package. It may be an easier start and can be tried without any root rights. The [[#Without ecryptfs-utils|second]] then sets up an encrypted directory with other encryption options than the default tools.
 
  +
  +
カーネルのキーリングにパスフレーズを追加する方法は2つ存在します。簡単なのは {{ic|ecryptfs-add-passphrase}} で、ひとつのパスフレーズを使ってファイルを暗号化します。デメリットとしてパスフレーズを後から変更することはできません。以下のように使用します:
  +
$ ecryptfs-add-passphrase
  +
Passphrase:
  +
Inserted auth tok with sig [78c6f0645fe62da0] into the user session keyring
  +
{{ic|ecryptfs-add-passphrase -}} にパスフレーズをパイプで渡すこともできます。パスフレーズをファイルの中に書いてしまったら、暗号化を使う意味がなくなるので注意してください。
  +
  +
As an alternative to a plain passphrase, you can use a "wrapped passphrase", where the files are encrypted using a randomly generated key, which is itself encrypted with your passphrase and stored in a file. In this case, you can change your passphrase by unwrapping the key file with your old passphrase and rewrapping it using your new passphrase.
  +
  +
In the following we do a generation similar to the [http://bazaar.launchpad.net/~ecryptfs/ecryptfs/trunk/view/head:/src/utils/ecryptfs-setup-private#L96 source] and then use ''ecryptfs-wrap-passphrase'' to wrap it with the password ("Arch") to {{ic|~/.ecryptfs/wrapped-passphrase}}:
  +
$ printf "%s\n%s" $(od -x -N 100 --width=30 /dev/random | head -n 1 | sed "s/^0000000//" | sed "s/\s*//g") "Arch" | ecryptfs-wrap-passphrase /home/''username''/.ecryptfs/wrapped-passphrase
  +
  +
Next, we can enter our passphrase "Arch" to load the key into the keyring:
  +
$ printf "%s" "Arch" | ecryptfs-insert-wrapped-passphrase-into-keyring /home/''username''/.ecryptfs/wrapped-passphrase -
  +
Inserted auth tok with sig [7c5d3dd8a1b49db0] into the user session keyring
  +
  +
In either case, when you successfully add the passphrase to the kernel keyring, you will get a "key signature" like {{ic|78c6f0645fe62da0}} which you will need in the next step.
  +
  +
There are two different ways of manually mounting eCryptfs, described in the following sections. The first way, using {{ic|mount.ecryptfs_private}}, can be run as a regular user and involves setting up some configuration files. This method does not allow you to change the encryption settings, such as key size. The second way is to use a raw {{ic|mount}} command, which gives you complete control over all settings, but requires you to either run it as root, or add an entry to {{ic|/etc/fstab}} which lets a user mount eCryptfs.
   
 
{{Tip|The following examples use an encrypted directory ({{ic|.secret}}) different to the default, hard-coded {{ic|.Private}} in the Ubuntu tools. This is on purpose to avoid problems of erroneous [[#Auto-mounting]] when the system has PAM setup for it, as well as problems with other tools using the hard-coded defaults.}}
 
{{Tip|The following examples use an encrypted directory ({{ic|.secret}}) different to the default, hard-coded {{ic|.Private}} in the Ubuntu tools. This is on purpose to avoid problems of erroneous [[#Auto-mounting]] when the system has PAM setup for it, as well as problems with other tools using the hard-coded defaults.}}
183行目: 202行目:
 
==== ecryptfs-utils を使う ====
 
==== ecryptfs-utils を使う ====
   
Alternatively to using the scripts {{ic|ecryptfs-setup-private}} and {{ic|ecryptfs-mount-private}} to setup and mount eCryptfs, the same can be done directly with the binaries (which those scripts use) {{ic|ecryptfs-add-passphrase}} and {{ic|mount.ecryptfs_private}} from the {{Pkg|ecryptfs-utils}} package. Those binaries require no root privileges to work by default.
+
This method involves running {{ic|mount.ecryptfs_private}} from the {{Pkg|ecryptfs-utils}} package, after first loading your passphrase. This binary requires no root privileges to work by default.
   
First choose an ALIAS as you like. Through this section, ALIAS will be {{ic|secret}}. Create the required directories/files:
+
First choose a name for your configuration files in {{ic|~/.ecryptfs}} and decide on the lower and upper directories. In this example we use {{ic|secret}} for the configuration files, put in encrypted data in {{ic|~/.secret}}, and mount the decrypted files at {{ic|~/secret}}. Create the required directories:
 
$ mkdir ~/.secret ~/secret ~/.ecryptfs
 
$ mkdir ~/.secret ~/secret ~/.ecryptfs
$ touch ~/.ecryptfs/secret.conf ~/.ecryptfs/secret.sig
 
   
  +
Now specify the directories in {{ic|~/.ecryptfs/secret.conf}}, using full paths. Its format looks like the one in {{ic|/etc/fstab}} without the mount options:
The {{ic|~/.secret}} directory will hold the encrypted data. The {{ic|~/secret}} directory is the mount point where {{ic|~/.secret}} will be mounted as an ecryptfs filesystem.
 
  +
$ echo "$HOME/.secret $HOME/secret ecryptfs" > ~/.ecryptfs/secret.conf
   
  +
Write the key signature you got from {{ic|ecryptfs-add-passphrase}} or {{ic|ecryptfs-insert-wrapped-passphrase-into-keyring}} (see above) into {{ic|~/.ecryptfs/secret.sig}}:
In the next command, replace USER with the name of the current user's home directory. Note that you should write full paths to {{ic|~/.ecryptfs/secret.conf}}. Its format looks like the one in {{ic|/etc/fstab}} without the mount options:
 
$ echo "/home/USER/.secret /home/USER/secret ecryptfs" > ~/.ecryptfs/secret.conf
 
 
A mount passphrase must be added to the keyring:
 
$ ecryptfs-add-passphrase
 
Passphrase:
 
Inserted auth tok with sig [78c6f0645fe62da0] into the user session keyring
 
 
Write the output signature ({{ic|ecryptfs_sig}}) from the previous command to {{ic|~/.ecryptfs/secret.sig}}:
 
 
$ echo 78c6f0645fe62da0 > ~/.ecryptfs/secret.sig
 
$ echo 78c6f0645fe62da0 > ~/.ecryptfs/secret.sig
   
  +
If you also want to enable filename encryption, add a second passphrase to the keyring (or reuse the first passphrase) and '''append''' its key signature to {{ic|~/.ecryptfs/secret.sig}}:
A second passphrase for filename encryption may be used. If you choose so, add it to the keyring:
 
$ ecryptfs-add-passphrase
 
Passphrase:
 
Inserted auth tok with sig [326a6d3e2a5d444a] into the user session keyring
 
 
If you run the command above, '''append''' its output signature ({{ic|ecryptfs_fnek_sig}}) to {{ic|~/.ecryptfs/secret.sig}}:
 
 
$ echo 326a6d3e2a5d444a >> ~/.ecryptfs/secret.sig
 
$ echo 326a6d3e2a5d444a >> ~/.ecryptfs/secret.sig
   
Finally, to mount {{ic|~/.secret}} on {{ic|~/secret}}:
+
Finally, mount {{ic|~/.secret}} on {{ic|~/secret}}:
 
$ mount.ecryptfs_private secret
 
$ mount.ecryptfs_private secret
   
  +
When you are done, unmount it:
An eCryptfs filesystem will be mounted with the following options:
 
rw,nosuid,nodev,relatime,ecryptfs_fnek_sig=326a6d3e2a5d444a,ecryptfs_sig=78c6f0645fe62da0,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_unlink_sigs
 
 
Except for {{ic|ecryptfs_sig}} and {{ic|ecryptfs_fnek_sig}}, the options are hard-coded. {{ic|ecryptfs_fnek_sig}} will exist only if you choose filename encryption.
 
 
To unmount {{ic|~/.secret}}:
 
 
$ umount.ecryptfs_private secret
 
$ umount.ecryptfs_private secret
   
==== ecryptfs-utils を使 ====
+
==== ecryptfs-utils を使わない ====
   
  +
By running the actual {{ic|mount}} command manually, you get complete control over the encryption options. The disadvantage is that you need to either run {{ic|mount}} as root, or add an entry to {{ic|/etc/fstab}} for each eCryptfs directory so users can mount them.
The ecryptfs-utils package is distributed with a few helper scripts which will help you with key management and similar tasks. If one wants, for example, make a choice about the encryption cipher, some of those scripts cannot be used. In this section we setup an encrypted data directory diverting from those defaults.
 
   
First create your private directories, in this example we will call them analogous to the previous section: {{ic|secret}}
+
First create your private directories. In this example, we use the same ones as the previous section:
$ mkdir -m 700 /home/username/{.secret,.ecryptfs}
+
$ mkdir -m 700 ~/.secret
$ mkdir -m 500 /home/username/secret
+
$ mkdir -m 500 ~/secret
   
 
To summarize:
 
To summarize:
235行目: 236行目:
 
** While mounted it has the same permissions as the lower directory
 
** While mounted it has the same permissions as the lower directory
   
  +
Now, supposed you have created the [[#Manual setup|wrapped keyphrase]] above, you need to insert the encryption key once to the root user's keyring:
Second we create the mount-passphrase ("file encryption key, encryption key", or '''fekek''') for the directory. It has to be very secure and cannot be changed easily. The ''ecryptfs-setup-private'' script offers the option to generate it from {{ic|/dev/urandom}}. In the following we do a generation similar to the [http://bazaar.launchpad.net/~ecryptfs/ecryptfs/trunk/view/head:/src/utils/ecryptfs-setup-private#L96 source] and then use ''ecryptfs-wrap-passphrase'' to wrap it with an extra password ("Arch"):
 
  +
# printf "%s" "Arch" | ecryptfs-insert-wrapped-passphrase-into-keyring /home/''username''/.ecryptfs/wrapped-passphrase -
 
$ printf "%s\n%s" $(od -x -N 100 --width=30 /dev/random | head -n 1 | sed "s/^0000000//" | sed "s/\s*//g") "Arch" | ecryptfs-wrap-passphrase /home/username/.ecryptfs/wrapped-passphrase
 
 
The advantages of the above step are: the mount passphrase is generated from a random source and secured by extra hashing before it is stored on disk. Further, the wrap-passphrase can be changed later.
 
 
Next, we test the passphrase by loading it into the kernel keyring:
 
 
$ printf "%s" "Arch" | ecryptfs-insert-wrapped-passphrase-into-keyring /home/username/.ecryptfs/wrapped-passphrase -
 
 
Inserted auth tok with sig [7c5d3dd8a1b49db0] into the user session keyring
 
Inserted auth tok with sig [7c5d3dd8a1b49db0] into the user session keyring
and manually copy the signature into the configuration:
 
$ echo "7c5d3dd8a1b49db0" > ~/.ecryptfs/secret.sig
 
   
  +
so that the followng mount command succeeds:
Now we continue to setup the encryption options for the directory and prepare an user-mountable entry for {{ic|/etc/fstab}}. If you already know the eCryptfs options to use in it, you can skip the following ''mount'' and create an entry with the above signature already.
 
  +
# mount -i -t ecryptfs ~/.secret ~/secret -o ecryptfs_sig=7c5d3dd8a1b49db0,ecryptfs_fnek_sig=7c5d3dd8a1b49db0,ecryptfs_cipher=aes,ecryptfs_key_bytes=32,ecryptfs_unlink_sigs
  +
* {{ic|ecryptfs_sig}} sets the data passphrase key signature.
  +
* {{ic|ecryptfs_fnek_sig}} sets the filename passphrase key signature; you can omit this option if you do not want to encrypt filenames.
  +
* {{ic|ecryptfs_key_bytes}} can be 16, 24, or 32 to change the encryption key size.
  +
* {{ic|ecryptfs_unlink_sigs}} will remove the passphrase(s) from the keyring when you unmount, so you have to add the passphrase(s) back again in order to re-mount the filesystem.
  +
* There are a few other options listed in the {{ic|ecryptfs}} man page.
   
The ''mount.ecryptfs'' command needs root and does not allow for piping the passphrase unfortunately. The mount helper will ask questions about the options we want to choose ("Key type": passphrase - choose any, we only do this to generate the options to use), but let it mount:
+
{{Tip|There is a {{ic|mount.ecryptfs}} tool, which you can run as root to enter the mount settings interactively. Once you have used it to mount eCryptfs, you can check {{ic|/etc/mtab}} to find out what options it used.}}
   
  +
Once you have chosen the right mount options, you can add an entry to {{ic|/etc/fstab}} so regular users can mount eCryptfs on these directories. Copy the mount options to a new {{ic|/etc/fstab}} entry and add the options {{ic|user}} and {{ic|noauto}}. The full entry will look similar to (bold entries added):
# mount -t ecryptfs /home/username/.secret /home/username/secret
 
Passphrase: yes
 
Cipher: aes
 
Key byte: 32
 
Plaintext passtrough: no
 
Filename encryption: no
 
Add signature to cache: yes
 
   
  +
{{hc|/etc/fstab|2=/home/''username''/.secret /home/''username''/secret ecryptfs '''noauto''','''user''',ecryptfs_sig=7c5d3dd8a1b49db0,ecryptfs_fnek_sig=7c5d3dd8a1b49db0,ecryptfs_cipher=aes,ecryptfs_key_bytes=32,ecryptfs_unlink_sigs '''0 0'''}}
To summarize the parameters:
 
* The above chosen {{ic|32}} "key bytes" result in a 256 bit AES encryption (the helper scripts are hard-coded to AES with 128 bit).
 
* Plaintext passtrough enables to store and work with '''un-encrypted''' files stored in the lower directory.
 
* In eCryptfs terms the key used to protect filenames is known as "filename encryption key", or '''fnek'''
 
* '''fekek''' and '''fnek''' can be the same key or different ones at choice
 
   
  +
* The {{ic|noauto}} option is important, because otherwise systemd will error trying to mount the entry directly on boot.
To create the mount point for the user in [[fstab]], find the current mount and copy it. For example ({{ic|XY}} are placeholders here):
 
  +
* The {{ic|user}} option enables to mount the directory as a user.
  +
** The user mount will default to option {{ic|noexec}}. If you want to have at least executable files in your private directory, you can add {{ic|exec}} to the fstab options.
   
  +
The setup is now complete and the directory should be mountable by the user.
{{hc|# mount|2=/home/username/.secret on /home/username/secret type ecryptfs (... ecryptfs_fnek_sig=XY,ecryptfs_sig=XY,ecryptfs_cipher=aes,ecryptfs_key_bytes=32,ecryptfs_unlink_sigs, user)}}
 
 
Or, alternatively, append it into {{ic|/etc/fstab}} to edit it:
 
 
# mount | grep secret >> /etc/fstab
 
 
Before continuing, we can already un-mount the temporary mount we used to generate the options:
 
# umount /home/username/secret
 
 
Now the mount line has to be edited into the correct format, the mount options {{ic|nosuid,nodev,noexec,relatime}} before the first ''ecryptfs'' option are default and can be left out. But what we need to add is the correct signatures for the passphrases to replace the ones of the current mount:
 
# cat /home/username/.ecryptfs/secret.sig
 
7c5d3dd8a1b49db0
 
 
We also need to add the options {{ic|user}} and {{ic|noauto}}. After the edit, the entry will look similar to (bold entries added):
 
 
{{hc|/etc/fstab|2=/home/username/.secret /home/username/secret ecryptfs '''noauto''','''user''',ecryptfs_fnek_sig='''7c5d3dd8a1b49db0''',ecryptfs_sig='''7c5d3dd8a1b49db0''',ecryptfs_cipher=aes,ecryptfs_key_bytes=32,ecryptfs_unlink_sigs '''0 0'''}}
 
 
Some options to note:
 
* The {{ic|ecryptfs_fnek_sig}} option will be only listed if you enabled filename encryption
 
* The second last option {{ic|ecryptfs_unlink_sigs}} ensures that the keyring is cleared every time the directory is un-mounted
 
* The bold options have been added:
 
** The {{ic|user}} option enables to mount the directory as a user
 
** The {{ic|noauto}} option is important, because otherwise systemd will error trying to mount the entry directly on boot.
 
* The user mount will default to option {{ic|noexec}}. If you want to have at least executable files in your private directory, you can add {{ic|exec}} to the fstab options.
 
 
The setup is now complete and directory should be mountable by the user.
 
   
 
===== マウント =====
 
===== マウント =====
353行目: 318行目:
 
====== 任意のステップ ======
 
====== 任意のステップ ======
   
  +
パスフレーズをアンラップするために不必要に時間を無駄にすることを避けるために、''pmvarrun'' をチェックして開いているセッションの数を確認するスクリプトを作成できます。
To avoid wasting time needlessly unwrapping the passphrase you can create a script that will check ''pmvarrun'' to see the number of open sessions:
 
 
#!/bin/sh
 
#!/bin/sh
 
#
 
#
360行目: 325行目:
 
exit $(/usr/sbin/pmvarrun -u$PAM_USER -o0)
 
exit $(/usr/sbin/pmvarrun -u$PAM_USER -o0)
   
  +
PAM スタックの eCryptfs unwrap モジュールの前に次の行を追加します:
With the following line added before the eCryptfs unwrap module in your PAM stack:
 
 
auth [success=ignore default=1] pam_exec.so quiet /usr/local/bin/doecryptfs
 
auth [success=ignore default=1] pam_exec.so quiet /usr/local/bin/doecryptfs
 
auth required pam_ecryptfs.so unwrap
 
auth required pam_ecryptfs.so unwrap
  +
この記事では、これらを {{ic|/etc/pam.d/login}} に追加することを提案していますが、ログインする他のすべての場所 ({{ic|/etc/pam.d/kde}} など) に変更を追加する必要があります。
The article suggests adding these to {{ic|/etc/pam.d/login}}, but the changes will need to be added to all other places you login, such as {{ic|/etc/pam.d/kde}}.
 
   
 
== 使用方法 ==
 
== 使用方法 ==
369行目: 334行目:
 
=== 暗号化ディレクトリにシンボリックリンクを作成 ===
 
=== 暗号化ディレクトリにシンボリックリンクを作成 ===
   
  +
プライベートディレクトリを重要なファイルやプライベートなデータを保存する場所として使う以外に、アプリケーションのデータを保護するのに使うことも可能です。例えば [[Firefox]] にはパスワードマネージャが組み込まれていますが、ブラウザの履歴やキャッシュなども機密情報と言えます。簡単に保護できます:
Besides using your private directory as storage for sensitive files, and private data, you can also use it to protect application data. [[Firefox]] for example has an internal password manager, but the browsing history and cache can also be sensitive. Protecting it is easy:
 
 
$ mv ~/.mozilla ~/Private/mozilla
 
$ mv ~/.mozilla ~/Private/mozilla
 
$ ln -s ~/Private/mozilla ~/.mozilla
 
$ ln -s ~/Private/mozilla ~/.mozilla
375行目: 340行目:
 
=== 暗号化の解除 ===
 
=== 暗号化の解除 ===
   
  +
プライベートディレクトリを削除するときに、特別な手順は必要ありません。アンマウントされていることを確認してから、暗号化ファイルが入っている下層ディレクトリ (例: {{ic|~/.Private}}) を削除してください。{{ic|~/.ecryptfs}} にある暗号化署名や設定も削除してしまえば、全てが泡と消えます。
There are no special steps involved, if you want to remove your private directory. Make sure it is un-mounted and delete the respective lower directory (e.g. {{ic|~/.Private}}), along with all the encrypted files. After also removing the related encryption signatures and configuration in {{ic|~/.ecryptfs}}, all is gone.
 
   
  +
[[#Ubuntu のツールを使う]] のとおりにディレクトリの暗号化をセットアップした場合、以下を実行することで直接削除できます:
If you were [[#Using the Ubuntu tools]] to setup a single directory encryption, you can directly follow the steps detailed by:
 
   
 
$ ecryptfs-setup-private --undo
 
$ ecryptfs-setup-private --undo
   
  +
指示に従って下さい。
and follow the instructions.
 
   
 
=== バックアップ ===
 
=== バックアップ ===
   
  +
プライベートディレクトリからファイルを外に出したいときは、{{ic|~/Private}} をマウントして新しい場所に移動するだけです。
If you want to move a file out of the private directory just move it to the new destination while {{ic|~/Private}} is mounted.
 
  +
  +
eCryptfs を使用すると、暗号化メタデータがファイルのヘッダーに保存されます。この記事で説明するセットアップのバリエーションでは、暗号化されたデータを含むディレクトリをマウントポイントから分離します。暗号化されていないマウントポイントは完全に透過的であり、バックアップに使用できます。暗号化されていない機密データがバックアップに漏洩することを避ける必要がある場合、自動バックアップについては明らかにこれを考慮する必要があります。
   
  +
暗号化された (例: {{ic|~/.Private/}}) ディレクトリを他のディレクトリと同様に扱い、バックアップまたは増分バックアップを実行できます。
With eCryptfs the cryptographic metadata is stored in the header of the files. Setup variants explained in this article separate the directory with encrypted data from the mount point. The unencrypted mount point is fully transparent and available for a backup. Obviously this has to be considered for automated backups, if one has to avoid leaking sensitive unencrypted data into a backup.
 
   
  +
その他の注意事項:
You can do backups, or incremental backups, of the encrypted (e.g. {{ic|~/.Private}}) directory, treating it like any other directory.
 
   
  +
* Ubuntu ツールを使って [[#データディレクトリの暗号化]] をした場合、暗号化したファイルが含まれた低層ディレクトリは通常ユーザーの {{ic|$HOME}} から外れた {{ic|/home/.ecryptfs/$USER/.Private}} にあるので注意してください。
Further points to note:
 
  +
* eCryptfs セットアップファイル (通常は {{ic|~/.ecryptfs}} にあります) を通常のバックアップまたは別のバックアップに必ず含める必要があります。
  +
* 特殊なファイルシステムのマウントオプションを使用している場合 (例: {{ic|ecryptfs_xattr}})、リストア時に確認をしてください。
   
  +
== 既知の問題 ==
* If you used the Ubuntu tools for [[#Encrypting a home directory]], be aware the location of the lower directory with the encrypted files is ''outside'' the regular user's {{ic|$HOME}} at {{ic|/home/.ecryptfs/$USER/.Private}}.
 
   
  +
=== Mosh 経由で接続するとリモートホストでマウントが失敗することがある ===
* It should be ensured to include the eCryptfs setup files (located in {{ic|~/.ecryptfs}} usually) into the regular or a separate backup.
 
   
  +
これは、[https://mosh.org/ Mosh] サーバーの[https://github.com/mobile-shell/mosh/issues/529 既知の問題]であり、eCryptfs {{ic|/home}} ディレクトリがマウントされたままにならない為です。
* If you use special filesystem mount options, for example {{ic|ecryptfs_xattr}}, do extra checks on restore integrity.
 
   
 
== 参照 ==
 
== 参照 ==
404行目: 373行目:
 
* [https://defuse.ca/audits/ecryptfs.htm Security audit] of eCryptfs by Taylor Hornby (2014年1月22日)
 
* [https://defuse.ca/audits/ecryptfs.htm Security audit] of eCryptfs by Taylor Hornby (2014年1月22日)
 
* [http://sysphere.org/~anrxc/j/articles/ecryptfs/index.html eCryptfs and $HOME] by Adrian C. (anrxc) - eCryptfs のインストールと使用方法に関する記事
 
* [http://sysphere.org/~anrxc/j/articles/ecryptfs/index.html eCryptfs and $HOME] by Adrian C. (anrxc) - eCryptfs のインストールと使用方法に関する記事
* [http://www.chromium.org/chromium-os/chromiumos-design-docs/protecting-cached-user-data Chromium data protection] (2009年11月) - Chromium OS の暗号化オプションに関するドキュメントですが、eCryptfs の使い方についても触れています
+
* [https://www.chromium.org/chromium-os/chromiumos-design-docs/protecting-cached-user-data Chromium data protection] (2009年11月) - Chromium OS の暗号化オプションに関するドキュメントですが、eCryptfs の使い方についても触れています
 
* [http://ecryptfs.sourceforge.net/ecryptfs.pdf eCryptfs design] by Michael Halcrow (2005年5月) - Original design document detailing and discussing eCryptfs
 
* [http://ecryptfs.sourceforge.net/ecryptfs.pdf eCryptfs design] by Michael Halcrow (2005年5月) - Original design document detailing and discussing eCryptfs

2024年6月8日 (土) 13:48時点における最新版

関連記事

この記事では eCryptfs の基本的な使い方を説明します。プライベートな暗号化ディレクトリを $HOME ディレクトリに作成して機密ファイルや個人情報を保存する方法を解説していきます。

ブロックデバイスの暗号化レイヤーを提供する dm-crypt とは異なり eCryptfs はファイルシステムそのものです – スタック暗号化ファイルシステム になります。その違いについてはディスク暗号化#比較表を参照してください。大きな特徴として既存のファイルシステム上に暗号化が積み重ねられるという点が挙げられます。eCryptfs はあらゆる既存のディレクトリにマウントすることができ、特別なパーティション (や領域の事前割り当て) を必要としません。

基本

先に述べたように eCryptfs には特殊なパーティションや予約済みの領域をディスク上に配置する必要がありません。代わりに、eCryptfs を既存のディレクトリ上にマウントしてディレクトリを保護することができます。例えば、ユーザーの $HOME ディレクトリを全体的に保護したり、逆に特定のディレクトリだけを保護したりできます。暗号のメタデータは全てファイルのヘッダの中に保存されます。つまり、暗号化したデータは簡単に移動したり、バックアップ・復元できるということです。他にも利点はありますが、欠点も存在します。例として eCryptfs はパーティション全体を暗号化するのには適していません。また、スワップ領域を eCryptfs で保護することは不可能です (もちろん、Dm-crypt/スワップの暗号化と組み合わせることはできますが)。ディスク暗号化を初めて設定する場合、スワップの暗号化などのポイントはディスク暗号化#準備に書かれています。

eCryptfs を使うなら以下がポイントです:

  • スタックファイルシステムとして、eCryptfs ディレクトリのマウントは (スタックされた) 暗号化ディレクトリを他の暗号化されていないマウントポイント (ディレクトリ) マウントすることを意味します。
  • ユーザー間で暗号化ディレクトリを共有することができます。ただし、暗号化のパスワードは一つだけなのでパスワードも共有する必要があります。(別々のパスフレーズを使って) 別々に暗号化されたファイルを一つのディレクトリで共有することもできます。
  • ドキュメントの中では eCryptfs の専門用語が頻繁に登場します:
    • eCryptfs のドキュメントやこの記事では暗号化されるディレクトリは lower (下層) と呼称して暗号化されていないディレクトリは upper (上層) ディレクトリと呼びます。この記事とは無関係ですが、Linux 3.18 で導入された "overlay" ファイルシステム ([1]) では同じ upper/lower という単語をファイルシステムのスタック化について使います。
    • マウントパスフレーズ (キー) は暗号化されたファイルへのアクセス権限を与えます。つまり暗号化を解除します。eCryptfs は wrapped という言葉を使って暗号的に安全なマウントパスフレーズを示します。
    • FEFEKFile's Encryption key Encryption Key のことです (カーネルドキュメント を参照)。
    • FNEKFile Name Encryption Key のことです。暗号化ディレクトリに保存されたファイル名を暗号化する鍵になります (任意)。

eCryptfs を使う前に、以下の欠点が障害にならないか確認してください。

欠陥

  • 使いやすさ
eCryptfs の使いやすさは主として ecryptfs-utils パッケージの "Ubuntu tools" に依存しています。決定的な欠点として、ツールの中では多数の変数 (暗号化オプションやディレクトリパス) が決め打ちされています。変数を変更するとなると大変面倒な手動設定が必要ということです。
  • ファイル名の長さ
143文字よりも長いファイル名は暗号化できません (FNEK オプションを使用した場合 [2])。一部のプログラムがホームディレクトリで動作しなくなる可能性があります (例: Symfony のキャッシュ)。
  • ネットワークストレージマウント
eCryptfs にはネットワークストレージに関する長年の バグ や機能リクエストが存在します。暗号化したディレクトリの中身をネットワークのバックアップストレージに複製することは可能です。しかしながら、ネットワークストレージ上に直接、暗号化ディレクトリを保存してそれをローカルでマウントしたい場合、まずネットワークツール (NFS や Samba など) に対応した解決方法を検索する必要があります。よく分からない場合、EncFS を使うのがベターです。
  • スパースファイル
eCryptfs はスパースファイルを扱うことができません。バグと言われることもありますが、スタックファイルシステムの暗号化として当然そうなるべきことです。例えば、eCryptfs ディレクトリに truncate -s 1G file.img で 1GB の暗号化データを作成してファイルシステムに保存する場合、それに対応するリソース (ディスク容量, データのスループット) が必要になります。暗号化しなければ、同じファイルをスパースファイルとして効率的にファイルシステムに保存できます。ブロックデバイスの暗号化はファイルシステムの出力だけを暗号化します。
巨大なディレクトリ構造を暗号化するときは予めこのことを考えておく必要があります。大抵の場合、スパースファイルを使えないことが致命的な問題になることはありません。(eCryptfs の標準の .Private ディレクトリではなく) 暗号化を施さない .Public ディレクトリにスパースファイルを保存する方法と、.Publicdm-crypt' のコンテナを使う方法があります。

セットアップ & マウント

セットアップを始める前に、eCryptfs のドキュメントを確認してください。素晴らしい マニュアルページ が付属しています。

eCryptfs はバージョン 2.6.19 から Linux に含まれています。ecryptfs モジュールをロードしてからセットアップに進みます:

# modprobe ecryptfs

eCryptfs ファイルシステムをマウントするには、ecryptfs-utils パッケージに含まれているユーザースペースツールが必要です。残念ながら、ツールの設計上、それぞれ長短のある以下の3つから eCryptfs を設定する方法を選択する必要があります:

  1. Ubuntu のツールを使用する。設定を自動的に行うことができますが、ディレクトリは ~/.Private/ に決め打ちになり、ユーザーごとにひとつしか暗号化ファイルシステムを作成できません。
  2. ecryptfs-simple を使用する。下層ディレクトリと上層ディレクトリを使って eCryptfs ファイルシステムを簡単にマウントすることができます。
  3. パスフレーズのロードと eCryptfs のマウントを別々に行う手動セットアップ。ディレクトリや暗号化設定を完全に制御できます。

Ubuntu のツールを使う

ecryptfs-utils パッケージでインストールされるユーザーフレンドリで便利なツールは特殊な eCryptfs セットアップを使います。つまり Ubuntu によって公式で使われているセットアップです (ディストリのインストール時にオプションとして選択できます)。残念ながら、デフォルトのオプションは使われずにツールにハードコードされています。このセットアップがあなたに合わない場合、便利なツールを使うのを諦めて #手動セットアップ を行う必要があります。

ツールで使われるセットアップとは以下になります:

  • ツールで管理できる暗号化ディレクトリはユーザーごとに一つずつになります:
    • $HOME ディレクトリを完全に暗号化する。あるいは、
    • 単一の暗号化データディレクトリ (デフォルトでは ~/Private/ ですがカスタマイズできます)。
  • ユーザー各自の下層ディレクトリ~/.Private/ になります。
    (ホームディレクトリを暗号化する場合、/home/.ecryptfs/$USER/.Private/ へのシンボリックリンクになります)
  • 使用される暗号化オプション:
    • 暗号: AES
    • 鍵長: 16 バイト (128 ビット)
    • 鍵の管理方式: パスフレーズ
    • プレーンテキストパススルー: 有効
  • 暗号化ディレクトリの設定や制御情報は ~/.ecryptfs/ のファイルに保存されます:
    (ホームディレクトリを暗号化する場合、/home/.ecryptfs/$USER/.ecryptfs/ へのシンボリックリンクになります)
    • Private.mnt [プレーンテキストファイル] - 上層ディレクトリをマウントするパスが記述されます (例: /home/lucy/home/lucy/Private)。
    • Private.sig [プレーンテキストファイル] - カーネルのキーリングでマウントパスフレーズを確認するのに使われる署名。
    • wrapped-passphrase [バイナリファイル] - マウントパスフレーズ。ログインパスフレーズで暗号化されます。
    • auto-mount, auto-umount [空のファイル] - ファイルが存在する場合、ユーザーのログイン・ログアウト時に pam_ecryptfs.so モジュールが (ロードされていれば) 自動的に暗号化ディレクトリをマウント・アンマウントします。

データディレクトリの暗号化

$HOME ディレクトリを暗号化する場合は #ホームディレクトリの暗号化 を見て下さい。

データディレクトリの暗号化をセットアップする前に、手動でマウントするか、ユーザーのログイン時に自動的にマウントするか決めておいて下さい。

一人一個のデータディレクトリを暗号化して手動でマウントする場合、次を実行:

$ ecryptfs-setup-private --nopwcheck --noautomount 

指示に従って下さい。--nopwcheck オプションが付いているのでユーザーのログインパスフレーズ以外のパスフレーズを選択することができます。--noautomount オプションはその名の通りです。つまり、ログイン時に自動的に暗号化ディレクトリをマウントするようにセットアップしたい場合、両方のオプションを取り除いて実行してください。

スクリプトは先に述べた ~/.Private/~/.ecryptfs/ ディレクトリを自動的に作成します。2つのパスフレーズが要求されます:

ログインパスフレーズ
暗号化ディレクトリをマウントするたびに入力する必要があるパスワードです。ログイン時に自動マウントさせる場合、ユーザーアカウントにログインするときに使うのと同じパスワードでなくてはなりません。
マウントパスフレーズ
ファイル暗号化のマスターキーを取得するのに使われます。そのため、よく分からない場合は自分で入力してはいけません。Enter を押せば勝手にランダムなパスフレーズが自動生成されます。ログインパスフレーズを使って暗号化され ~/.ecryptfs/wrapped-passphrase に保存されます。必要になったときに RAM で自動的に復号化されるため ("unwrapped")、手動で入力する必要は二度とありません。このファイルが消えてしまうと、暗号化フォルダに永久にアクセスできなくなります。暗号化されていないマウントパスフレーズは ecryptfs-unwrap-passphrase を実行することで確認できます。紙に書き写して、金庫 (など) に保管しておくのが良いでしょう。書き写したパスフレーズを使えば、何らかの理由で wrapped-passphrase ファイルが消失・破損してしまった場合やログインパスフレーズを忘れてしまった場合に暗号化データを復元することができます。

暗号化ディレクトリのマウントポイント ("上層ディレクトリ") はデフォルトでは ~/Private となっていますが、セットアップコマンドを実行した後に以下を実行することで手動で変更できます:

$ mv ~/Private /path/to/new/folder
$ echo /path/to/new/folder > ~/.ecryptfs/Private.mnt

実際に暗号化フォルダを使うには、マウントする必要があります。下の #マウント を見て下さい。

ホームディレクトリの暗号化

ecryptfs-migrate-home スクリプトは特定のユーザーの $HOME に暗号化ディレクトリをセットアップして、暗号化されていないホームディレクトリに存在する既存のファイルを自動的に移動します。設定するユーザーはログアウトしていること、ユーザーのプロセスが存在しないことを確認してください (ps -U username で何も出力されないことをチェックしてください)。問題ないようでしたら、以下を実行:

# modprobe ecryptfs
# ecryptfs-migrate-home -u username

そして指示に従って下さい。ラッパースクリプトを実行したら、自動マウントの設定をしてください。下の #自動マウント を参照。設定を完了するには、再起動するにユーザーがログインする必要があります。

全て設定できたら、/home/username.random_characters に保存されたホームディレクトリのバックアップは削除してかまいません。

マウント

手動

ラッパーを実行:

$ ecryptfs-mount-private

後はパスフレーズを入力するだけで上述上層ディレクトリである ~/Private に暗号化ディレクトリをマウントできます。

同じように、以下を実行するとアンマウントされます:

$ ecryptfs-umount-private
ヒント: ユーザーセッションの間に永続的にプライベートのデータにアクセスする必要がない場合、エイリアスを定義することで高速化できます。

ツールには、暗号化された .Private のデータやホームディレクトリにアクセスするための便利なスクリプトも含まれています。root で ecryptfs-recover-private を実行するとディレクトリが存在しないかシステムが検索されて (あるいはパスを指定することもできます)、インタラクティブにパスフレーズが要求されてディレクトリがマウントされます。ライブ CD や別のシステムから、リカバリを行う時に暗号化データにアクセスするのに使うことができます。Arch Linux ISO から起動する場合、まず ecryptfs-utils をインストールしないと使えないので注意してください。さらに、このスクリプトは Ubuntu ツールで作成した .Private ディレクトリしかマウントできません。

自動マウント

暗号化ディレクトリを自動マウントするデフォルトの方法は PAM です。詳しくは pam_ecryptfs(8) や以下のファイルの 'PAM MODULE' を見て下さい:

/usr/share/doc/ecryptfs-utils/README

自動でマウントするには、暗号化ディレクトリにアクセスするためのパスフレーズとユーザーがログイン時に使用するパスフレーズが一致している必要があります。

以下の手順でセットアップします:

1. ~/.ecryptfs/auto-mount, ~/.ecryptfs/auto-umount, ~/.ecryptfs/wrapped-passphrase が存在することを確認してください (ecryptfs-setup-private によって自動的に作成されます)。

2. 以下のように pam に ecryptfs を追加することでログイン時に透過的にパスフレーズが解除されるようにします:

/etc/pam.d/system-auth を開いて auth required pam_unix.so と書かれた行の後ろに以下を追加:

auth    required    pam_ecryptfs.so unwrap

次に、password required pam_unix.so と書かれた行のに以下を挿入:

password    optional    pam_ecryptfs.so

最後に、session required pam_unix.so という行のに以下を追加:

session    optional    pam_ecryptfs.so unwrap

3. 再ログインして mount の出力を確認します。以下のようにユーザーの暗号化ディレクトリのマウントポイントが表示されるはずです:

/home/$USER/.Private on /home/$USER/Private type ecryptfs (...)

これで自動的に ~$HOME/Private/ を読めるようになります。

ディレクトリはユーザーのログオフ時に自動的にアンマウントされて読めなくなります。

ノート: The above changes to system-auth enable auto-mounting for normal login. If you switch users instead, using su - or su -l, you need to apply similar changes also to /etc/pam.d/su-l.
警告: Unfortunately the automatic unmounting is susceptible to break with systemd and bugs are filed against it.[3] [4] [5] [6] If you experience this problem, you can test it by commenting out -session optional pam_systemd.so in /etc/pam.d/system-login. However, this is no solution because commenting out will break other systemd functionalities.

ecryptfs-simple を使う

EncFS と同じように任意のディレクトリをマウントすることだけに eCryptfs を使う場合 ecryptfs-simple を使って下さい。ecryptfs-simple は root 権限を必要とせず /etc/fstab にエントリを書く必要もありません。さらに ~/.Private などのディレクトリにハードコードもされていません。ecryptfs-simpleAURXyne のリポジトリ からパッケージをインストールできます。

名は体を表すとおり、使用方法はシンプルです:

# simple mounting
ecryptfs-simple /path/to/foo /path/to/bar
# automatic mounting: prompts for options on the first mount of a directory then reloads them next time
ecryptfs-simple -a /path/to/foo /path/to/bar
# unmounting by source directory
ecryptfs-simple -u /path/to/foo
# unmounting by mountpoint
ecryptfs-simple -u /path/to/bar

手動セットアップ

以下では eCryptfs による暗号化ディレクトリを手動でセットアップする方法を説明します。設定は2段階で行います。まず、パスフレーズをカーネルのキーリングにロードします。そして、キーリングのキーを使ってファイルシステムをマウントします。

カーネルのキーリングにパスフレーズを追加する方法は2つ存在します。簡単なのは ecryptfs-add-passphrase で、ひとつのパスフレーズを使ってファイルを暗号化します。デメリットとしてパスフレーズを後から変更することはできません。以下のように使用します:

$ ecryptfs-add-passphrase
Passphrase: 
Inserted auth tok with sig [78c6f0645fe62da0] into the user session keyring

ecryptfs-add-passphrase - にパスフレーズをパイプで渡すこともできます。パスフレーズをファイルの中に書いてしまったら、暗号化を使う意味がなくなるので注意してください。

As an alternative to a plain passphrase, you can use a "wrapped passphrase", where the files are encrypted using a randomly generated key, which is itself encrypted with your passphrase and stored in a file. In this case, you can change your passphrase by unwrapping the key file with your old passphrase and rewrapping it using your new passphrase.

In the following we do a generation similar to the source and then use ecryptfs-wrap-passphrase to wrap it with the password ("Arch") to ~/.ecryptfs/wrapped-passphrase:

$ printf "%s\n%s" $(od -x -N 100 --width=30 /dev/random | head -n 1 | sed "s/^0000000//" | sed "s/\s*//g") "Arch" | ecryptfs-wrap-passphrase /home/username/.ecryptfs/wrapped-passphrase

Next, we can enter our passphrase "Arch" to load the key into the keyring:

$ printf "%s" "Arch" | ecryptfs-insert-wrapped-passphrase-into-keyring /home/username/.ecryptfs/wrapped-passphrase -
Inserted auth tok with sig [7c5d3dd8a1b49db0] into the user session keyring

In either case, when you successfully add the passphrase to the kernel keyring, you will get a "key signature" like 78c6f0645fe62da0 which you will need in the next step.

There are two different ways of manually mounting eCryptfs, described in the following sections. The first way, using mount.ecryptfs_private, can be run as a regular user and involves setting up some configuration files. This method does not allow you to change the encryption settings, such as key size. The second way is to use a raw mount command, which gives you complete control over all settings, but requires you to either run it as root, or add an entry to /etc/fstab which lets a user mount eCryptfs.

ヒント: The following examples use an encrypted directory (.secret) different to the default, hard-coded .Private in the Ubuntu tools. This is on purpose to avoid problems of erroneous #Auto-mounting when the system has PAM setup for it, as well as problems with other tools using the hard-coded defaults.

ecryptfs-utils を使う

This method involves running mount.ecryptfs_private from the ecryptfs-utils package, after first loading your passphrase. This binary requires no root privileges to work by default.

First choose a name for your configuration files in ~/.ecryptfs and decide on the lower and upper directories. In this example we use secret for the configuration files, put in encrypted data in ~/.secret, and mount the decrypted files at ~/secret. Create the required directories:

$ mkdir ~/.secret ~/secret ~/.ecryptfs

Now specify the directories in ~/.ecryptfs/secret.conf, using full paths. Its format looks like the one in /etc/fstab without the mount options:

$ echo "$HOME/.secret $HOME/secret ecryptfs" > ~/.ecryptfs/secret.conf

Write the key signature you got from ecryptfs-add-passphrase or ecryptfs-insert-wrapped-passphrase-into-keyring (see above) into ~/.ecryptfs/secret.sig:

$ echo 78c6f0645fe62da0 > ~/.ecryptfs/secret.sig

If you also want to enable filename encryption, add a second passphrase to the keyring (or reuse the first passphrase) and append its key signature to ~/.ecryptfs/secret.sig:

 $ echo 326a6d3e2a5d444a >> ~/.ecryptfs/secret.sig

Finally, mount ~/.secret on ~/secret:

$ mount.ecryptfs_private secret

When you are done, unmount it:

$ umount.ecryptfs_private secret

ecryptfs-utils を使わない

By running the actual mount command manually, you get complete control over the encryption options. The disadvantage is that you need to either run mount as root, or add an entry to /etc/fstab for each eCryptfs directory so users can mount them.

First create your private directories. In this example, we use the same ones as the previous section:

$ mkdir -m 700 ~/.secret
$ mkdir -m 500 ~/secret

To summarize:

  • Actual encrypted data will be stored in the lower ~/.secret directory
  • While mounted, decrypted data will be available in ~/secret directory
    • While not mounted nothing can be written to this directory
    • While mounted it has the same permissions as the lower directory

Now, supposed you have created the wrapped keyphrase above, you need to insert the encryption key once to the root user's keyring:

# printf "%s" "Arch" | ecryptfs-insert-wrapped-passphrase-into-keyring /home/username/.ecryptfs/wrapped-passphrase -
Inserted auth tok with sig [7c5d3dd8a1b49db0] into the user session keyring

so that the followng mount command succeeds:

# mount -i -t ecryptfs ~/.secret ~/secret -o ecryptfs_sig=7c5d3dd8a1b49db0,ecryptfs_fnek_sig=7c5d3dd8a1b49db0,ecryptfs_cipher=aes,ecryptfs_key_bytes=32,ecryptfs_unlink_sigs
  • ecryptfs_sig sets the data passphrase key signature.
  • ecryptfs_fnek_sig sets the filename passphrase key signature; you can omit this option if you do not want to encrypt filenames.
  • ecryptfs_key_bytes can be 16, 24, or 32 to change the encryption key size.
  • ecryptfs_unlink_sigs will remove the passphrase(s) from the keyring when you unmount, so you have to add the passphrase(s) back again in order to re-mount the filesystem.
  • There are a few other options listed in the ecryptfs man page.
ヒント: There is a mount.ecryptfs tool, which you can run as root to enter the mount settings interactively. Once you have used it to mount eCryptfs, you can check /etc/mtab to find out what options it used.

Once you have chosen the right mount options, you can add an entry to /etc/fstab so regular users can mount eCryptfs on these directories. Copy the mount options to a new /etc/fstab entry and add the options user and noauto. The full entry will look similar to (bold entries added):

/etc/fstab
/home/username/.secret /home/username/secret ecryptfs noauto,user,ecryptfs_sig=7c5d3dd8a1b49db0,ecryptfs_fnek_sig=7c5d3dd8a1b49db0,ecryptfs_cipher=aes,ecryptfs_key_bytes=32,ecryptfs_unlink_sigs 0 0
  • The noauto option is important, because otherwise systemd will error trying to mount the entry directly on boot.
  • The user option enables to mount the directory as a user.
    • The user mount will default to option noexec. If you want to have at least executable files in your private directory, you can add exec to the fstab options.

The setup is now complete and the directory should be mountable by the user.

マウント

To mount the encrypted directory as the user, the passphrase must be unwrapped and made available in the user's keyring. Following above section example:

$ ecryptfs-insert-wrapped-passphrase-into-keyring /home/username/.ecryptfs/wrapped-passphrase
Passphrase: 
Inserted auth tok with sig [7c5d3dd8a1b49db0] into the user session keyring 

Now the directory can be mounted without the mount helper questions:

$ mount -i /home/username/secret

and files be placed into the secret directory. The above two steps are necessary every time to mount the directory manually.

To unmount it again:

$ umount /home/username/secret

To finalize, the preliminary passphrase to wrap the encryption passphrase may be changed:

$ ecryptfs-rewrap-passphrase /home/username/.ecryptfs/wrapped-passphrase
Old wrapping passphrase: 
New wrapping passphrase: 
New wrapping passphrase (again):

The un-mounting should also clear the keyring, to check the user's keyring or clear it manually:

$ keyctl list @u
$ keyctl clear @u
ノート: One should remember that /etc/fstab is for system-wide partitions only and should not generally be used for user-specific mounts
自動マウント

Different methods can be employed to automount the previously defined user-mount in /etc/fstab on login. As a first general step, follow point (1) and (2) of #Auto-mounting.

Then, if you login via console, a simple way is to specify the user-interactive mount and umount in the user's shell configuration files, for example Bash#Configuration files.

Another method is to automount the eCryptfs directory on user login using pam_mount. To configure this method, add the following lines to /etc/security/pam_mount.conf.xml:

<luserconf name=".pam_mount.conf.xml" />
<mntoptions require="" /> 
<lclmount>mount -i %(VOLUME) "%(before=\"-o\" OPTIONS)"</lclmount> 

Please prefer writing manually these lines instead of simply copy/pasting them (especially the lclmount line), otherwise you might get some corrupted characters. Explanation:

  • the first line indicates where the user-based configuration file is located (here ~/.pam_mount.conf.xml)
  • the second line overwrites the default required mount options which are unnecessary ("nosuid,nodev")
  • the last line indicates which mount command to run (eCryptfs needs the -i switch).

Then set the volume definition, preferably to ~/.pam_mount.conf.xml:

<pam_mount>
    <volume noroot="1" fstype="ecryptfs" path="/home/user/.secret/" mountpoint="/home/user/secret/"/>
</pam_mount>

"noroot" is needed because the encryption key will be added to the user's keyring.

Finally, edit /etc/pam.d/login as described in pam_mount's article.

任意のステップ

パスフレーズをアンラップするために不必要に時間を無駄にすることを避けるために、pmvarrun をチェックして開いているセッションの数を確認するスクリプトを作成できます。

#!/bin/sh
#
#    /usr/local/bin/doecryptfs

exit $(/usr/sbin/pmvarrun -u$PAM_USER -o0)

PAM スタックの eCryptfs unwrap モジュールの前に次の行を追加します:

auth    [success=ignore default=1]    pam_exec.so     quiet /usr/local/bin/doecryptfs
auth    required                      pam_ecryptfs.so unwrap

この記事では、これらを /etc/pam.d/login に追加することを提案していますが、ログインする他のすべての場所 (/etc/pam.d/kde など) に変更を追加する必要があります。

使用方法

暗号化ディレクトリにシンボリックリンクを作成

プライベートディレクトリを重要なファイルやプライベートなデータを保存する場所として使う以外に、アプリケーションのデータを保護するのに使うことも可能です。例えば Firefox にはパスワードマネージャが組み込まれていますが、ブラウザの履歴やキャッシュなども機密情報と言えます。簡単に保護できます:

 $ mv ~/.mozilla ~/Private/mozilla
 $ ln -s ~/Private/mozilla ~/.mozilla

暗号化の解除

プライベートディレクトリを削除するときに、特別な手順は必要ありません。アンマウントされていることを確認してから、暗号化ファイルが入っている下層ディレクトリ (例: ~/.Private) を削除してください。~/.ecryptfs にある暗号化署名や設定も削除してしまえば、全てが泡と消えます。

#Ubuntu のツールを使う のとおりにディレクトリの暗号化をセットアップした場合、以下を実行することで直接削除できます:

$ ecryptfs-setup-private --undo

指示に従って下さい。

バックアップ

プライベートディレクトリからファイルを外に出したいときは、~/Private をマウントして新しい場所に移動するだけです。

eCryptfs を使用すると、暗号化メタデータがファイルのヘッダーに保存されます。この記事で説明するセットアップのバリエーションでは、暗号化されたデータを含むディレクトリをマウントポイントから分離します。暗号化されていないマウントポイントは完全に透過的であり、バックアップに使用できます。暗号化されていない機密データがバックアップに漏洩することを避ける必要がある場合、自動バックアップについては明らかにこれを考慮する必要があります。

暗号化された (例: ~/.Private/) ディレクトリを他のディレクトリと同様に扱い、バックアップまたは増分バックアップを実行できます。

その他の注意事項:

  • Ubuntu ツールを使って #データディレクトリの暗号化 をした場合、暗号化したファイルが含まれた低層ディレクトリは通常ユーザーの $HOME から外れた /home/.ecryptfs/$USER/.Private にあるので注意してください。
  • eCryptfs セットアップファイル (通常は ~/.ecryptfs にあります) を通常のバックアップまたは別のバックアップに必ず含める必要があります。
  • 特殊なファイルシステムのマウントオプションを使用している場合 (例: ecryptfs_xattr)、リストア時に確認をしてください。

既知の問題

Mosh 経由で接続するとリモートホストでマウントが失敗することがある

これは、Mosh サーバーの既知の問題であり、eCryptfs /home ディレクトリがマウントされたままにならない為です。

参照

  • eCryptfs - Man ページとプロジェクトホーム
  • Security audit of eCryptfs by Taylor Hornby (2014年1月22日)
  • eCryptfs and $HOME by Adrian C. (anrxc) - eCryptfs のインストールと使用方法に関する記事
  • Chromium data protection (2009年11月) - Chromium OS の暗号化オプションに関するドキュメントですが、eCryptfs の使い方についても触れています
  • eCryptfs design by Michael Halcrow (2005年5月) - Original design document detailing and discussing eCryptfs