fscryptでディレクトリ暗号化

Linuxのディスク暗号化機能にはいくつかの選択肢がありますが、 fscryptはLinuxで普及しているext4ファイルシステムの標準機能を操作するユーティリティです。
標準カーネルに組込まれているため、多くの場合特殊なセットアップが不要で、Debian系ではapt-get install fscryptでインストールできます。

ディレクトリ単位で細かく暗号化制御も可能です。

機能の有効化

利用開始時には、rootでfscrypt setupを実行する必要があります。

# configファイルのセットアップ
$ sudo fscrypt setup

encryptionが有効になっていないためセットアップ時にエラーが出る場合には、以下のコマンドで有効にできます。

$ sudo tune2fs -O encrypt /dev/<target-device-name>

encryptionの状態は、fscrypt statusコマンドでマウントポイント別に確認できます。

複数パーティション構成の場合

パーティションを分割している場合には、暗号化するパーティションのマウントポイントをそれぞれセットアップする必要があります。

# パーティションのセットアップ(/は上のコマンドに含まれている)
$ sudo fscrypt setup <target-dir>

ディレクトリの暗号化

空のディレクトリにfscrypt encryptコマンドを実行すると暗号化の対象にできます。
既存のディレクトリを直接暗号化する手段はありません。

$ mkdir /home/user/somedir
$ fscrypt encrypt /home/user/somedir

# 非インタラクティブに実行する場合
$ echo "some-passphrase" | fscrypt encrypt /home/user/somedir --source=custom_passphrase --name=<ProtectorName> --quiet

fscryptの認証方式(Protector)は3種類あり、任意の文字列で認証する方式はCustom Passphraseです。
1つのディレクトリに複数のProtectorを指定することも可能で、同一ホスト上でディレクトリを共有する場合に活用できます。Protectorには名前を指定して区別します。

また、ディレクトリごとに認証方法を替えることも可能です。

暗号化と解除

暗号化ディレクトリは、LockedとUnlockedを切り替えて保護します。
読み書きする際には、fscrypt unlockでUnlockedモードにする必要があります。

パスフレーズを要求されますが、標準入力から指定しても動作します。

$ echo "some-passphrase" | fscrypt unlock /home/user/somedir --quiet

読み書きできない状態にするには、fscrypt lockを使います。また、おそらくアンマウントと連動してOSシャットダウン時にもlockされます。

旧バージョンに関する補足

Linuxカーネルv5.4以降、fscrypt v0.2.6以降の組み合わせでPolicy Version 2をサポートしています。Ubuntuの例では、22.04LTSはVersion 2の構成になっています。
Policy Version 1では Some processes can’t access unlocked encrypted filesの解説のとおり、デーモンプロセスなどの動作に支障があり、ディストリビューションが古い場合には、注意が必要です。

Ubuntu20.04の例ではカーネルはv5.4ですが、fscryptがv0.2.5のためデフォルト構成ではv1セットアップとなります。GitHubのReleaseページからfscrypt v0.2.9を入手するとv2セットアップに変更できました。

また古いバージョンにはfscrypt lockがなく、rootでfscrypt purgeを実行する必要があります。

fscrypt purgeはインタラクティブに承諾を求められますが、yesコマンドで標準入力から承諾できます。

$ yes | sudo fscrypt purge --user=user /

なおfscrypt purgeの対象は、ディレクトリではなくパーティション(のマウントポイント)です。また、利用ユーザーも指定する必要があります。

⁋ 2022/01/14↻ 2024/11/07
中馬崇尋
Chuma Takahiro