「Fscrypt」の版間の差分
(翻訳) |
|||
(2人の利用者による、間の9版が非表示) | |||
1行目: | 1行目: | ||
{{Lowercase title}} |
{{Lowercase title}} |
||
− | [[Category:デ |
+ | [[Category:保存データ暗号化]] |
[[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]] の場合、暗号化 |
+ | [[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 ==== |
||
63行目: | 52行目: | ||
=== ユーザースペースツール === |
=== ユーザースペースツール === |
||
− | {{ |
+ | {{Pkg|fscrypt}} を[[インストール]]してください。または、以前インストールしていた場合は最新版にアップグレードしてください。それから以下のコマンドを実行: |
# fscrypt setup |
# fscrypt setup |
||
79行目: | 68行目: | ||
{{Warning|{{ic|.fscrypt}} ディレクトリを削除してはいけません。そうすると暗号化されたファイルにアクセスできなくなります。}} |
{{Warning|{{ic|.fscrypt}} ディレクトリを削除してはいけません。そうすると暗号化されたファイルにアクセスできなくなります。}} |
||
+ | === PAM モジュール === |
||
− | === ディレクトリの自動アンロック === |
||
− | ログイン |
+ | ログイン時にログインパスフレーズで保護されたディレクトリのロックを自動的に解除し、ログインパスフレーズで保護されたディレクトリをログインパスフレーズの変更と同期させておくには、システム [[PAM]] 構成を調整して ''pam_fscrypt'' を有効にします。 |
− | {{ic|/etc/pam.d/system-login}} の |
+ | {{ic|/etc/pam.d/system-login}} の ''auth'' セクションに次の行を [[ヘルプ:読み方#追加, 追記, 作成, 編集|追加]] します。 |
+ | {{hc|/etc/pam.d/system-login| |
||
− | auth optional pam_fscrypt.so |
||
+ | auth optional pam_fscrypt.so |
||
+ | }} |
||
− | + | ''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'' |
||
− | + | ''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}} の有効化などの[[#準備|準備]]を行ってください。 |
||
202行目: | 206行目: | ||
{{Tip|[[shred]] の実行は任意ですが、強く推奨します。}} |
{{Tip|[[shred]] の実行は任意ですが、強く推奨します。}} |
||
+ | |||
+ | == Linux コンテナ内の暗号化 (lxc) == |
||
+ | |||
+ | [[Linux Containers]](lxc)内、またはより一般的にはファイルシステムのルートディレクトリが表示されない {{man|7|mount_namespaces}} での fscrypt の使用のサポートが v0.2.8 で追加されました。 |
||
+ | |||
+ | === コンテナ停止時にディレクトリをロック === |
||
+ | |||
+ | コンテナ内の [[systemd/ユーザー]] ユニットは、コンテナの停止時に暗号化されたディレクトリをロックすることができます。 |
||
+ | |||
+ | {{hc|~/.config/systemd/user/lock-directory.service|2= |
||
+ | [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 |
||
+ | }} |
||
== トラブルシューティング == |
== トラブルシューティング == |
2024年7月26日 (金) 19:04時点における最新版
fscrypt は ext4、F2FS、UBIFS ファイルシステム のネイティブファイル暗号化サポートを管理するツールです。
上記のファイルシステムに統合されている カーネル内の基本的な暗号化メカニズム は、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) に移っています。
他の暗号化手段に関する詳細についてはディスク暗号化を参照してください。
準備
カーネル
公式サポートされているカーネルでは ext4, F2FS, UBIFS で fscrypt に対応しています。
カスタムカーネルのバージョン 5.1 以上を使っている場合、CONFIG_FS_ENCRYPTION=y
を設定してください。古いカーネルの場合は ドキュメント を見てください。
ファイルシステム
ext4
ext4 の場合、暗号化が使用されるファイルシステムでは、encrypt
機能フラグが有効になっている必要があります。有効にするには、次を実行します。
# tune2fs -O encrypt /dev/device
F2FS
F2FS の場合、fsck.f2fs -O encrypt
または mkfs.f2fs -O encrypt
を使ってください。
ユーザースペースツール
fscrypt をインストールしてください。または、以前インストールしていた場合は最新版にアップグレードしてください。それから以下のコマンドを実行:
# fscrypt setup
上記のコマンドで /etc/fscrypt.conf
ファイルと /.fscrypt
ディレクトリが作成されます。
そして、暗号化したいファイルシステムがルートファイルシステムではない場合、以下のコマンドを実行してください:
# fscrypt setup mountpoint
mountpoint
はファイルシステムがマウントされているディレクトリに置き換えてください (例: /home
)。
上記のコマンドで fscrypt のポリシーとプロテクターを保存するための mountpoint/.fscrypt
ディレクトリが作成されます。
PAM モジュール
ログイン時にログインパスフレーズで保護されたディレクトリのロックを自動的に解除し、ログインパスフレーズで保護されたディレクトリをログインパスフレーズの変更と同期させておくには、システム PAM 構成を調整して pam_fscrypt を有効にします。
/etc/pam.d/system-login
の auth セクションに次の行を 追加 します。
/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
最後に、次の行を /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.
ディレクトリのロック/ロック解除
暗号化されたディレクトリのロックを解除するには、次を実行します。
$ fscrypt unlock dir
fscrypt はパスフレーズの入力を求めます。
暗号化されたディレクトリをロックするには、次を実行します。
$ fscrypt lock dir
ホームディレクトリの暗号化
ユーザーのホームディレクトリを暗号化するには、最初に pam_fscrypt
の有効化などの準備を行ってください。
それから、新しい暗号化ディレクトリを作成:
# mkdir /home/newhome # chown user:user /home/newhome # fscrypt encrypt /home/newhome --user=user
ユーザーのログインパスフレーズを使ってディレクトリを保護するオプションを選択してください。
それからユーザーのホームディレクトリの中身を暗号化ディレクトリにコピーしてください:
# cp -a -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
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#troubleshooting や open issues on Github を見てください。