「Fscrypt」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(Linux コンテナ内の暗号化 (lxc)を翻訳して追加)
(序文を更新)
 
(2人の利用者による、間の6版が非表示)
3行目: 3行目:
 
[[en:Fscrypt]]
 
[[en:Fscrypt]]
 
{{Related articles start}}
 
{{Related articles start}}
{{Related|ディスク暗号化}}
+
{{Related|保存ータ暗号化}}
 
{{Related|Ext4}}
 
{{Related|Ext4}}
 
{{Related|F2FS}}
 
{{Related|F2FS}}
 
{{Related articles end}}
 
{{Related articles end}}
   
  +
'''fscrypt''' は [[ext4]]、[[F2FS]]、[[Wikipedia:UBIFS|UBIFS]] [[ファイルシステム]] のネイティブファイル暗号化サポートを管理するツールです。
[[ext4]], [[F2FS]], [[Wikipedia:ja:UBIFS|UBIFS]] [[ファイルシステム]]は '''fscrypt''' (旧名 "ext4 encryption") と呼ばれる共通 API によるファイル暗号化にネイティブで対応しています。fscrypt ではディレクトリ単位で暗号化を適用できます。ディレクトリごとに別々の暗号鍵を使用することが可能です。ディレクトリを暗号化するとファイルの中身、ファイル名、シンボリックリンク全てが暗号化されます。サブディレクトリも全て暗号化されます。ファイル名以外のメタデータ、タイムスタンプや容量、ファイルの数、拡張属性などは暗号化されません。
 
   
  +
