fscrypt

提供: ArchWiki
2019年12月19日 (木) 21:26時点におけるKusakata (トーク | 投稿記録)による版 (一部翻訳)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

関連記事

ext4, F2FS, UBIFS ファイルシステムfscrypt (旧名 "ext4 encryption") と呼ばれる共通 API によるファイル暗号化にネイティブで対応しています。fscrypt ではディレクトリ単位で暗号化を適用できます。ディレクトリごとに別々の暗号鍵を使用することが可能です。ディレクトリを暗号化するとファイルの中身、ファイル名、シンボリックリンク全てが暗号化されます。サブディレクトリも全て暗号化されます。ファイル名以外のメタデータ、タイムスタンプや容量、ファイルの数、拡張属性などは暗号化されません。

fscrypt はカーネルの機能を使うための同名のユーザースペースツールの名前でもあります。この記事では fscrypt ツール を使ってホームディレクトリなどを暗号化する方法を説明します。

他のディスク暗号化

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

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

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

ノート: e2fsprogse4crypt ツールを fscrypt ツールの代わりとして使うことができます。ただし、e4crypt には基本的な機能が存在せず既に開発されていないため使用は推奨されません。

準備

カーネル

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

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

ファイルシステム

ext4

ext4 の場合、暗号化したいファイルシステムについて encrypt フラグを有効にする必要があります。そのためにはまず、ファイルシステムがページサイズのブロックを使っていることを確認してください:

# tune2fs -l /dev/device | grep 'Block size'
Block size:               4096
# getconf PAGE_SIZE
4096

上記の値が異なっている場合、ファイルシステムを暗号化することはできません。

ファイルシステムの encrypt 機能を有効化するには、以下のコマンドを実行します:

# tune2fs -O encrypt /dev/device
警告: encrypt 機能が一度有効になると、4.1 以前の Linux はそのファイルシステムをマウントできなくなります。
ヒント:
  • 機能の有効化は debugfs -w -R "feature -encrypt" /dev/device で解除できます。fsck を実行してファイルシステムの整合性を確認してください。
  • 新しいファイルシステムを作成する際に mkfs.ext4 -O encrypt -b 4096 とすることで 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 ディレクトリが作成されます。

警告: Never delete the .fscrypt directory; otherwise you will lose access to your encrypted files.

ディレクトリの自動アンロック

If you want any encrypted directories to be protected by your login passphrase and be automatically unlocked when you log in, edit your PAM configuration to enable pam_fscrypt:

In /etc/pam.d/system-login, append the following line to the "auth" section:

auth            optional   pam_fscrypt.so

Also in /etc/pam.d/system-login, append the following line to the "session" section:

session         optional   pam_fscrypt.so       drop_caches lock_policies

Finally, append the following line to /etc/pam.d/passwd:

password        optional   pam_fscrypt.so

ディレクトリの暗号化

To encrypt an empty directory, run:

$ fscrypt encrypt dir

Follow the prompts to create or choose a "protector". A protector is the secret or information that protects the directory's encryption key. The types of protectors include:

  • "custom_passphrase". This is exactly what it sounds like—just a passphrase that you specify.
  • "pam_passphrase". This is the login passphrase for a particular user. Directories using this type of protector will be automatically unlocked by pam_fscrypt (if enabled) when that user logs in.

In both cases, the passphrase can be changed later, or the directory can be re-protected with another method.

Example for custom passphrase:

$ 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.

Example for PAM passphrase:

$ 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.
ノート: Encryption can only be enabled on an empty directory. If you want to encrypt an existing directory, you will need to copy and then delete the original files, e.g.:
$ 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
Beware that the original unencrypted files may still be forensically recoverable from disk even after being shredded and deleted, especially if you are using an SSD. It is much better to keep your data encrypted from the start.

ディレクトリの手動アンロック

To manually unlock an encrypted directory, run:

$ fscrypt unlock dir

fscrypt will prompt you for the passphrase.

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

警告: If a user's home directory is encrypted, ssh'ing to that user will not work until their home directory has been unlocked.

To encrypt a user's home directory, first ensure you have completed all preparations, including enabling pam_fscrypt.

Then, create a new encrypted directory for the user:

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

Select the option to protect the directory with the user's login passphrase.

Then copy the contents of the user's old home directory into the encrypted directory:

# cp -a -T /home/user /home/newhome
ヒント: If you do not have enough disk space for a second copy of the home directory, you can use mv -T /home/user /home/newhome instead. However, this is unsafe. If you do this, making a backup first is strongly recommended.

If you used the cp method, you can check whether the directory is being automatically unlocked on login before you actually switch to using it. The simplest way to do this is to reboot and log in as that user. Afterwards, run:

$ 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

If it says Unlocked: No instead, then something is wrong with your PAM configuration, or you did not choose the correct type of protector.

Otherwise, replace the home directory:

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

If everything is working as expected, you can delete the old home directory:

# find /home/oldhome -type f -print0 | xargs -0 shred -n1 --remove=unlink
# rm -rf /home/oldhome
ヒント: Running shred is optional, but strongly recommended.

トラブルシューティング

See https://github.com/google/fscrypt/blob/master/README.md#troubleshooting for solutions to some common problems and also the open issues on Github.

参照