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>
<target-dir>
はデバイスファイルではなくファイルシステム上のディレクトリで指定します。
root
権限が必要であるか否かは<target-dir>
のファイルパーミッションしだいです。アクセスパスのファイルに加えて、各デバイスの.fscrypt/
ディレクトリ内のfscryptリソースにもアクセス権があれば、sudo
は不要です。
リムーバブルディスク
USBメモリースティックなどのリムーバブルディスクも、あらかじめfdisk
などでパーティション設定をLinuxに変更のうえ、ext4ファイルシステムでフォーマットしておくことで同様に動作します。
$ sudo mkfs.ext4 /dev/<target-device-name>
また、mkfs.f2fs -O encrypt
を用いて
F2FSでフォーマットしたデバイスも同様に機能します。F2FSのツールはDebian系ではf2fs-tools
に入っています。
リムーバブルディスクは、メディア取り出し操作を行うとロック状態になります。
ディレクトリごとの暗号化設定
空のディレクトリにfscrypt encrypt
コマンドを実行すると暗号化の対象にできます。
デバイスのトップディレクトリには少なくとも.fscrypt/
が存在するため、サブディレクトリが必要です。
また、既存のディレクトリを直接暗号化する手段はありません。
$ 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には名前を指定して区別します。
また、ディレクトリごとに認証方法を替えることも可能です。
パスフレーズ変更など
パスフレーズ変更などProtectorやPolicyの設定変更はfscrypt metadata
サブコマンドで実行します。
Changing a custom passphraseに実例の説明があります。
暗号化と解除
暗号化ディレクトリは、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
の対象は、ディレクトリではなくパーティション(のマウントポイント)です。また、利用ユーザーも指定する必要があります。