
331.3 暗号化ファイルシステム
課題 331: 暗号化
331.3 暗号化ファイルシステム
LPIC303の試験範囲である主題331~335まであるうちの「331 暗号化」から「331.3 暗号化ファイルシステム」についてのまとめ
総重量:3
説明:
暗号化ファイルシステムを構築し設定できる。主要な知識範囲:
ブロックデバイスとファイルシステム暗号化を理解する。
ブロックデバイスを暗号化するために、LUKS1によるdm-cryptを利用する。
ファイルシステムを暗号化するために、eCryptfsを利用する。これには、ホームディレクトリとPAM統合を含まれる。
plainモードのdm-cryptの知識
LUKS2機能の知識
LUKSデバイスのClevisと、TMP2とNetwork Bound Disk Encryption (NBDE)/TangのClevis PINの概念的な理解。
重要なファイル、用語、ユーティリティ:
cryptsetup (関連するサブコマンドを含む)
cryptmount
/etc/crypttab
ecryptfsd
ecryptfs-* commands
mount.ecryptfs, umount.ecryptfs
pam_ecryptfs
(補足)必要なパッケージ
RockyLinux9
cryptsetup:cryptsetup パッケージをインストール
cryptmount:ソースからインストールする
ecryptfsd:ELRepoリポジトリから ecryptfs-utils パッケージをインストール
clevis:clevis パッケージをインストール
clevis LUKS:clevis-luks パッケージをインストール
clevic Tang:clevis パッケージをインストール
clevis TPM2:clevis-pin-tpm2 パッケージをインストール
[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]# which cryptsetup
/usr/sbin/cryptsetup
[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]# rpm -qf /usr/sbin/cryptsetup
cryptsetup-2.6.0-3.el9.x86_64
[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]# dnf install elrepo-release
[root@lpic303-rocky34 ~]# dnf install ecryptfs-utils
[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]# ecryptfs
ecryptfs-add-passphrase ecryptfs-rewrite-file
ecryptfs-find ecryptfs-setup-private
ecryptfs-generate-tpm-key ecryptfs-setup-swap
ecryptfs-insert-wrapped-passphrase-into-keyring ecryptfs-stat
ecryptfs-manager ecryptfs-umount-private
ecryptfs-migrate-home ecryptfs-unwrap-passphrase
ecryptfs-mount-private ecryptfs-verify
ecryptfs-recover-private ecryptfs-wrap-passphrase
ecryptfs-rewrap-passphrase ecryptfsd
[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]# which ecryptfsd
/usr/bin/ecryptfsd
[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]# rpm -qf /usr/bin/ecryptfsd
ecryptfs-utils-111-21.1.el9.elrepo.x86_64
[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]# rpm -qa | grep -i clevis | sort
clevis-18-112.el9.x86_64
clevis-luks-18-112.el9.x86_64
clevis-pin-tpm2-0.5.1-2.el9.x86_64
[root@lpic303-rocky34 ~]#
参考
- cryptmountコマンドの使い方 #centos8 - Qiita
Ubuntu22.04
cryptsetup:cryptsetup パッケージをインストール
cryptmount:cryptmount パッケージをインストール
ecryptfs:ecryptfsd パッケージをインストール
clevice:clevis パッケージをインストール
clevis LUKS:clevis-luks パッケージをインストール
clevis Tang:clevis パッケージをインストール
clevis TPM2:clevis-tpm2 パッケージをインストール
root@lpic303-ubuntu35:~#
root@lpic303-ubuntu35:~# which cryptsetup
/usr/sbin/cryptsetup
root@lpic303-ubuntu35:~#
root@lpic303-ubuntu35:~# dpkg -S /usr/sbin/cryptsetup
dpkg-query: パターン /usr/sbin/cryptsetup に一致するパスが見つかりません
root@lpic303-ubuntu35:~#
root@lpic303-ubuntu35:~#
root@lpic303-ubuntu35:~# which cryptmount
/usr/bin/cryptmount
root@lpic303-ubuntu35:~#
root@lpic303-ubuntu35:~# dpkg -S /usr/bin/cryptmount
cryptmount: /usr/bin/cryptmount
root@lpic303-ubuntu35:~#
root@lpic303-ubuntu35:~#
root@lpic303-ubuntu35:~# which ecryptfsd
/usr/bin/ecryptfsd
root@lpic303-ubuntu35:~#
root@lpic303-ubuntu35:~# dpkg -S /usr/bin/ecryptfsd
ecryptfs-utils: /usr/bin/ecryptfsd
root@lpic303-ubuntu35:~#
root@lpic303-ubuntu35:~#
root@lpic303-ubuntu35:~# clevis
clevis clevis-luks-common-functions
clevis-decrypt clevis-luks-edit
clevis-decrypt-sss clevis-luks-list
clevis-decrypt-tang clevis-luks-pass
clevis-decrypt-tpm2 clevis-luks-regen
clevis-encrypt-sss clevis-luks-report
clevis-encrypt-tang clevis-luks-unbind
clevis-encrypt-tpm2 clevis-luks-unlock
clevis-luks-bind
root@lpic303-ubuntu35:~#
root@lpic303-ubuntu35:~#
root@lpic303-ubuntu35:~# which clevis
/usr/bin/clevis
root@lpic303-ubuntu35:~#
root@lpic303-ubuntu35:~# dpkg -S /usr/bin/clevis
clevis: /usr/bin/clevis
root@lpic303-ubuntu35:~#
root@lpic303-ubuntu35:~#
root@lpic303-ubuntu35:~# which clevis-decrypt-tang
/usr/bin/clevis-decrypt-tang
root@lpic303-ubuntu35:~#
root@lpic303-ubuntu35:~# dpkg -S /usr/bin/clevis-decrypt-tang
clevis: /usr/bin/clevis-decrypt-tang
root@lpic303-ubuntu35:~#
root@lpic303-ubuntu35:~#
root@lpic303-ubuntu35:~# which clevis-decrypt-tpm2
/usr/bin/clevis-decrypt-tpm2
root@lpic303-ubuntu35:~#
root@lpic303-ubuntu35:~# dpkg -S /usr/bin/clevis-decrypt-tpm2
clevis-tpm2: /usr/bin/clevis-decrypt-tpm2
root@lpic303-ubuntu35:~#
ブロックデバイスとファイルシステム暗号化
ブロックデバイスの暗号化
暗号化の対象:ブロックデバイス
カーネルが提供する dm-crypt を使う
暗号化ツールには cryptsetup や cryptmount がある
暗号化オプションに plainモード と LUKS(Linux Unified Key Setup)モード がある。
LUKSには LUKS1 と LUKS2 がある
ファイルシステムの暗号化
暗号化の対象:特定のディレクトリ
ファイルシステム上に暗号化するディレクトリを作成しマウントして使う
暗号化ツールには eCryptfs や EncFs がある
(補足)LUKSとは
LUKS の機能
・LUKS は、ブロックデバイス全体を暗号化するため、脱着可能なストレージメディアやノート PC のディスクドライブといった、モバイルデバイスのコンテンツを保護するのに適しています。
・暗号化されたブロックデバイスの基本的な内容は任意であり、スワップデバイスの暗号化に役立ちます。また、とりわけデータストレージ用にフォーマットしたブロックデバイスを使用する特定のデータベースに関しても有用です。
・LUKS は、既存のデバイスマッパーのカーネルサブシステムを使用します。
・LUKS はパスフレーズのセキュリティーを強化し、辞書攻撃から保護します。
・LUKS デバイスには複数のキースロットが含まれ、ユーザーはこれを使用してバックアップキーやパスフレーズを追加できます。
LUKS が 行わない こと
・LUKS などのディスク暗号化ソリューションは、システムの停止時にしかデータを保護しません。システムの電源がオンになり、LUKS がディスクを復号すると、そのディスクのファイルは、通常、そのファイルにアクセスできるすべてのユーザーが使用できます。
・LUKS は、多くのユーザーが、同じデバイスにアクセスする鍵をそれぞれ所有することが必要となるシナリオには適していません。LUKS1 形式は鍵スロットを 8 個提供し、LUKS2 形式は鍵スロットを最大 32 個提供します。
・LUKS は、ファイルレベルの暗号化を必要とするアプリケーションには適していません。
LUKS1によるdm-cryptを利用
コマンド(LUKSモード)
cryptsetup luksFormat <device> <name>
LUKSとして初期化するcryptsetup luksOpen <device> <name>
LUKSパーティションを開くcryptsetup luksClose <name>
cryptsetup close <name>
LUKSパーティションを閉じるcryptsetup luksAddKey <device> <keyfile>
パスフレーズを追加するcryptsetup luksKillSlot <device> <keyslotnum>
cryptsetup luksDelKey <device> <keyslotnum>
パスフレーズを削除するcryptsetup luksDump <device>
ステータスを表示するcryptsetup isLuks <device>
LUKSパーティションかどうかを確認する
手順
ブロックデバイスを追加する
`fdisk` でパーティションを作成する
`cryptsetup luksFormat <device>`で初期化する
`cryptsetup open --type luks <device> <name>`
または
`cryptsetup luksOpen <device> <name>`
で暗号化ディスクを開く`vgcreate` でボリュームグループ(VG)を作成する
`lvcreate` で論理ボリューム(LV)を作成する
`mkfs` でファイルシステムを作成する
`mount` でマウントする
起動時にマウントさせる手順
パスフレーズをテキストファイルに平文で保存しておく
`cryptsetup luksAddKey <device> [<key file with new key>]` で暗号化ディスクにアクセスするためのパスフレーズ追加する
"/etc/crypttab" にデバイス名とパスフレーズファイルの対応を記述する
"/etc/fstab" にデバイス名とマウントポイントの対応を記述する
参考
plainモードのdm-cryptの知識
plain モードの暗号化オプション
dm-crypt の plain モードでは、デバイスのマスター鍵が存在せず、セットアップも必要ありません。代わりに、直接暗号化オプションを使用して暗号ディスクと名前付きデバイスのマッピングを作成します。パーティションやデバイス全体に対してマッピングを作成できます。後者の場合、パーティションテーブルも不要です。
コマンド(plainモード)
cryptsetup open <device> <name> --type plain
cryptsetup create <name> <device>
デバイス名と暗号名を対応付けするcryptsetup close <name>
cryptsetup remove <name>
デバイス名と暗号名を対応付けを削除するcryptsetup resize <name>
サイズを変更するcryptsetup status <name>
ステータスを表示する
LUKS2機能の知識
LUSK1とLUKS2の違い
鍵スロットの数
LUKS1:8個
LUKS2:32個最小の暗号化単位=セクター
LUKS1:512 バイトに固定
LUKS2:調整可能、デフォルトで最大 4KiBそのた
LUKS2:内部的にメタデータに JSON テキスト形式を使用し、メタデータの冗長性を提供し、メタデータの破損を検出し、メタデータのコピーから自動的に修復します。
cryptmount
コマンドオプション
-m | --mount
マウントする-u | --unmount
アンマウントする-S | --status
ステータスを確認する-l | --list
一覧表示-s | --swapon
スワップの有効化-x | --swapoff
スワップの無効化-p | --prepare
デバイスの準備-r | --release
デバイスの開放-c | --change-password
パスワードの変更-g | --generate-key size
復号キーの作成
LUKSデバイスのClevisと、TPM2、Network Bound Disk Encryption (NBDE)、TangのClevis PINの概念的な理解
Clevis
暗号化を自動化するフレームワーク
暗号化をする際、復号化する際 それぞれパスフレーズの入力を求められるが、Clevisを使うことで自動化できる。
また、ClevisにはPINというプラグインによりtang、tpm2、nbde、sssなどの手段が選択できる。
Clevis PIN : TPM2
$ clevis encrypt tpm2 '{}' < input-plain.txt > secret.jwe
$ clevis encrypt tpm2 '{"hash":"sha256","key":"rsa"}' < input-plain.txt > secret.jwe
$ clevis decrypt < secret.jwe > output-plain.txt
Clevis PIN : Network Bound Disk Encryption (NBDE)
Implement Network Bound Disk Encryption with the NBDE client and server RHEL System Roles
Clevis PIN : Tang
https://github.com/latchset/tang
$ clevis encrypt tang '{"url":"http://tang.srv:port"}' < input-plain.txt > secret.jwe
$ curl -sfg http://tang.srv:port/adv -o adv.jws
$ echo 'hello' | clevis encrypt tang '{"url":"http://tang.srv:port","adv":"adv.jws"}'
$ clevis decrypt < secret.jwe > output-plain.txt
eCryptfsを利用する
特徴
ディレクトリを暗号化する
暗号化ディレクトリはユーザーごとに一つだけ作成できる
ホームディレクトリか任意のディレクトリを暗号化できる
ユーザーごとの暗号化ディレクトリは ~/.Private/ になる
ホームディレクトリを暗号化した場合は /home/.ecryptfs/$USER/.Private/ になるパスフレーズにはログインパスフレーズとマウントパスフレーズがある。
ログインパスフレーズ:ユーザーのログインパスワードと同じにする
マウントパスワード:自動生成可→ ~/.ecryptfs/wrapped-passphraseに保存されるpam_ecryptfs.soをロードしておくと、ユーザーのログイン/ログアウト操作に応じて自動マウント/自動アンマウントができる
コマンド
mount -t ecryptfs <SRC DIR> <DST DIR> -o <OPTIONS>
mount.ecryptfs
暗号化ディレクトリをマウントするumount <dir>
umount.ecryptfs
暗号化ディレクトリをアンマウントするecryptfs-add-passphrase
パスフレーズを追加するecryptfs-migrate-home
ホームディレクトリを暗号化するecryptfs-setup-private
データディレクトリを暗号化する
--nopwcheck:
--noautomount:自動マウントをしないecryptfs-mount-private
暗号化したディレクトリをマウントするecryptfs-umount-private
暗号化したディレクトリをアンマウントするecryptfs-recover-private
ecryptfs-find
暗号化されたファイル名から、暗号化前のファイル名を取り出すecryptfs-wrap-passphrase
~/.ecryptfs/wrapped-passphraseにマウントパスフレーズを登録するecryptfs-unwrap-passphrase
~/.ecryptfs/wrapped-passphraseのマウントパスフレーズを確認する
参考
eCryptfs
https://www.ecryptfs.org/eCryptfs - ArchWiki
https://wiki.archlinux.jp/index.php/ECryptfs