上記のファイルシステムに統合されている [https://docs.kernel.org/filesystems/fscrypt.html カーネル内の基本的な暗号化メカニズム] は、''fscrypt'' と呼ばれることもあります。曖昧さを避けるため、この記事ではカーネルの機能を ''Linux ネイティブファイル暗号化'' と呼びます。Linux ネイティブファイル暗号化では、異なるディレクトリで異なる暗号化キーを使用することができます。暗号化されたディレクトリでは、すべてのファイルの内容、ファイル名、シンボリックリンクが暗号化され。すべてのサブディレクトリも暗号化されます。タイムスタンプ、ファイルのサイズや数、拡張属性など、ファイル名以外のメタデータは暗号化されません。
'''fscrypt''' はカーネルの機能を使うための同名のユーザースペースツールの名前でもあります。この記事では [https://github.com/google/fscrypt fscrypt ツール] を使ってホームディレクトリなどを暗号化する方法を説明します。
 
   
  +
この記事は ''fscrypt'' ツール (およびオプションで ''fscrypt'' に付随する ''pam_fscrypt'') の使用を前提としているため、Linux ネイティブのファイル暗号化を設定できる他のユーザ空間ツール、例えば [[systemd-homed]] には適用できない部分がほとんどです。
== 他のディスク暗号化 ==
 
  +
  +
== 検討すべき代替案 ==
   
 
ファイルシステム全体をひとつのパスワードで保護したい場合、[[dm-crypt]] でブロックデバイス暗号化するほうが良いでしょう。その場合、ファイルシステムのメタデータも全て暗号化されます。特定のディレクトリだけを暗号化したい場合や、それぞれのディレクトリのロックを別個に解除したい場合 (ユーザーごとにホームディレクトリを暗号化するなど) は fscrypt が相応しいと思われます。
 
ファイルシステム全体をひとつのパスワードで保護したい場合、[[dm-crypt]] でブロックデバイス暗号化するほうが良いでしょう。その場合、ファイルシステムのメタデータも全て暗号化されます。特定のディレクトリだけを暗号化したい場合や、それぞれのディレクトリのロックを別個に解除したい場合 (ユーザーごとにホームディレクトリを暗号化するなど) は fscrypt が相応しいと思われます。
20行目: 22行目:
 
他の暗号化手段に関する詳細については[[ディスク暗号化]]を参照してください。
 
他の暗号化手段に関する詳細については[[ディスク暗号化]]を参照してください。
   
  +
{{Note|
{{Note|{{Pkg|e2fsprogs}} の {{ic|e4crypt}} ツールを {{ic|fscrypt}} ツールの代わりとして使うことができます。ただし、{{ic|e4crypt}} には基本的な機能が存在せず既に開発されていないため使用は推奨されません。}}
 
  +
* ''fscrypt'' を [[dm-crypt]] と組み合わせて使用​​することが可能で、各暗号化層が異なる目的を果たします。たとえば、ファイルシステム自体は、''セキュア ブート'' に関連付けられた TPM やシステムのすべてのユーザーに知られているパスワードなど、安全性の低い方法を使用して dm-crypt によって保護できますが、各ユーザーのホームディレクトリもそのユーザーのみが知っているパスワードを使用して ''fscrypt'' を実行します。
  +
* {{Pkg|e2fsprogs}} の ''e4crypt'' ツールは、''fscrypt'' ツールの代わりに使用できます。ただし、''e4crypt'' には多くの基本機能が欠けており、現在は積極的に開発されていないため、これはお勧めできません。
  +
* {{Pkg|f2fs-tools}} の ''f2fscrypt'' は ''e4crypt'' の単なるコピーであり、同様に推奨されません。
  +
}}
   
 
== 準備 ==
 
== 準備 ==
34行目: 40行目:
 
==== ext4 ====
 
==== ext4 ====
   
[[ext4]] の場合、暗号化したいファイルシステムについて {{ic|encrypt}} フラグ有効にる必要があります。そのためにはまずファイルシステムがページサイズのブロック使っていることを確認てください:
+
[[ext4]] の場合、暗号化が使用されるファイルシステムでは、{{ic|encrypt}} 機能フラグ有効になっている必要があります。有効にするには、実行ます。
 
{{hc|# tune2fs -l ''/dev/device'' {{!}} grep 'Block size'|
 
Block size: 4096
 
}}
 
 
{{hc|# getconf PAGE_SIZE|
 
4096
 
}}
 
 
上記の値が異なっている場合、ファイルシステムを暗号化することはできません。
 
 
ファイルシステムの {{ic|encrypt}} 機能を有効化するには、以下のコマンドを実行します:
 
   
 
# tune2fs -O encrypt ''/dev/device''
 
# tune2fs -O encrypt ''/dev/device''
   
  +
{{Tip|新しいファイルシステムを作成する際に {{ic|mkfs.ext4 -O encrypt}} とすることで {{ic|encrypt}} 機能をすぐに有効化できます。}}
{{Warning|{{ic|encrypt}} 機能が一度有効になると、4.1 以前の Linux はそのファイルシステムをマウントできなくなります。}}
 
 
{{Tip|
 
* 機能の有効化は {{ic|debugfs -w -R "feature -encrypt" ''/dev/device''}} で解除できます。[[fsck]] を実行してファイルシステムの整合性を確認してください。
 
* 新しいファイルシステムを作成する際に {{ic|mkfs.ext4 -O encrypt -b 4096}} とすることで {{ic|encrypt}} 機能を即座に有効化できます。
 
}}
 
   
 
==== F2FS ====
 
==== F2FS ====
79行目: 68行目:
 
{{Warning|{{ic|.fscrypt}} ディレクトリを削除してはいけません。そうすると暗号化されたファイルにアクセスできなくなります。}}
 
{{Warning|{{ic|.fscrypt}} ディレクトリを削除してはいけません。そうすると暗号化されたファイルにアクセスできなくなります。}}
   
  +
=== PAM モジュール ===
=== ディレクトリの自動アンロック ===
 
   
ログイン用のパスフレーズで暗号化ディレクトリを保護して、グイン時に自動的にロックを解除したい場合、[[PAM]] の設定編集して {{ic|pam_fscrypt}} を有効てください:
+
ログイン時にログインパスフレーズで保護されたディレクトリックを自動的に解除し、ログインパスフレーズで保護されディレクトリをログインパスフレーズの変更と同期させておくにはシステム [[PAM]] 構成調整して ''pam_fscrypt'' を有効ます。
   
{{ic|/etc/pam.d/system-login}} の "auth" セクションに以下の行を追加:
+
{{ic|/etc/pam.d/system-login}} の ''auth'' セクションにの行を [[ヘルプ:読み方#追加, 追記, 作成, 編集|追加]] します。
   
  +
{{hc|/etc/pam.d/system-login|
auth optional pam_fscrypt.so
 
  +
auth optional pam_fscrypt.so
  +
}}
   
また、{{ic|/etc/pam.d/system-login}} の "session" セクション以下の行を追加:
+
''session'' セクションの {{ic|session include system-auth}} の '''前'''の行を挿入します。
   
  +
{{hc|/etc/pam.d/system-login|2=
session optional pam_fscrypt.so drop_caches lock_policies
 
  +
session [success=1 default=ignore] pam_succeed_if.so service = systemd-user quiet
  +
session optional pam_fscrypt.so
  +
}}
   
  +
{{Note|[https://github.com/google/fscrypt/issues/95#issuecomment-377389231 https://github.com/google/fscrypt/issues/95] から取得した最初の行は、{{ ic|systemd --user}} セッションのバイパスであり [https://github.com/systemd/systemd/issues/8598 は PAM セッションを適切に閉じず] ログアウト時のロックがブロックされます。}}
最後に、{{ic|/etc/pam.d/passwd}} に以下の行を追加:
 
   
  +
最後に、次の行を {{ic|/etc/pam.d/passwd}} に [[ヘルプ:読み方#追加, 追記, 作成, 編集|追加]] します。
password optional pam_fscrypt.so
 
  +
  +
{{hc|/etc/pam.d/passwd|
  +
password optional pam_fscrypt.so
  +
}}
   
 
== ディレクトリの暗号化 ==
 
== ディレクトリの暗号化 ==
146行目: 144行目:
 
元のファイルを削除してもディスクからフォレンジックによって復元できる可能性があります (特に SSD を使用している場合)。データは最初から暗号化された状態にすることを推奨します。}}
 
元のファイルを削除してもディスクからフォレンジックによって復元できる可能性があります (特に SSD を使用している場合)。データは最初から暗号化された状態にすることを推奨します。}}
   
== ディレクトリの手動アンロック ==
+
== ディレクトリのロック/ロック解除 ==
   
手動で暗号化ディレクトリを解するには、以下のコマンドを実行:
+
暗号化されたディレクトリのロックを解するには、を実行します。
   
 
$ fscrypt unlock ''dir''
 
$ fscrypt unlock ''dir''
   
{{ic|fscrypt}} はパスフレーズの入力をます。
+
''fscrypt'' はパスフレーズの入力を求ます。
  +
  +
暗号化されたディレクトリをロックするには、次を実行します。
  +
  +
$ fscrypt lock ''dir''
   
 
== ホームディレクトリの暗号化 ==
 
== ホームディレクトリの暗号化 ==
   
  +
{{Warning|
{{Warning|ユーザーのホームディレクトリが暗号化されている場合、ホームディレクトリの暗号化が解除されるまでそのユーザーに ssh でログインできなくなります。}}
 
  +
* ログインプロテクターは、{{ic|/etc/shadow}} でのシステムのパスフレーズハッシュと同等の安全性しかありません。ログインプロテクターを使用する前に、必ず [https://github.com/google/fscrypt#securing-your-login-passphrase セキュリティに関する推奨事項] に従ってください。
  +
* ユーザーのホームディレクトリが暗号化されている場合、ホームディレクトリの暗号化が解除されるまでそのユーザーに ssh でログインできなくなります。}}
   
 
ユーザーのホームディレクトリを暗号化するには、最初に {{ic|pam_fscrypt}} の有効化などの[[#準備|準備]]を行ってください。
 
ユーザーのホームディレクトリを暗号化するには、最初に {{ic|pam_fscrypt}} の有効化などの[[#準備|準備]]を行ってください。
205行目: 209行目:
 
== Linux コンテナ内の暗号化 (lxc) ==
 
== Linux コンテナ内の暗号化 (lxc) ==
   
[[Linux Containers]](lxc)内、またはより一般的にはファイルシステムのルートディレクトリが表示されない {{man|7|mount_namespaces}} での fscrypt の使用のサポートが v0.2.8 で追加されました。
+
[[Linux Containers]](lxc)内、またはより一般的にはファイルシステムのルートディレクトリが表示されない {{man|7|mount_namespaces}} での fscrypt の使用のサポートが v0.2.8 で追加されました。
   
 
=== コンテナ停止時にディレクトリをロック ===
 
=== コンテナ停止時にディレクトリをロック ===

2023年7月3日 (月) 01:07時点における最新版

関連記事

fscryptext4F2FSUBIFS ファイルシステム のネイティブファイル暗号化サポートを管理するツールです。

上記のファイルシステムに統合されている カーネル内の基本的な暗号化メカニズム は、fscrypt と呼ばれることもあります。曖昧さを避けるため、この記事ではカーネルの機能を Linux ネイティブファイル暗号化 と呼びます。Linux ネイティブファイル暗号化では、異なるディレクトリで異なる暗号化キーを使用することができます。暗号化されたディレクトリでは、すべてのファイルの内容、ファイル名、シンボリックリンクが暗号化され。すべてのサブディレクトリも暗号化されます。タイムスタンプ、ファイルのサイズや数、拡張属性など、ファイル名以外のメタデータは暗号化されません。

この記事は fscrypt ツール (およびオプションで fscrypt に付随する pam_fscrypt) の使用を前提としているため、Linux ネイティブのファイル暗号化を設定できる他のユーザ空間ツール、例えば systemd-homed には適用できない部分がほとんどです。

検討すべき代替案

ファイルシステム全体をひとつのパスワードで保護したい場合、dm-crypt でブロックデバイス暗号化するほうが良いでしょう。その場合、ファイルシステムのメタデータも全て暗号化されます。特定のディレクトリだけを暗号化したい場合や、それぞれのディレクトリのロックを別個に解除したい場合 (ユーザーごとにホームディレクトリを暗号化するなど) は fscrypt が相応しいと思われます。

eCryptfs とは異なり、fscrypt はスタックファイルシステムではありません。ファイルシステムによってネイティブでサポートされています。そのため fscrypt はメモリの使用量が低くなっています。また、fscrypt は最新の暗号技術を使用し、setuid バイナリを必要としません。さらに、eCryptfs は開発が止まっているため、主要なユーザーは dm-crypt (Ubuntu) や fscrypt (Android と Chrome OS) に移っています。

他の暗号化手段に関する詳細についてはディスク暗号化を参照してください。

ノート:
  • fscryptdm-crypt と組み合わせて使用​​することが可能で、各暗号化層が異なる目的を果たします。たとえば、ファイルシステム自体は、セキュア ブート に関連付けられた TPM やシステムのすべてのユーザーに知られているパスワードなど、安全性の低い方法を使用して dm-crypt によって保護できますが、各ユーザーのホームディレクトリもそのユーザーのみが知っているパスワードを使用して fscrypt を実行します。
  • e2fsprogse4crypt ツールは、fscrypt ツールの代わりに使用できます。ただし、e4crypt には多くの基本機能が欠けており、現在は積極的に開発されていないため、これはお勧めできません。
  • f2fs-toolsf2fscrypte4crypt の単なるコピーであり、同様に推奨されません。

準備

カーネル

公式サポートされているカーネルでは ext4, F2FS, UBIFS で fscrypt に対応しています。

カスタムカーネルのバージョン 5.1 以上を使っている場合、CONFIG_FS_ENCRYPTION=y を設定してください。古いカーネルの場合は ドキュメント を見てください。

ファイルシステム

ext4

ext4 の場合、暗号化が使用されるファイルシステムでは、encrypt 機能フラグが有効になっている必要があります。有効にするには、次を実行します。

# tune2fs -O encrypt /dev/device
ヒント: 新しいファイルシステムを作成する際に mkfs.ext4 -O encrypt とすることで encrypt 機能をすぐに有効化できます。

F2FS

F2FS の場合、fsck.f2fs -O encrypt または mkfs.f2fs -O encrypt を使ってください。

ユーザースペースツール

fscrypt-gitAURインストールしてください。または、以前インストールしていた場合は最新版にアップグレードしてください。それから以下のコマンドを実行:

# fscrypt setup

上記のコマンドで /etc/fscrypt.conf ファイルと /.fscrypt ディレクトリが作成されます。

そして、暗号化したいファイルシステムがルートファイルシステムではない場合、以下のコマンドを実行してください:

# fscrypt setup mountpoint

mountpoint はファイルシステムがマウントされているディレクトリに置き換えてください (例: /home)。

上記のコマンドで fscrypt のポリシーとプロテクターを保存するための mountpoint/.fscrypt ディレクトリが作成されます。

警告: .fscrypt ディレクトリを削除してはいけません。そうすると暗号化されたファイルにアクセスできなくなります。

PAM モジュール

ログイン時にログインパスフレーズで保護されたディレクトリのロックを自動的に解除し、ログインパスフレーズで保護されたディレクトリをログインパスフレーズの変更と同期させておくには、システム PAM 構成を調整して pam_fscrypt を有効にします。

/etc/pam.d/system-loginauth セクションに次の行を 追加 します。

/etc/pam.d/system-login
auth       optional   pam_fscrypt.so

session セクションの session include system-auth に次の行を挿入します。

/etc/pam.d/system-login
session    [success=1 default=ignore]  pam_succeed_if.so  service = systemd-user quiet 
session    optional                    pam_fscrypt.so
ノート: https://github.com/google/fscrypt/issues/95 から取得した最初の行は、systemd --user セッションのバイパスであり は PAM セッションを適切に閉じず ログアウト時のロックがブロックされます。

最後に、次の行を /etc/pam.d/passwd追加 します。

/etc/pam.d/passwd
password    optional    pam_fscrypt.so

ディレクトリの暗号化

空のディレクトリを暗号化したい場合、以下のコマンドを実行:

$ fscrypt encrypt dir

プロンプトに従って「プロテクター」を作成あるいは選択してください。プロテクターはディレクトリの暗号鍵を保護する秘密鍵です。プロテクターの種類:

  • "custom_passphrase" - 名前の通り、あなたが設定するパスフレーズです。
  • "pam_passphrase" - 特定のユーザーのログインパスフレーズです。このタイプのプロテクターを使用するディレクトリはユーザーのログイン時に自動的に pam_fscrypt によって解錠されます (有効化されている場合)。

どちらの場合でも、パスフレーズは後から変更が可能で、他の方法でディレクトリを再保護することもできます。

カスタムパスフレーズの例:

$ fscrypt encrypt private/
Should we create a new protector? [y/N] y
Your data can be protected with one of the following sources:
1 - Your login passphrase (pam_passphrase)
2 - A custom passphrase (custom_passphrase)
3 - A raw 256-bit key (raw_key)
Enter the source number for the new protector [2 - custom_passphrase]: 2
Enter a name for the new protector: Super Secret
Enter custom passphrase for protector "Super Secret":
Confirm passphrase:
"private/" is now encrypted, unlocked, and ready for use.

PAM パスフレーズの例:

$ fscrypt encrypt private/
Should we create a new protector? [y/N] y
Your data can be protected with one of the following sources:
1 - Your login passphrase (pam_passphrase)
2 - A custom passphrase (custom_passphrase)
3 - A raw 256-bit key (raw_key)
Enter the source number for the new protector [2 - custom_passphrase]: 1
Enter login passphrase for testuser:
"private/" is now encrypted, unlocked, and ready for use.
ノート: 暗号化は空のディレクトリでのみ有効化できます。既存のディレクトリを暗号化したい場合、ファイルをコピーしてから元のファイルを削除してください。例:
$ mkdir new_dir
$ fscrypt encrypt new_dir
$ cp -a -T old_dir new_dir
$ find old_dir -type f -print0 | xargs -0 shred -n1 --remove=unlink
$ rm -rf old_dir
元のファイルを削除してもディスクからフォレンジックによって復元できる可能性があります (特に SSD を使用している場合)。データは最初から暗号化された状態にすることを推奨します。

ディレクトリのロック/ロック解除

暗号化されたディレクトリのロックを解除するには、次を実行します。

$ fscrypt unlock dir

fscrypt はパスフレーズの入力を求めます。

暗号化されたディレクトリをロックするには、次を実行します。

$ fscrypt lock dir

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

警告:
  • ログインプロテクターは、/etc/shadow でのシステムのパスフレーズハッシュと同等の安全性しかありません。ログインプロテクターを使用する前に、必ず セキュリティに関する推奨事項 に従ってください。
  • ユーザーのホームディレクトリが暗号化されている場合、ホームディレクトリの暗号化が解除されるまでそのユーザーに ssh でログインできなくなります。

ユーザーのホームディレクトリを暗号化するには、最初に pam_fscrypt の有効化などの準備を行ってください。

それから、新しい暗号化ディレクトリを作成:

# mkdir /home/newhome
# chown user:user /home/newhome 
# fscrypt encrypt /home/newhome --user=user

ユーザーのログインパスフレーズを使ってディレクトリを保護するオプションを選択してください。

それからユーザーのホームディレクトリの中身を暗号化ディレクトリにコピーしてください:

# cp -a -T /home/user /home/newhome
ヒント: ホームディレクトリのコピーのための容量がディスクに存在しない場合、mv -T /home/user /home/newhome とすることもできます。ただし、これは危険です。先にバックアップを作成することを強く推奨します。

cp を使用した場合、実用前にログインでディレクトリが自動的に解除されるか確認できます。一番簡単な方法は再起動してそのユーザーでログインすることです。その後、以下のコマンドを実行:

$ fscrypt status /home/newhome
"/home/newhome" is encrypted with fscrypt.

Policy:   d80f252996aae181
Options:  padding:32 contents:AES_256_XTS filenames:AES_256_CTS
Unlocked: Yes

Protected with 1 protector:
PROTECTOR         LINKED  DESCRIPTION
5952c84ebaf0f98d  No      login protector for testuser

Unlocked: No と表示される場合、PAM の設定に問題があるか、あるいは適切なタイプのプロテクターを選択していなかったことになります。

そうでない場合、ホームディレクトリを置き換えてください:

# mv /home/user /home/oldhome
# mv /home/newhome /home/user
# reboot

問題なく動いたら、古いホームディレクトリを削除できます:

# find /home/oldhome -type f -print0 | xargs -0 shred -n1 --remove=unlink
# rm -rf /home/oldhome
ヒント: shred の実行は任意ですが、強く推奨します。

Linux コンテナ内の暗号化 (lxc)

Linux Containers(lxc)内、またはより一般的にはファイルシステムのルートディレクトリが表示されない mount_namespaces(7) での fscrypt の使用のサポートが v0.2.8 で追加されました。

コンテナ停止時にディレクトリをロック

コンテナ内の systemd/ユーザー ユニットは、コンテナの停止時に暗号化されたディレクトリをロックすることができます。

~/.config/systemd/user/lock-directory.service
[Unit]
Description=lock encrypted directory on shutdown
DefaultDependencies=no
Before=shutdown.target

[Service]
Type=oneshot
ExecStart=/bin/sh -c "/usr/bin/fscrypt lock /home/facade/target"
TimeoutStartSec=0

[Install]
WantedBy=shutdown.target

トラブルシューティング

基本的な問題に対する解決方法は https://github.com/google/fscrypt/blob/master/README.md#troubleshootingopen issues on Github を見てください。

参照