LPIC-3 Security331.3Weight 3LUKS1 / eCryptfsは実践
331.3 Encrypted File Systems
「どこを暗号化しているか」を最初に分ける。dm-crypt/LUKSはBlock Device、eCryptfsはFilesystem Layer。LUKS1/eCryptfsは実際に扱い、plain dm-crypt/LUKS2はAwareness、Clevisは概念理解に止める。
最終到達点:LUKS1 Deviceを作成→open→Filesystem作成→mount→closeまで追い、
/etc/crypttabでBoot時のUnlock位置を説明できる。eCryptfsの暗号化ViewとHome/PAM連携を理解し、ClevisのTPM2/Tang Pinを識別できる。Objective判定: このObjectiveの最後に客観Checkpointを配置。学習後は 末尾の問題へ。
Block Device Encryptiondm-crypt / LUKS。Filesystemより下でBlock全体を暗号化する。
Filesystem EncryptioneCryptfs。既存Filesystem上に暗号化されたFileを置き、Mount時に復号Viewを作る。
01 全体像02 LUKS1実践03 LUKS運用04 eCryptfs05 Home/PAM06 Awareness/Clevis
安全:実習例は実Diskを直接初期化せず、Image File+Loop Deviceを使う。
luksFormatは対象Deviceの既存Dataを利用不能にするため、実機Device名をコピーして実行しない。331.3 · 01/0601 Encryption Model
🟡 UnderstandBlock vs Filesystem
暗号化の場所を先に分ける:dm-crypt/LUKSとeCryptfsは層が違う
このページの到達点:「Block Deviceを暗号化」なのか「Filesystem内のFileを暗号化」なのかを判断し、dm-crypt・LUKS・eCryptfsの関係を説明できる。
公式要求:Understand block device and file system encryption.
Block Device側
Physical / Virtual Block Device
↓ ciphertext
dm-crypt
↑ key / mapping
LUKS
metadata + keyslots
↓
/dev/mapper/securedata
↓
Filesystem (ext4 等)
↓
mount
dm-crypt:Linux Device Mapperの暗号化Target。Blockを暗号化/復号する実処理側。
LUKS = Linux Unified Key Setup:dm-cryptを使いやすくするOn-disk Format。Header、暗号Parameter、Keyslot等を管理する。LUKSそのものが別の暗号Engineなのではない。
LUKS = Linux Unified Key Setup:dm-cryptを使いやすくするOn-disk Format。Header、暗号Parameter、Keyslot等を管理する。LUKSそのものが別の暗号Engineなのではない。
eCryptfsはFilesystem Layer
Underlying Directory
暗号化されたFileが保存
↓ eCryptfs mount
Decrypted View (mount point)
↓
Application / Userが通常Fileとして利用
| dm-crypt + LUKS | eCryptfs | |
|---|---|---|
| 暗号化単位 | Block Device | File / Filesystem Layer |
| 暗号化Dataを見る場所 | Device上のBlock | Lower DirectoryのFile |
| 復号後 | /dev/mapper/*というBlock Device | Mount Pointに復号View |
EXAM DECISION
「Filesystemより下か、上か」で分ける
/dev/mapper/...を作る → dm-crypt/LUKS- Directoryを別DirectoryへeCryptfsとしてmount → eCryptfs
- LUKS = Header/Keyslotを持つFormat、dm-crypt = Block暗号化処理
331.3 · 02/0602 LUKS1 Practical
🔴 Usedm-crypt + LUKS1
LUKS1:Format → Open → Mapper → Filesystem → Mountを実際の変化で追う
このページの到達点:現在のcryptsetupがLUKS2をDefaultにする点を踏まえ、
--type luks1を明示してLUKS1を作成・Open・確認・Closeできる。公式要求:Use dm-crypt with LUKS1 to encrypt block devices. Partial utility: cryptsetup including relevant subcommands.
破壊的操作:
cryptsetup luksFormatは対象Deviceを暗号化Containerとして初期化する。以下はTraining用Image FileをLoop Deviceへ割り当てる例。1. 安全なTraining Deviceを用意
truncate -s 256M luks1.img
sudo losetup --find --show luks1.img
# 例: /dev/loop7 を返す。以降は実際の返り値へ置換
2. LUKS1としてFormat
sudo cryptsetup luksFormat --type luks1 /dev/loop7
sudo cryptsetup isLuks /dev/loop7
sudo cryptsetup luksDump /dev/loop7
luksFormatLUKS Headerを作成し、最初のPassphrase/Keyslotを設定する。
--type luks1現行cryptsetupは通常LUKS2がDefaultなので、LPIC-303の実践対象LUKS1を明示。
isLuks対象がLUKS Deviceか判定。
luksDumpVersion、Cipher、UUID、Keyslot等のHeader情報を読む。
3. OpenするとMapper Deviceが生まれる
sudo cryptsetup open --type luks1 /dev/loop7 securedata
sudo cryptsetup status securedata
ls -l /dev/mapper/securedata
Before
ciphertext Device
/dev/loop7ciphertext Device
→
After open
decrypted Block view
/dev/mapper/securedatadecrypted Block view
4. Mapper上にFilesystemを作ってMount
sudo mkfs.ext4 /dev/mapper/securedata
sudo mkdir -p /mnt/securedata
sudo mount /dev/mapper/securedata /mnt/securedata
sudo sh -c 'echo LPIC303 > /mnt/securedata/test.txt'
cat /mnt/securedata/test.txt
重要:Filesystemを作るのは暗号化元
/dev/loop7ではなく、Open後の/dev/mapper/securedata。EXAM DECISION
LUKS1の操作順
luksFormat→ Container/Header作成open→/dev/mapperMapping作成mkfs/mount→ 復号Block DeviceをFilesystemとして利用
331.3 · 03/0602 LUKS1 Management
🔴 UseKeyslot / crypttab
LUKS1運用:Keyslot・Close・Boot時Unlockを同じLifecycleで理解する
このページの到達点:Keyslot管理、MappingのClose、
/etc/crypttabの4 Field、cryptmountの位置を区別できる。Keyslotは「Volume Keyを開くCredentialの入口」
sudo cryptsetup luksDump /dev/loop7
sudo cryptsetup luksAddKey /dev/loop7
sudo cryptsetup luksChangeKey /dev/loop7
# 不要Keyを削除する場合
sudo cryptsetup luksRemoveKey /dev/loop7
考え方:LUKSはDataをPassphraseそのもので直接暗号化するのではなく、Volume Keyを使い、そのVolume Keyへ到達するKeyslotをPassphrase等で保護する。複数Keyslotなら複数Credentialを登録できる。
最後の有効Keyを失わない:Keyslot削除はUnlock手段を失う操作。現在使えるCredentialを確認してから行う。
使い終わったらFilesystem → Mappingの順に閉じる
sudo umount /mnt/securedata
sudo cryptsetup close securedata
sudo losetup -d /dev/loop7
close:/dev/mapper/securedata Mappingを削除する。暗号化元Device上のciphertextが消えるわけではない。/etc/crypttabはMount設定ではなくUnlock設定
Boot
↓
/etc/crypttab
↓ encrypted Block DeviceをOpen
/dev/mapper/securedata
↓
Filesystem mount(/etc/fstab等)
Field 1: volume-name
/dev/mapper/<name>になるMapping名。Field 2: encrypted-device
暗号化元Device。UUID指定も可能。
Field 3: key-file
Key File Path。省略/
none/-ではsystemdが既定Key Fileを探し、見つからなければBoot時のPassword入力へ進む。Field 4: options
Device TypeやUnlock動作等のOption。
# 例(Device UUIDは環境に合わせる)
securedata UUID=<LUKS-UUID> none luks
systemd環境:
/etc/crypttabはBoot時にsystemd-cryptsetupのUnitへ展開され、暗号化DeviceをOpenする。Filesystem mountとは別段階。cryptmount
cryptmountは設定済み暗号化Filesystemのmount/unmountを補助し、管理者が初期設定した後は一般UserがPasswordを与えて扱えるようにするTool。LPIのPartial listなので、ここでは役割と代表操作を識別する。
cryptmount TARGET
cryptmount --unmount TARGET
cryptmount --change-password TARGET
EXAM DECISION
設定場所を混ぜない
crypttab→ encrypted DeviceをOpenfstab等 → Open後のFilesystemをMountcryptmount→ 設定済み暗号化Filesystem操作を補助
331.3 · 04/0603 eCryptfs Manual
🔴 UseeCryptfs
eCryptfs:Lower DirectoryのciphertextとMount Pointのplaintext Viewを分ける
このページの到達点:eCryptfsを手動mountし、Lower Directoryと復号Viewの関係、mount/umount helper、ecryptfs系Utilityの役割を説明できる。
公式要求:Use eCryptfs to encrypt file systems. Partial list: ecryptfsd, ecryptfs-* commands, mount.ecryptfs, umount.ecryptfs.
同じFileを2つのViewで見る
/srv/ecrypt-lower
encrypted file names/data
↓ mount -t ecryptfs
/mnt/ecrypt-view
decrypted filename/content
↓
Application
Manual Mount
sudo mkdir -p /srv/ecrypt-lower /mnt/ecrypt-view
sudo mount -t ecryptfs /srv/ecrypt-lower /mnt/ecrypt-view
mount.ecryptfs:
mount -t ecryptfsから呼ばれるMount Helper。Passphrase/Key Signature、Cipher、Key bytes、filename encryption等の設定を補助する。Viewの違い
echo secret | sudo tee /mnt/ecrypt-view/note.txt
sudo cat /mnt/ecrypt-view/note.txt
sudo ls /srv/ecrypt-lower
Mount Point側では通常Fileとして読める一方、Lower Directoryには暗号化されたDataが保存される。
Unmount
sudo umount /mnt/ecrypt-view
# umount.ecryptfs helperはUnmount時にKeyringのKey unlinkも補助する
ecryptfs-*は用途別に見る
| Utility例 | 主な役割 |
|---|---|
ecryptfs-add-passphrase | Passphrase由来KeyをKernel Keyringへ追加 |
ecryptfs-manager | eCryptfs Key管理Interface |
ecryptfs-recover-private | 暗号化Private DirectoryのRecovery支援 |
ecryptfs-setup-private | User Private Directory/Home連携用の初期設定 |
ecryptfsd:Userspace daemon。eCryptfs Kernel ModuleからのPublic-key requestを処理するためのDaemonで、Public Key Moduleを使うMount時に必要になる。単純なPassphrase Mountで常に必要という意味ではない。
EXAM DECISION
eCryptfsはDirectory View
- Lower Directory = encrypted representation
- Mount Point = decrypted view
- Block Device Mapperを作るLUKSとは層が違う
331.3 · 05/0603 eCryptfs Home / PAM
🔴 UseHome + PAM
eCryptfs Home / PAM:Login PasswordでMount Passphraseをunwrapし、自動Mountする
このページの到達点:User loginとeCryptfs Private Directoryの自動Mountが、wrapped passphrase・Kernel Keyring・PAMでどうつながるか説明できる。
公式要求:Use eCryptfs including home directories and PAM integration. Partial utility: pam_ecryptfs.
LoginからMountまで
User Login Password
↓ pam_ecryptfs.so unwrap
~/.ecryptfs/wrapped-passphrase
↓ mount passphraseをunwrap
Kernel KeyringへKey
↓
~/.Private (encrypted)
↓ eCryptfs mount
~/Private (decrypted view)
2つのPassphrase:Login PasswordそのものをData Encryption Keyとして使うのではない。Login Passwordで、保存されているwrapped mount passphraseをunwrapし、そのKeyをMountへ使う構成。
Private Directoryの代表構成
| Path | 役割 |
|---|---|
~/.Private | 暗号化Dataが保存されるLower Directory |
~/Private | Mount中に見える復号View |
~/.ecryptfs/Private.sig | Mount Passphrase Signature情報 |
~/.ecryptfs/wrapped-passphrase | Login Passwordで保護されたMount Passphrase |
Home Directory自体を対象にするUtility
| Utility | 位置付け |
|---|---|
ecryptfs-setup-private | Private Directoryを初期化。実装/Versionによっては新規UserのHome全体を暗号化するbootstrap/all-home系Optionも持つ。 |
ecryptfs-migrate-home -u USER | 既存User HomeをeCryptfs暗号化Homeへ移行するUtility。Backup・Logout・十分な空き容量が必要な高Risk操作。 |
Home migrationは実習で安易に実行しない:
ecryptfs-migrate-homeは既存Homeを移行するため、失敗時にData LossやLogin不能のRiskがある。ここでは「Home Directory暗号化を実現するUtility」として流れを理解する。PAM integration
# Debian/Ubuntu系の代表例。PAM File名はDistribution依存
# /etc/pam.d/common-auth
auth required pam_ecryptfs.so unwrap
# /etc/pam.d/common-session
session optional pam_ecryptfs.so unwrap
auth:Login Credentialでwrapped passphraseをunwrapする。
session:Session開始時にPrivate Directoryの自動Mountへつなぐ。
session:Session開始時にPrivate Directoryの自動Mountへつなぐ。
Distribution差:PAM StackのFile名や配置はDistributionにより異なる。試験では
pam_ecryptfsがLoginとeCryptfs Home/Private Mountを結ぶ役割を理解する。EXAM DECISION
Home暗号化の流れ
- encrypted storage →
~/.Private - decrypted view →
~/Private - Login連携 →
pam_ecryptfs.so - Login Password → wrapped mount passphraseのunwrapに使用
331.3 · 06/0604 Awareness / Clevis
⚪ Awareness🟡 Conceptual
plain dm-crypt / LUKS2 / Clevis:要求深度を上げすぎず違いを固定する
このページの到達点:plain dm-cryptとLUKSを区別し、LUKS2の代表Featureを識別し、ClevisがTPM2またはTang/NBDEを使ってLUKS Unlockを自動化する構造を説明できる。
公式要求:Awareness of plain dm-crypt / LUKS2 features. Conceptual understanding of Clevis for LUKS devices and Clevis PINs for “TMP2” and NBDE/Tang. ※LPI英語ページは現在
TMP2と表記しているが、技術としてはTPM2(Trusted Platform Module 2.0)を指す。plain dm-crypt
LUKSHeader / UUID / Keyslot等のMetadataを持ち、cryptsetupが必要Parameterを読める。
plain dm-cryptLUKS Headerを持たない。Cipher/Key/Offset等のParameterを外部で一致させる必要がある。
# Awareness用の代表形
cryptsetup open --type plain DEVICE NAME
深掘りしない:plain modeの全Cipher Parameterを暗記するのではなく、「LUKS Metadata/Keyslotなし」を識別する。
LUKS2 Awareness
| LUKS2の代表Feature | 意味 |
|---|---|
| 拡張しやすいJSON Metadata | LUKS1よりMetadata構造を拡張しやすい。 |
| Argon2 PBKDF | PassphraseからKeyを導出する処理でMemory-hardなArgon2を利用可能。 |
| より多いKeyslot | Defaultで最大32 Keyslot。 |
| Header redundancy | Header Copyを持ち、Metadata破損への耐性を改善。 |
現行cryptsetupのDefault:
luksFormatでVersionを指定しない場合、通常LUKS2。だから331.3のLUKS1実習では--type luks1を明示した。Clevis / PIN / TPM2 / Tang
LUKS Device
↓ Clevisへbind
Clevis Policy
├─ tpm2 PIN → TPM2の条件/Platform Stateを使う
└─ tang PIN → Tang Serverへ到達できるNetwork条件を使う
↓
NBDE
↓ 条件成立
自動Unlock
Clevis
Policy-Based DecryptionのClient Framework。LUKS Volume等を指定条件にbindして自動Unlockへ利用。
PIN
ClevisのPlugin/Policy実装。
tpm2、tang等。TPM2
Trusted Platform Module 2.0。Machine/Platform側のHardware Trustを利用してUnlock条件を作る。
Tang / NBDE
Network Bound Disk Encryption。選択したTang Serverへ到達できるNetwork環境をUnlock条件に利用。TangはClientのDisk Encryption Keyそのものを保管するKey Escrow Serverではない。
# 概念を確認する代表形。操作暗記が目的ではない
clevis luks bind -d /dev/sdXn tang '{"url":"http://tang.example"}'
clevis luks bind -d /dev/sdXn tpm2 '{}'
331.3 EXIT CHECK
Block EncryptionとFilesystem Encryptionを区別✓
LUKS1をluksFormat→open→mount→closeで扱う✓
crypttabとFilesystem mountを分ける✓
eCryptfs manual/Home/PAMを説明✓
plain dm-crypt/LUKS2はAwareness✓
Clevis tpm2/tang PINをConceptualに説明✓
331.3 COMPLETE
「どこを暗号化」「どこでUnlock」で判断する
- Block Device → dm-crypt/LUKS
- Directory/File Layer → eCryptfs
- Boot Unlock → crypttab
- LoginとPrivate Directory → pam_ecryptfs
- Policy-Based auto unlock → Clevis + TPM2/Tang
331.3 Encrypted FS · CHECKPOINTObjective末尾
Weight 3客観判定50 → 75 → 100%
331.3 Encrypted FS:学習直後にここで解く
本文を読み終えた直後に、そのObjectiveだけを確認する。別ページへ移動して問題を探さない。誤答した問題から該当ノートへ戻り、再度ここへ戻る。
合格条件: 50%は基礎選択式7問中6問以上、75%は選択肢なし再現6問中5問以上。75%到達から72時間後、専用実戦Bankから9問中8問以上で100%。さらに各段階で全小テーマを最低1問正解する必要がある。毎回Question Bankからランダム出題する。
現在の到達度
選択式から開始
0%
小テーマ別履歴問題を解くと正答率を表示
Objective Check
100%専用: 72時間後の再テストでは既存564問ではなく、このObjective専用の実戦相当12問から出題する。各問はObjectiveの要求深度に合わせて、状況判断・設定/出力読解・近い選択肢の比較を行い、必要な分野では穴埋め・複数選択も使用する。誤答時は選択肢の違いまで確認する。
出題方式:初回は小テーマをできるだけ横断し、未出題・出題回数の少ない問題を優先する。再挑戦では小テーマ網羅より直近問題の重複回避を優先し、必要な場合だけ再利用する。
この問題の役割:Objective理解の客観Checkpoint。50%/75%はObjective理解の確認、100%は専用実戦Bankで状況判断・設定/出力読解・近い選択肢まで確認する。