「Dm-crypt/システム全体の暗号化」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(fix syntax error {{ic|/dev/urandom})
 
(5人の利用者による、間の20版が非表示)
1行目: 1行目:
 
{{Lowercase title}}
 
{{Lowercase title}}
[[Category:セキュリティ]]
+
[[Category:保存データ暗号化]]
 
[[Category:ファイルシステム]]
 
[[Category:ファイルシステム]]
 
[[Category:Arch の入手とインストール]]
 
[[Category:Arch の入手とインストール]]
  +
[[de:Systemverschlüsselung mit dm-crypt]]
 
[[en:Dm-crypt/Encrypting an entire system]]
 
[[en:Dm-crypt/Encrypting an entire system]]
 
[[es:Dm-crypt/Encrypting an entire system]]
 
[[es:Dm-crypt/Encrypting an entire system]]
  +
以下は ''dm-crypt'' を使って完全なシステム暗号化を行う一般的なシナリオの例です。通常の[[インストールガイド|インストール手順]]に加える必要がある変更を全て説明しています。必要なツールは全て [https://www.archlinux.jp/download/ インストールイメージ] に入っています。
[[dm-crypt]] に戻る。
 
 
以下は ''dm-crypt'' を使って完全なシステム暗号化を行う一般的なシナリオの例です。通常の[[インストールガイド|インストール手順]]に加える必要がある変更を全て説明しています。必要なツールは全て [https://www.archlinuxjp.org/download/ インストールイメージ] に入っています。
 
   
 
== 概要 ==
 
== 概要 ==
30行目: 29行目:
 
LUKS 暗号化パーティションの中で LVM を使うことでパーティショニングの柔軟性を確保
 
LUKS 暗号化パーティションの中で LVM を使うことでパーティショニングの柔軟性を確保
 
|
 
|
  +
* LVM を使ったことがあるのであれば簡単にパーティショニングできます
* Simple partitioning with knowledge of LVM
 
  +
* 一つのキーで全てのボリュームのロックを解除できます (ディスクからの復帰を設定するのが簡単)
* Only one key required to unlock all volumes (e.g. easy resume-from-disk setup)
 
  +
* ロックされていればボリュームのレイアウトが外から分かりません
* Volume layout not transparent when locked
 
 
* [[Dm-crypt/スワップの暗号化#suspend-to-disk_を使用する|ハイバネート]]を利用したいときの一番簡単な方法
 
* [[Dm-crypt/スワップの暗号化#suspend-to-disk_を使用する|ハイバネート]]を利用したいときの一番簡単な方法
 
|
 
|
  +
* LVM によってマッピングレイヤーとフックが追加されます
* LVM adds an additional mapping layer and hook
 
  +
* ボリュームごとに別のキーを設定する場合は不便です
* Less useful, if a singular volume should receive a separate key
 
 
|----------------------------------------------------------
 
|----------------------------------------------------------
 
| [[#LUKS on LVM]]
 
| [[#LUKS on LVM]]
 
LVM をセットアップした後に dm-crypt を使用
 
LVM をセットアップした後に dm-crypt を使用
 
|
 
|
  +
* LVM を使うことで複数のディスクにまたがる暗号化ボリュームを作成できます
* LVM can be used to have encrypted volumes span multiple disks
 
  +
* 非暗号化・暗号化ボリュームグループを簡単に混ぜられます
* Easy mix of un-/encrypted volume groups
 
 
|
 
|
  +
* 複雑です。ボリュームを変更するときは暗号化マッパーも変更する必要があります
* Complex; changing volumes requires changing encryption mappers too
 
  +
* ボリュームごとに個別のキーが必要になります
* Volumes require individual keys
 
  +
* ロックされていても LVM レイアウトは外から分かってしまいます
* LVM layout is transparent when locked
 
  +
|----------------------------------------------------------
  +
| [[#ソフトウェア RAID と LUKS]]
  +
RAID を設定した後に dm-crypt を使います。
  +
|
  +
* LUKS on LVM と同じ。
  +
|
  +
* LUKS on LVM と同じ。
 
|----------------------------------------------------------
 
|----------------------------------------------------------
 
| [[#Plain dm-crypt]]
 
| [[#Plain dm-crypt]]
 
dm-crypt の plain モードを使用、LUKS ヘッダーや LUKS の複数のキーのオプションは使わない<br>このシナリオでは {{ic|/boot}} とキーストレージに USB デバイスを使いますが、これは他のデバイスでも利用可能です
 
dm-crypt の plain モードを使用、LUKS ヘッダーや LUKS の複数のキーのオプションは使わない<br>このシナリオでは {{ic|/boot}} とキーストレージに USB デバイスを使いますが、これは他のデバイスでも利用可能です
 
|
 
|
  +
* LUKS ヘッダに損害が発生した場合の耐障害性があります
* Data resilience for cases where a LUKS header may be damaged
 
 
* [[Wikipedia:Deniable encryption|否認可能暗号]]が使える
 
* [[Wikipedia:Deniable encryption|否認可能暗号]]が使える
  +
* SSD の[[Dm-crypt/特記事項#ソリッドステートドライブ (SSD) の Discard/TRIM のサポート|問題]]を解決できます
 
|
 
|
  +
* 全ての暗号化パラメータに注意する必要があります
* High care to all encryption parameters is required
 
  +
* 暗号鍵はひとつだけで変更する方法はありません
* Single encryption key and no option to change it
 
 
|----------------------------------------------------------
 
|----------------------------------------------------------
 
| [[#boot パーティションの暗号化 (GRUB)]]
 
| [[#boot パーティションの暗号化 (GRUB)]]
 
GRUB ブートローダーを使って boot パーティションを暗号化する方法を説明します。<br>このシナリオでは ESP パーティションを使いますが、他のシナリオでも ESP を使うことができます。
 
GRUB ブートローダーを使って boot パーティションを暗号化する方法を説明します。<br>このシナリオでは ESP パーティションを使いますが、他のシナリオでも ESP を使うことができます。
 
|
 
|
  +
* ベースにするシナリオと同じメリット (このページの例では LVM on LUKS)
* Same advantages as the scenario the installation is based on (LVM on LUKS for this particular example)
 
  +
* ブートローダーや ESP パーティションまで暗号化されます
* Less data is left unencrypted, i.e. the boot loader and the ESP partition, if present
 
 
|
 
|
  +
* ベースにするシナリオと同じデメリット (このページの例では LVM on LUKS)
* Same disadvantages as the scenario the installation is based on (LVM on LUKS for this particular example)
 
  +
* 設定が複雑です
* More complicated configuration
 
  +
* 他のブートローダーのサポートがありません
* Not supported by other boot loaders
 
  +
|----------------------------------------------------------
  +
| [[#Btrfs サブボリュームとスワップ]]
  +
UEFI 環境で [[Btrfs]] のシステムパーティションと {{ic|/boot}} ディレクトリを暗号化して、スワップパーティションを追加する方法。
  +
|
  +
* [[#boot パーティションの暗号化 (GRUB)]] と同じメリット
  +
* Btrfs の機能を活用できます
  +
|
  +
* [[#boot パーティションの暗号化 (GRUB)]] と同じデメリット
 
|}
 
|}
   
上記全てのシナリオが外部からの脅威に対して十分な保護を約束しますが、共通の欠点も存在します。暗号化キーを持っているユーザーなら誰でもデバイスの全てを復号化して、他のユーザーのデータにもアクセスすることが可能という点です。これが問題だという場合は、ブロックデバイスの暗号化とスタックファイルシステムの暗号化と組み合わせて使用することで、両者の利点を取り入れることができます。[[ディスク暗号化]]を見て下さい。
+
上記全てのシナリオが外部からの脅威に対して十分な保護を約束しますが、共通の欠点も存在します。暗号化キーを持っているユーザーなら誰でもデバイスの全てを復号化して、他のユーザーのデータにもアクセスすることが可能という点です。これが問題だという場合は、ブロックデバイスの暗号化とスタックファイルシステムの暗号化と組み合わせて使用することで、両者の利点を取り入れることができます。[[保存ータ暗号化]]を見て下さい。
   
 
他にも、スワップパーティションの暗号化を設定するべきかどうか考慮する必要があります。[[Dm-crypt/スワップの暗号化]]を見て下さい。
 
他にも、スワップパーティションの暗号化を設定するべきかどうか考慮する必要があります。[[Dm-crypt/スワップの暗号化]]を見て下さい。
   
 
シナリオで使用されているパーティショニングの外観について [[Dm-crypt/ドライブの準備#パーティショニング]] も参照してください。
 
シナリオで使用されているパーティショニングの外観について [[Dm-crypt/ドライブの準備#パーティショニング]] も参照してください。
  +
  +
{{Warning|どのシナリオでも、暗号化ボリュームで [[fsck]] などのファイルシステム修復ソフトウェアを直接使ってはいけません。ファイルを復号化する鍵を破壊してしまいます。復号化した後に使うようにしてください。}}
   
 
== LUKS を使用するシンプルなパーティションレイアウト ==
 
== LUKS を使用するシンプルなパーティションレイアウト ==
   
この例ではシンプルなパーティションレイアウトによる 'dmcrypt''+ LUKS のフルシステム暗号化を説明します:
+
この例ではシンプルなパーティションレイアウトによる ''dmcrypt''+ LUKS のフルシステム暗号化を説明します:
   
 
+--------------------+--------------------------+--------------------------+
 
+--------------------+--------------------------+--------------------------+
97行目: 114行目:
 
# cryptsetup -y -v luksFormat /dev/sdaX
 
# cryptsetup -y -v luksFormat /dev/sdaX
 
# cryptsetup open /dev/sdaX cryptroot
 
# cryptsetup open /dev/sdaX cryptroot
# mkfs -t ext4 /dev/mapper/cryptroot
+
# mkfs.ext4 /dev/mapper/cryptroot
# mount -t ext4 /dev/mapper/cryptroot /mnt
+
# mount /dev/mapper/cryptroot /mnt
   
 
マッピングが問題ないかチェック:
 
マッピングが問題ないかチェック:
104行目: 121行目:
 
# cryptsetup close cryptroot
 
# cryptsetup close cryptroot
 
# cryptsetup open /dev/sdaX cryptroot
 
# cryptsetup open /dev/sdaX cryptroot
# mount -t ext4 /dev/mapper/cryptroot /mnt
+
# mount /dev/mapper/cryptroot /mnt
   
 
パーティションを分割した場合 (例: {{ic|/home}})、以上のコマンドを全てのパーティションに繰り返し実行してください。ただし {{ic|/boot}} は別です。起動時に追加のパーティションを扱う方法は [[Dm-crypt/root 以外のファイルシステムの暗号化#ロック解除とマウントの自動化]] を見て下さい。
 
パーティションを分割した場合 (例: {{ic|/home}})、以上のコマンドを全てのパーティションに繰り返し実行してください。ただし {{ic|/boot}} は別です。起動時に追加のパーティションを扱う方法は [[Dm-crypt/root 以外のファイルシステムの暗号化#ロック解除とマウントの自動化]] を見て下さい。
112行目: 129行目:
 
=== boot パーティションの準備 ===
 
=== boot パーティションの準備 ===
 
セットアップする必要があるのは暗号化されない {{ic|/boot}} パーティションで、暗号化する root に必要となります。例えば、標準的な [[EFI|MBR/BIOS]] の {{ic|/boot}} パーティションの場合、以下を実行します:
 
セットアップする必要があるのは暗号化されない {{ic|/boot}} パーティションで、暗号化する root に必要となります。例えば、標準的な [[EFI|MBR/BIOS]] の {{ic|/boot}} パーティションの場合、以下を実行します:
# mkfs -t ext4 /dev/sdaY
+
# mkfs.ext4 /dev/sdaY
 
# mkdir /mnt/boot
 
# mkdir /mnt/boot
# mount -t ext4 /dev/sdaY /mnt/boot
+
# mount /dev/sdaY /mnt/boot
   
 
=== デバイスのマウント ===
 
=== デバイスのマウント ===
120行目: 137行目:
   
 
=== mkinitcpio の設定 ===
 
=== mkinitcpio の設定 ===
{{ic|encrypt}} フックを [[mkinitcpio|mkinitcpio.conf]] 内の {{ic|filesystems}} の前に追加します:
+
{{ic|keyboard}}, {{ic|keymap}}, {{ic|encrypt}} フックを [[mkinitcpio|mkinitcpio.conf]] 内の {{ic|filesystems}} の前に追加します:
{{hc|etc/mkinitcpio.conf|2=HOOKS="... '''encrypt''' ... filesystems ..."}}
+
{{hc|/etc/mkinitcpio.conf|2=HOOKS=(... '''keyboard''' '''keymap''' block '''encrypt''' ... filesystems ...)}}
   
 
他に必要なフックについては [[dm-crypt/システム設定#mkinitcpio]] を見て下さい。
 
他に必要なフックについては [[dm-crypt/システム設定#mkinitcpio]] を見て下さい。
  +
  +
設定後はイメージを再生成してください:
  +
  +
# mkinitcpio -p linux
   
 
=== ブートローダーの設定 ===
 
=== ブートローダーの設定 ===
暗号化された root パーティションを起動するには、ブートローダーに以下のカーネルパラメータを設定する必要があります:
+
暗号化された root パーティションを起動するには、ブートローダーに以下のカーネルパラメータを設定する必要があります ({{ic|''<device-UUID>''}} は {{ic|/dev/sdaX}} の UUID に置き換えてください。詳しくは[[永続的なブロックデバイスの命名]]を参照):
   
cryptdevice=/dev/sdaX:cryptroot
+
cryptdevice=UUID=''<device-UUID>'':cryptroot root=/dev/mapper/cryptroot
   
 
他に必要なパラメータについては [[Dm-crypt/システム設定#ブートローダー]] を見て下さい。
 
他に必要なパラメータについては [[Dm-crypt/システム設定#ブートローダー]] を見て下さい。
134行目: 155行目:
 
== LVM on LUKS ==
 
== LVM on LUKS ==
   
  +
LVM の上に暗号化パーティションをセットアップするのではなく、暗号化パーティションの上に [[LVM]] をセットアップするほうが簡単です。技術的にはひとつの大きな暗号化ブロックデバイスの中に LVM をセットアップすることになります。LVM はブロックデバイスを解錠して、ボリュームをスキャンしてマウントされるまでは透過的ではなくなります。
The straight-forward method is to set up [[LVM]] on top of the encrypted partition instead of the other way round. Technically the LVM is setup inside one big encrypted blockdevice. Hence, the LVM is not transparent until the blockdevice is unlocked and the underlying volume structure is scanned and mounted during boot.
 
   
  +
ディスクレイアウトの例:
The disk layout in this example is:
 
+------------------------------------------------------------------------------------+ +----------------+
+
+-----------------------------------------------------------------------+ +----------------+
|Logical volume1 | Logical volume2 | Logical volume3 | | |
+
| Logical volume1 | Logical volume2 | Logical volume3 | | |
|/dev/MyStorage/swapvol | /dev/MyStorage/rootvol | /dev/MyStorage/homevol | | Boot partition |
+
|/dev/mapper/MyVol-swap |/dev/mapper/MyVol-root |/dev/mapper/MyVol-home | | Boot partition |
|_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _| | (may be on |
+
|_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _| | (may be on |
| | | other device) |
+
| | | other device) |
| LUKS encrypted partition | | |
+
| LUKS encrypted partition | | |
| /dev/sdaX | | /dev/sdbY |
+
| /dev/sdaX | | /dev/sdbY |
+------------------------------------------------------------------------------------+ +----------------+
+
+-----------------------------------------------------------------------+ +----------------+
   
  +
{{Warning|この方法では論理ボリュームを複数のディスクに跨がらせることはできません。後で変更することも不可能です。[[#複数のパーティションの encrypt フックを修正]]を見てください。}}
This method does not allow you to span the logical volumes over multiple disks, even in the future. The [[#LUKS on LVM]] method does not have this limitation.
 
   
 
{{Tip|Two variants of this setup:
 
{{Tip|Two variants of this setup:
 
* [[Dm-crypt/特記事項#リモート LUKS ヘッダーを使ってシステムを暗号化]]ではこのセットアップと USB デバイスのリモート LUKS ヘッダーを使って二段階認証を実現します。
 
* [[Dm-crypt/特記事項#リモート LUKS ヘッダーを使ってシステムを暗号化]]ではこのセットアップと USB デバイスのリモート LUKS ヘッダーを使って二段階認証を実現します。
* Instructions at [http://www.pavelkogan.com/2014/05/23/luks-full-disk-encryption/ Pavel Kogan's blog] show how to encrypt the {{ic|/boot}} partition while keeping it on the main LUKS partition when using GRUB, but be aware of {{Bug|43663}}.}}
+
* Instructions at [http://www.pavelkogan.com/2014/05/23/luks-full-disk-encryption/ Pavel Kogan's blog] show how to encrypt the {{ic|/boot}} partition while keeping it on the main LUKS partition when using GRUB.}}
   
 
=== ディスクの準備 ===
 
=== ディスクの準備 ===
158行目: 179行目:
 
[[GPT]] で [[GRUB]] ブートローダーを使う時は、[[GRUB#BIOS システム]] で説明されているように BIOS Boot Partition を作成してください。
 
[[GPT]] で [[GRUB]] ブートローダーを使う時は、[[GRUB#BIOS システム]] で説明されているように BIOS Boot Partition を作成してください。
   
  +
{{ic|/boot}} にマウントするパーティションをタイプ {{ic|8300}} で容量 100 MB 以上にして作成します。
Create a partition to be mounted at {{ic|/boot}} of type {{ic|8300}} with a size of 100 MB or more.
 
   
  +
タイプ {{ic|8E00}} のパーティションを作成してください。後で暗号化コンテナを入れます。
Create a partition of type {{ic|8E00}}, which will later contain the encrypted container.
 
   
  +
"system" パーティションに LUKS 暗号化コンテナを作成してください。選んだパスワードを二回入力します。
Create the LUKS encrypted container at the "system" partition. Enter the chosen password twice.
 
   
 
# cryptsetup luksFormat /dev/''sdaX''
 
# cryptsetup luksFormat /dev/''sdaX''
168行目: 189行目:
 
cryptsetup のオプションについては [[Dm-crypt/デバイスの暗号化#LUKS モードの暗号化オプション|LUKS 暗号化のオプション]]を見て下さい。
 
cryptsetup のオプションについては [[Dm-crypt/デバイスの暗号化#LUKS モードの暗号化オプション|LUKS 暗号化のオプション]]を見て下さい。
   
  +
コンテナを開いてください:
Open the container:
 
   
# cryptsetup open --type luks /dev/''sdaX'' lvm
+
# cryptsetup open /dev/''sdaX'' cryptolvm
   
  +
復号化されたコンテナが {{ic|/dev/mapper/cryptolvm}} から利用できるようになります。
The decrypted container is now available at {{ic|/dev/mapper/lvm}}.
 
   
 
=== 論理ボリュームの準備 ===
 
=== 論理ボリュームの準備 ===
  +
開いた LUKS コンテナの上に物理ボリュームを作成:
Create a physical volume on top of the opened LUKS container:
 
   
# pvcreate /dev/mapper/lvm
+
# pvcreate /dev/mapper/cryptolvm
   
{{ic|MyStorage}} という名前のボリュームグループを作成して、先に作成した物理ボリュームを追加:
+
{{ic|MyVol}} という名前のボリュームグループを作成して、先に作成した物理ボリュームを追加:
   
# vgcreate MyStorage /dev/mapper/lvm
+
# vgcreate MyVol /dev/mapper/cryptolvm
   
 
ボリュームグループに論理ボリュームを作成:
 
ボリュームグループに論理ボリュームを作成:
   
# lvcreate -L 8G MyStorage -n swapvol
+
# lvcreate -L 8G MyVol -n swap
# lvcreate -L 15G MyStorage -n rootvol
+
# lvcreate -L 15G MyVol -n root
# lvcreate -l +100%FREE MyStorage -n homevol
+
# lvcreate -l 100%FREE MyVol -n home
   
 
論理ボリュームのファイルシステムをフォーマット:
 
論理ボリュームのファイルシステムをフォーマット:
   
# mkfs.ext4 /dev/mapper/MyStorage-rootvol
+
# mkfs.ext4 /dev/mapper/MyVol-root
# mkfs.ext4 /dev/mapper/MyStorage-homevol
+
# mkfs.ext4 /dev/mapper/MyVol-home
# mkswap /dev/mapper/MyStorage-swapvol
+
# mkswap /dev/mapper/MyVol-swap
   
 
ファイルシステムをマウント:
 
ファイルシステムをマウント:
   
# mount /dev/MyStorage/rootvol /mnt
+
# mount /dev/mapper/MyVol-root /mnt
 
# mkdir /mnt/home
 
# mkdir /mnt/home
# mount /dev/MyStorage/homevol /mnt/home
+
# mount /dev/mapper/MyVol-home /mnt/home
# swapon /dev/MyStorage/swapvol
+
# swapon /dev/mapper/MyVol-swap
   
 
=== boot パーティションの準備 ===
 
=== boot パーティションの準備 ===
  +
ブートローダーは {{ic|/boot}} ディレクトリから、カーネルや [[initramfs]]、あるいはブートローダーの設定ファイルをロードします。このディレクトリは暗号化されていない別のファイルシステム上に配置する必要があります。
The bootloader loads the kernel, [[initramfs]], and its own configuration files from the {{ic|/boot}} directory. This directory must be located on a separate unencrypted filesystem.
 
   
 
{{ic|/boot}} にするパーティションに Ext2 ファイルシステムを作成します。ブートローダーが読み込めるファイルシステムなら何でもかまいません。
 
{{ic|/boot}} にするパーティションに Ext2 ファイルシステムを作成します。ブートローダーが読み込めるファイルシステムなら何でもかまいません。
217行目: 238行目:
 
# mount /dev/''sdbY'' /mnt/boot
 
# mount /dev/''sdbY'' /mnt/boot
   
  +
インストールの手順を mkinitcpio の設定まで進めてください。
Aftwards continue with the installation procedure up to the mkinitcpio step.
 
   
 
=== mkinitcpio の設定 ===
 
=== mkinitcpio の設定 ===
{{ic|encrypt}} {{ic|lvm2}} フックを [[mkinitcpio|mkinitcpio.conf]] 内の {{ic|filesystems}} の前に追加します:
+
{{ic|keyboard}}, {{ic|encrypt}}, {{ic|lvm2}} フックを [[mkinitcpio|mkinitcpio.conf]] 内の {{ic|filesystems}} の前に追加します:
{{hc|/etc/mkinitcpio.conf|2=HOOKS="... '''encrypt''' '''lvm2''' ... filesystems ..."}}
+
{{hc|/etc/mkinitcpio.conf|2=HOOKS=(... '''keyboard''' '''keymap''' block '''encrypt''' '''lvm2''' ... filesystems ...)}}
   
  +
{{Note|{{ic|lvm2}} の最新実装ではフックの順番は特に意味を持ちません。}}
{{Note|The order of both hooks no longer matters with the current implementation of {{ic|lvm2}}.}}
 
   
 
他に必要なフックについては [[dm-crypt/システム設定#mkinitcpio]] を見て下さい。
 
他に必要なフックについては [[dm-crypt/システム設定#mkinitcpio]] を見て下さい。
  +
  +
設定後はイメージを再生成してください:
  +
  +
# mkinitcpio -p linux
   
 
=== ブートローダーの設定 ===
 
=== ブートローダーの設定 ===
起動時に暗号化された root パーティションの暗号化が解除されるように、以下のカーネルパラメータをブートローダーで設定します:
+
起動時に暗号化された root パーティションの暗号化が解除されるように、以下のカーネルパラメータをブートローダーで設定します ({{ic|''<device-UUID>''}} は {{ic|/dev/sdaX}} の UUID に置き換えてください。詳しくは[[永続的なブロックデバイスの命名]]を参照):
   
cryptdevice=/dev/''partition'':MyStorage root=/dev/mapper/MyStorage-rootvol
+
cryptdevice=UUID=''device-UUID'':cryptolvm root=/dev/mapper/MyVol-root
   
 
詳しくは [[Dm-crypt/システム設定#ブートローダー]] を見て下さい。
 
詳しくは [[Dm-crypt/システム設定#ブートローダー]] を見て下さい。
236行目: 261行目:
 
== LUKS on LVM ==
 
== LUKS on LVM ==
   
[[LVM]] 上で暗号化を利用するには、まず LVM ボリュームをセットアップして、それから暗号化パーティションのベースとして使うことになります。この方法では、暗号化パーティションと非暗号化パーティションのミックスが可能です。[[#LVM on LUKS]] とは違って、複数のディスクにまたがるような通常の論理ボリュームは使えません
+
[[LVM]] 上で暗号化を利用するには、まず LVM ボリュームをセットアップして、それから暗号化パーティションのベースとして使うことになります。この方法では、暗号化パーティションと非暗号化パーティションのミックスが可能です。
   
  +
{{Tip|[[#LVM on LUKS]] とは違って、複数のディスクにまたがる論理ボリュームを通常通り使うことができます。}}
The following short example creates a LUKS on LVM setup and mixes in the use of a key-file for the /home partition and temporary crypt volumes for {{ic|/tmp}} and {{ic|/swap}}. The latter is considered desirable from a security perspective, because no potentially sensitive temporary data survives the reboot, when the encryption is re-initialised. If you are experienced with LVM, you will be able to ignore/replace LVM and other specifics according to your plan. If you want to span a logical volume over multiple disks during setup already, a procedure to do so is described in [[Dm-crypt/特記事項#LVM を複数のディスクに拡張]].
 
  +
  +
以下の短い例では LUKS on LVM 構成を作成して、/home パーティションでキーファイルを使用して {{ic|/tmp}} と {{ic|/swap}} の一時的な暗号化ボリュームを混ぜ合わせます。機密データを含む一時データが再起動しても残ってしまう可能性がないため、セキュリティ的に優れています。論理ボリュームを複数のディスクにまたがるようにしたい場合、手順は [[Dm-crypt/特記事項#LVM を複数のディスクに拡張]]で説明しています。
   
 
=== ディスクの準備 ===
 
=== ディスクの準備 ===
   
  +
パーティションスキーム:
Partitioning scheme:
 
  +
+----------------+-----------------------------------------------------------------------+
* {{ic|/dev/sda1}} -> {{ic|/boot}}
 
  +
| | LUKS encrypted volume | LUKS encrypted volume | LUKS encrypted volume |
* {{ic|/dev/sda2}} -> LVM
 
  +
| | /dev/mapper/swap | /dev/mapper/root | /dev/mapper/home |
  +
| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _|
  +
| | Logical volume1 | Logical volume2 | Logical volume3 |
  +
| |/dev/mapper/MyVol-swap |/dev/mapper/MyVol-root |/dev/mapper/MyVol-home |
  +
| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _|
  +
| Boot partition | |
  +
| /dev/sda1 | /dev/sda2 |
  +
+----------------+-----------------------------------------------------------------------+
   
[[Dm-crypt/ドライブの準備#インストール前に dm-crypt で消去]]を見て {{ic|/dev/sda2}} をランダム化してください。
+
[[Dm-crypt/ドライブの準備#dm-crypt で空のディスクまたはパーティションを消去]]を見て {{ic|/dev/sda2}} をランダム化してください。
   
 
=== 論理ボリュームの準備 ===
 
=== 論理ボリュームの準備 ===
   
# lvm pvcreate /dev/sda2
+
# pvcreate /dev/sda2
# lvm vgcreate lvm /dev/sda2
+
# vgcreate MyVol /dev/sda2
# lvm lvcreate -L 10G -n lvroot lvm
+
# lvcreate -L 10G -n lvroot MyVol
# lvm lvcreate -L 500M -n swap lvm
+
# lvcreate -L 500M -n swap MyVol
# lvm lvcreate -L 500M -n tmp lvm
+
# lvcreate -L 500M -n tmp MyVol
# lvm lvcreate -l 100%FREE -n home lvm
+
# lvcreate -l 100%FREE -n home MyVol
   
# cryptsetup luksFormat -c aes-xts-plain64 -s 512 /dev/lvm/lvroot
+
# cryptsetup luksFormat -c aes-xts-plain64 -s 512 /dev/mapper/MyVol-lvroot
# cryptsetup open --type luks /dev/lvm/lvroot root
+
# cryptsetup open /dev/mapper/MyVol-lvroot root
# mkfs -t ext4 /dev/mapper/root
+
# mkfs.ext4 /dev/mapper/root
 
# mount /dev/mapper/root /mnt
 
# mount /dev/mapper/root /mnt
   
Note that {{ic|/home}} will be encrypted [[#論理ボリューム /home の暗号化|later]] in this example. Further, note that if you ever have to access the encrypted root from the Arch-ISO, the above {{ic|open}} action will allow you to after the [[LVM#論理ボリュームが表示されない|LVM shows up]].
+
この例では {{ic|/home}} [[#論理ボリューム /home の暗号化|後で]]暗号化します。Arch-ISO から暗号化したルートにアクセスする必要がある場合、上記の {{ic|open}} アクションで [[LVM#論理ボリュームが表示されない|LVM を表示]]した後にアクセスできます。
   
 
=== boot パーティションの準備 ===
 
=== boot パーティションの準備 ===
# dd if=/dev/zero of=/dev/sda1 bs=1M
+
# dd if=/dev/zero of=/dev/sda1 bs=1M status=progress
# mkfs -t ext4 /dev/sda1
+
# mkfs.ext4 /dev/sda1
 
# mkdir /mnt/boot
 
# mkdir /mnt/boot
 
# mount /dev/sda1 /mnt/boot
 
# mount /dev/sda1 /mnt/boot
   
Now after setup of the encrypted LVM partitioning, it would be time to install: [[インストールガイド#パーティションのマウント|Arch Install Scripts]].
+
暗号化した LVM のパーティションを設定したら、インストールを行ってください: [[インストールガイド#パーティションのマウント|Arch Install Scripts]]
   
 
=== mkinitcpio の設定 ===
 
=== mkinitcpio の設定 ===
   
 
{{ic|encrypt}} と {{ic|lvm2}} フックを [[mkinitcpio|mkinitcpio.conf]] 内の {{ic|filesystems}} の前に追加します:
 
{{ic|encrypt}} と {{ic|lvm2}} フックを [[mkinitcpio|mkinitcpio.conf]] 内の {{ic|filesystems}} の前に追加します:
{{hc|etc/mkinitcpio.conf|2=HOOKS="... '''lvm2''' '''encrypt''' ... filesystems ..."}}
+
{{hc|/etc/mkinitcpio.conf|2=HOOKS=(... '''keyboard''' '''keymap''' block '''lvm2''' '''encrypt''' ... filesystems ...)}}
   
 
他に必要なフックについては [[dm-crypt/システム設定#mkinitcpio]] を見て下さい。
 
他に必要なフックについては [[dm-crypt/システム設定#mkinitcpio]] を見て下さい。
  +
  +
設定ファイルを変更した後は次のコマンドを root 権限で実行してください:
  +
  +
# mkinitcpio -p linux
   
 
=== ブートローダーの設定 ===
 
=== ブートローダーの設定 ===
   
 
上の例の場合、ブートローダーの設定で root デバイスのカーネルオプションを以下のように変更します:
 
上の例の場合、ブートローダーの設定で root デバイスのカーネルオプションを以下のように変更します:
cryptdevice=/dev/lvm/lvroot:root root=/dev/mapper/root
+
cryptdevice=/dev/mapper/MyVol-lvroot:root root=/dev/mapper/root
 
詳しくは [[Dm-crypt/システム設定#ブートローダー]] を見て下さい。
 
詳しくは [[Dm-crypt/システム設定#ブートローダー]] を見て下さい。
   
293行目: 332行目:
 
以下の [[Dm-crypt/システム設定#crypttab|crypttab]] オプションは再起動するたびに一時ファイルシステムを暗号化します:
 
以下の [[Dm-crypt/システム設定#crypttab|crypttab]] オプションは再起動するたびに一時ファイルシステムを暗号化します:
 
{{hc|/etc/crypttab|
 
{{hc|/etc/crypttab|
swap /dev/lvm/swap /dev/urandom swap,cipher<nowiki>=aes-xts-plain64,size=</nowiki>256
+
swap /dev/mapper/MyVol-swap /dev/urandom swap,cipher<nowiki>=aes-xts-plain64,size=</nowiki>256
tmp /dev/lvm/tmp /dev/urandom tmp,cipher<nowiki>=aes-xts-plain64,size=</nowiki>256}}
+
tmp /dev/mapper/MyVol-tmp /dev/urandom tmp,cipher<nowiki>=aes-xts-plain64,size=</nowiki>256
  +
}}
   
 
=== 論理ボリューム /home の暗号化 ===
 
=== 論理ボリューム /home の暗号化 ===
Since this scenario uses LVM as the primary and dm-crypt as secondary mapper, each encrypted logical volume requires its own encryption. Yet, unlike the temporary filesystems configured with volatile encryption above, the logical volume for {{ic|/home}} should be persistent, of course. The following assumes you have rebooted into the installed system, otherwise you have to adjust paths.
+
Since this scenario uses LVM as the primary and dm-crypt as secondary mapper, each encrypted logical volume requires its own encryption. Yet, unlike the temporary filesystems configured with volatile encryption above, the logical volume for {{ic|/home}} should be persistent, of course. The following assumes you have rebooted into the installed system, otherwise you have to adjust paths.
 
To safe on entering a second passphrase at boot for it, a [[Dm-crypt/デバイスの暗号化#キーファイル|keyfile]] is created:
 
To safe on entering a second passphrase at boot for it, a [[Dm-crypt/デバイスの暗号化#キーファイル|keyfile]] is created:
mkdir -m 700 /etc/luks-keys
+
# mkdir -m 700 /etc/luks-keys
dd if=/dev/random of=/etc/luks-keys/home bs=1 count=256
+
# dd if=/dev/random of=/etc/luks-keys/home bs=1 count=256 status=progress
   
 
論理ボリュームは以下のように暗号化します:
 
論理ボリュームは以下のように暗号化します:
cryptsetup luksFormat -v -s 512 /dev/lvm/home /etc/luks-keys/home
+
# cryptsetup luksFormat -v -s 512 /dev/mapper/MyVol-home /etc/luks-keys/home
cryptsetup -d /etc/luks-keys/home open --type luks /dev/lvm/home home
+
# cryptsetup -d /etc/luks-keys/home open /dev/mapper/MyVol-home home
mkfs -t ext4 /dev/mapper/home
+
# mkfs.ext4 /dev/mapper/home
mount /dev/mapper/home /home
+
# mount /dev/mapper/home /home
 
暗号化されたマウントは [[Dm-crypt/システム設定#crypttab|crypttab]] で設定します:
 
暗号化されたマウントは [[Dm-crypt/システム設定#crypttab|crypttab]] で設定します:
 
{{hc|/etc/crypttab|
 
{{hc|/etc/crypttab|
home /dev/lvm/home /etc/luks-keys/home}}
+
home /dev/mapper/MyVol-home /etc/luks-keys/home}}
 
{{hc|/etc/fstab|
 
{{hc|/etc/fstab|
/dev/mapper/home /home ext4 defaults 0 2}}
+
/dev/mapper/home /home ext4 defaults 0 2}}
 
これでセットアップは完了です。
 
これでセットアップは完了です。
and setup is done.
 
   
 
If you want to expand the logical volume for {{ic|/home}} (or any other volume) at a later point, it is important to note that the LUKS encrypted part has to be resized as well. For a procedure see [[Dm-crypt/特記事項#LVM を複数のディスクに拡張]].
 
If you want to expand the logical volume for {{ic|/home}} (or any other volume) at a later point, it is important to note that the LUKS encrypted part has to be resized as well. For a procedure see [[Dm-crypt/特記事項#LVM を複数のディスクに拡張]].
  +
  +
== ソフトウェア RAID と LUKS ==
  +
  +
以下の例では同じ容量の SSD を2台とストレージ用の HDD を搭載したワークステーション向けノートパソコンの設定を元にしています。最終的には LUKS ベースの ({{ic|/boot}} を含む) 完全ディスク暗号化を実現し、SSD は [[RAID|RAID0]] アレイにして、起動時に [[GRUB]] にパスフレーズを指定した後にキーファイルで暗号化を解除します。SSD の [[TRIM]] のサポートは有効にしますが、[[Dm-crypt/特記事項#ソリッドステートドライブ (SSD) の Discard/TRIM のサポート]]も読むと良いでしょう。
  +
  +
非常にシンプルなパーティションスキームを使用し、RAID ストレージは全て {{ic|/}} にマウントして ({{ic|/boot}} パーティションは分割しません)、HDD は {{ic|/mnt/data}} にマウントします。システムは BIOS モードで起動し [[パーティショニング|GPT]] でパーティショニングします。
  +
  +
定期的に[[バックアップ]]を取ることが非常に重要です。SSD のどちらかが故障すると、RAID アレイに保存されていたデータは復元できなくなります。耐障害性が大事なのであれば [[RAID#通常の RAID レベル|RAID レベル]]を慎重に選択してください。
  +
  +
The encryption is not deniable in this setup.
  +
  +
For the sake of the instructions below, the following block devices are used:
  +
/dev/sda = first SSD
  +
/dev/sdb = second SSD
  +
/dev/sdc = HDD
  +
Be sure to substitue them with the appropriate device designations for your setup, as they may be different.
  +
  +
=== ディスクの準備 ===
  +
  +
パーティションを作成する前に、[[Dm-crypt/ドライブの準備]]に書かれているようにディスクの完全消去について考慮してください。
  +
  +
[[GRUB]] ブートローダーを [[GPT]] で使用する場合、[[GRUB#BIOS システム]]に書かれているように BIOS Boot Partition を作成する必要があります。例として {{ic|/dev/sda1}} に "BIOS boot" の 1M パーティションを作成して、残りの空き容量は全て "Linux RAID" として {{ic|/dev/sda2}} にパーティションします。
  +
  +
{{ic|/dev/sda}} にパーティションを作成したら以下のコマンドを使って {{ic|/dev/sdb}} に複製:
  +
# sfdisk -d /dev/sda > sda.dump
  +
# sfdisk /dev/sdb < sda.dump
  +
  +
The HDD is prepared with a single Linux partition covering the whole drive at {{ic|/dev/sdc1}}.
  +
  +
=== RAID アレイの構築 ===
  +
  +
Create the RAID array for the SSDs. This example utilizes RAID0, you may wish to substitute a different level based on your preferences or requirements.
  +
# mdadm --create --verbose --level=0 --metadata=1.2 --raid-devices=2 /dev/md0 /dev/sda2 /dev/sdb2
  +
  +
=== ブロックデバイスの準備 ===
  +
  +
[[Dm-crypt/ドライブの準備]]に書かれているように {{ic|/dev/zero}} を使ってデバイスを消去してからランダムなキーでデバイスを暗号化してください。もしくは {{ic|dd}} で {{ic|/dev/random}} や {{ic|/dev/urandom}} を使うこともできます:
  +
# cryptsetup open --type plain /dev/md0 container --key-file /dev/random
  +
# dd if=/dev/zero of=/dev/mapper/container bs=1M status=progress
  +
# cryptsetup close container
  +
  +
And repeat above for the HDD ({{ic|/dev/sdc1}} in this example).
  +
  +
Set up encryption for {{ic|/dev/md0}}:
  +
# cryptsetup -y -v luksFormat -c aes-xts-plain64 -s 512 /dev/md0
  +
# cryptsetup open /dev/md0 cryptroot
  +
# mkfs.ext4 /dev/mapper/cryptroot
  +
# mount /dev/mapper/cryptroot /mnt
  +
  +
And repeat for the HDD:
  +
# cryptsetup -y -v luksFormat -c aes-xts-plain64 -s 512 /dev/sdc1
  +
# cryptsetup open /dev/sdc1 cryptdata
  +
# mkfs.ext4 /dev/mapper/cryptdata
  +
# mkdir -p /mnt/mnt/data
  +
# mount /dev/mapper/cryptdata /mnt/mnt/data
  +
  +
=== ブートローダーの設定 ===
  +
  +
Configure [[GRUB]] for the encrypted system by editing {{ic|/etc/default/grub}} with the following. Note that the {{ic|:allow-discards}} option enables TRIM support on the SSDs, if you do not wish to use it you should omit this.
  +
GRUB_CMDLINE_LINUX="cryptdevice=/dev/md0:cryptroot:allow-discards root=/dev/mapper/cryptroot"
  +
GRUB_ENABLE_CRYPTODISK=y
  +
  +
詳しくは [[Dm-crypt/システム設定#ブートローダー]]や [[GRUB#暗号化された /boot]]を見てください。
  +
  +
Complete the GRUB install to both SSDs (in reality, installing only to {{ic|/dev/sda}} will work).
  +
# grub-install --target=i386-pc /dev/sda
  +
# grub-install --target=i386-pc /dev/sdb
  +
# grub-mkconfig -o /boot/grub/grub.cfg
  +
  +
=== キーファイルの作成 ===
  +
  +
システムの起動時にパスフレーズを二回入力する手間を省く設定です。[[dm-crypt/デバイスの暗号化#キーファイル|キーファイル]]を作成して initramfs イメージに追加することで encrypt フックでルートデバイスを解除できるようにします。詳しくは [[dm-crypt/デバイスの暗号化#キーファイルを initramfs に埋め込む]] を参照。
  +
  +
* [[dm-crypt/デバイスの暗号化#キーファイル|キーファイル]]を作成して {{ic|/dev/md0}} にキーを追加。
  +
* HDD ({{ic|/dev/sdc1}}) のキーファイルを作成することで起動時に解錠が可能です。上記で作成したパスフレーズは残すことで後で必要になったときに復旧が簡単です。{{ic|/etc/crypttab}} を編集して起動時に HDD を復号化してください。詳しくは [[dm-crypt/デバイスの暗号化#起動時にロックを解除]]を参照。
  +
  +
=== システムの設定 ===
  +
  +
[[fstab|/etc/fstab]] を編集して cryptroot と cryptdata ブロックデバイスをマウントしてください。TRIM のサポートを有効にしなかった場合、{{ic|discard}} マウントオプションは削除してください:
  +
  +
/dev/mapper/cryptroot / ext4 rw,noatime,discard 0 1
  +
/dev/mapper/cryptdata /mnt/data ext4 defaults 0 2
  +
  +
RAID の設定を保存:
  +
  +
# mdadm --detail --scan > /etc/mdadm.conf
  +
  +
[[mkinitcpio.conf]] を編集してキーファイルを適切なフックを追加してください:
  +
  +
FILES=(/crypto_keyfile.bin)
  +
HOOKS=( ... '''keyboard''' '''keymap''' block '''mdadm_udev''' '''encrypt''' filesystems ... )
  +
  +
詳しくは [[dm-crypt/システム設定#mkinitcpio]] を参照。
   
 
== Plain dm-crypt ==
 
== Plain dm-crypt ==
   
  +
Contrary to LUKS, dm-crypt ''plain'' mode does not require a header on the encrypted device: this scenario exploits this feature to set up a system on an unpartitioned, encrypted disk that will be indistinguishable from a disk filled with random data, which could allow [[Wikipedia:Deniable encryption|deniable encryption]]. See also [[wikipedia:Disk encryption#Full disk encryption]].
This scenario sets up a system on a dm-crypt a full disk with ''plain'' mode encryption. Note that for most use cases, the methods using LUKS described above are the better options for both system encryption and encrypted partitions. LUKS features like key management with multiple pass-phrases/key-files are unavailable with ''plain'' mode.
 
   
  +
Note that if full-disk encryption is not required, the methods using LUKS described in the sections above are better options for both system encryption and encrypted partitions. LUKS features like key management with multiple passphrases/key-files or re-encrypting a device in-place are unavailable with ''plain'' mode.
dm-crypt ''plain'' mode does not require a header on the encrypted disk: this means that an unpartitioned, encrypted disk will be indistinguishable from a disk filled with random data, which is the desired attribute for this scenario, see also [[Wikipedia:Deniable encryption]].
 
   
''Plain'' dm-crypt encrypted disks can be more resilient to damage than LUKS encrypted disks, because it does not rely on an encryption master-key which can be a single-point of failure if damaged. However, using ''plain'' mode also requires more manual configuration of encryption options to achieve the same cryptographic strength. See also [[ディスク暗号化#暗号メタデータ]].
+
''Plain'' dm-crypt encryption can be more resilient to damage than LUKS encrypted disks, because it does not rely on an encryption master-key which can be a single-point of failure if damaged. However, using ''plain'' mode also requires more manual configuration of encryption options to achieve the same cryptographic strength. See also [[ディスク暗号化#暗号メタデータ]]. Using ''plain'' mode could also be considered if concerned with the problems explained in [[Dm-crypt/特記事項#ソリッドステートドライブ (SSD) の Discard/TRIM のサポート]].
   
 
{{Tip|If headerless encryption is your goal but you are unsure about the lack of key-derivation with ''plain'' mode, then two alternatives are:
 
{{Tip|If headerless encryption is your goal but you are unsure about the lack of key-derivation with ''plain'' mode, then two alternatives are:
  +
* dm-crypt LUKS mode by using the ''cryptsetup'' {{ic|--header}} option. It cannot be used with the standard ''encrypt'' hook, but the hook [[Dm-crypt/特記事項#リモート LUKS ヘッダーを使ってシステムを暗号化|may be modified]].
* [[tcplay]] which offers headerless encryption but with the PBKDF2 function, or
 
  +
* [[tcplay]] which offers headerless encryption but with the PBKDF2 function.}}
* dm-crypt LUKS mode by using the ''cryptsetup'' {{ic|--header}} option. It cannot be used with the standard ''encrypt'' hook, but the hook [[Dm-crypt/特記事項#リモート LUKS ヘッダーを使ってシステムを暗号化|may be modified]].}}
 
   
  +
このシナリオでは2つの USB スティックを使います:
The scenario uses a USB stick for the boot device and another one to store the encryption key. The disk layout is:
 
  +
* one for the boot device, which also allows storing the options required to open/unlock the plain encrypted device in the boot loader configuration, since typing them on each boot would be error prone;
  +
* another for the encryption key file, assuming it stored as raw bits so that to the eyes of an unaware attacker who might get the usbkey the encryption key will appear as random data instead of being visible as a normal file. See also [[Wikipedia:Security through obscurity]], follow [[Dm-crypt/デバイスの暗号化#キーファイル]] to prepare the keyfile.
   
 
|--------------------+------------------+--------------------+ +---------------+ +---------------+
 
|--------------------+------------------+--------------------+ +---------------+ +---------------+
340行目: 474行目:
 
|disk drive /dev/sdaX encrypted using plain mode and LVM | |USB stick 1 | |USB stick 2 |
 
|disk drive /dev/sdaX encrypted using plain mode and LVM | |USB stick 1 | |USB stick 2 |
 
+------------------------------------------------------------+ +---------------+ +---------------+
 
+------------------------------------------------------------+ +---------------+ +---------------+
 
{{ic|/boot}} and the boot loader cannot be kept on the encrypted drive, or it will defeat the purpose of using ''plain'' mode for deniable encryption. This also allows storing the options required to open/unlock the plain encrypted device in the boot loader configuration, since typing them on each boot would be error prone.
 
 
This scenario also uses a key file, assuming it stored as raw bits on a second USB stick, so that to the eyes of an unaware attacker who might get the usbkey the encryption key will appear as random data instead of being visible as a normal file. See also [[Wikipedia:Security through obscurity]], follow [[Dm-crypt/デバイスの暗号化#キーファイル]] to prepare the keyfile.
 
   
 
{{Tip|
 
{{Tip|
* It is also possible to use a single usb key by copying the keyfile to the initram directly. An example keyfile {{ic|/etc/keyfile}} gets copied to the initram image by setting {{ic|1=FILES="/etc/keyfile"}} in {{ic|/etc/mkinitcpio.conf}}. The way to instruct the {{ic|encrypt}} hook to read the keyfile in the initram image is using {{ic|rootfs:}} prefix before the filename, e.g. {{ic|cryptkey&#61;rootfs:/etc/keyfile}}.
+
* It is also possible to use a single usb key by copying the keyfile to the initram directly. An example keyfile {{ic|/etc/keyfile}} gets copied to the initram image by setting {{ic|1=FILES=(/etc/keyfile)}} in {{ic|/etc/mkinitcpio.conf}}. The way to instruct the {{ic|encrypt}} hook to read the keyfile in the initram image is using {{ic|rootfs:}} prefix before the filename, e.g. {{ic|cryptkey&#61;rootfs:/etc/keyfile}}.
* Another option is using a passphrase with good [[ディスク暗号化#強固なパスフレーズの選択|entropy]].
+
* [[ディスク暗号化#強固なパスフレーズの選択|エントロピー]]が十分なパスフレーズを使用するという選択肢も存在します。
 
}}
 
}}
   
360行目: 490行目:
 
詳しくは [[Dm-crypt/デバイスの暗号化#plain モードの暗号化オプション]] を参照。
 
詳しくは [[Dm-crypt/デバイスの暗号化#plain モードの暗号化オプション]] を参照。
   
Using the device {{ic|/dev/sd''X''}}, with the twofish-xts cipher with a 512 bit key size and using a keyfile we have the following options for this scenario:
+
Using the device {{ic|/dev/sd''X''}}, with the twofish-xts cipher with a 512 bit key size and using a keyfile we have the following options for this scenario:
 
{{bc|<nowiki># cryptsetup --hash=sha512 --cipher=twofish-xts-plain64 --offset=0 --key-file=</nowiki>/dev/sd''Z'' <nowiki>--key-size=512 open --type=plain /dev/sdX enc</nowiki>}}
 
{{bc|<nowiki># cryptsetup --hash=sha512 --cipher=twofish-xts-plain64 --offset=0 --key-file=</nowiki>/dev/sd''Z'' <nowiki>--key-size=512 open --type=plain /dev/sdX enc</nowiki>}}
 
Unlike encrypting with LUKS, the above command must be executed ''in full'' whenever the mapping needs to be re-established, so it is important to remember the cipher, hash and key file details.
 
Unlike encrypting with LUKS, the above command must be executed ''in full'' whenever the mapping needs to be re-established, so it is important to remember the cipher, hash and key file details.
383行目: 513行目:
   
 
=== boot パーティションの準備 ===
 
=== boot パーティションの準備 ===
  +
必要であれば、USB スティックの vfat パーティションに {{ic|/boot}} パーティションをインストールできます。ただし、手動のパーティションが必要な場合、小さな 200MB のパーティションで十分です。お好きな [[パーティショニング#パーティショニングツール|パーティションツール]]を使ってパーティションを作成してください。
The {{ic|/boot}} partition can be installed on the standard vfat partition of a USB stick, if required. But if manual partitioning is needed, then a small 200MB partition is all that is required. Create the partition using a [[パーティショニング#パーティショニングツール|partitioning tool]] of your choice.
 
   
  +
vfat でフォーマットされていない場合、{{ic|/boot}} パーティションのフラッシュメモリを保護するため非ジャーナリングファイルシステムを選択します:
We choose a non-journalling file system to preserve the flash memory of the {{ic|/boot}} partition, if not already formatted as vfat:
 
 
# mkfs.ext2 /dev/sd''Y''1
 
# mkfs.ext2 /dev/sd''Y''1
 
# mkdir /mnt/boot
 
# mkdir /mnt/boot
392行目: 522行目:
 
=== mkinitcpio の設定 ===
 
=== mkinitcpio の設定 ===
   
{{ic|encrypt}} {{ic|lvm2}} フックを [[mkinitcpio|mkinitcpio.conf]] 内の {{ic|filesystems}} の前に追加します:
+
{{ic|keyboard}}, {{ic|encrypt}}, {{ic|lvm2}} フックを [[mkinitcpio|mkinitcpio.conf]] 内の {{ic|filesystems}} の前に追加します:
{{hc|etc/mkinitcpio.conf|2=HOOKS="... '''encrypt''' '''lvm2''' ... filesystems ..."}}
+
{{hc|etc/mkinitcpio.conf|2=HOOKS=(... '''keyboard''' '''keymap''' block '''encrypt''' '''lvm2''' ... filesystems ...)}}
   
 
他に必要なフックについては [[dm-crypt/システム設定#mkinitcpio]] を見て下さい。
 
他に必要なフックについては [[dm-crypt/システム設定#mkinitcpio]] を見て下さい。
  +
  +
設定後はイメージを再生成してください:
  +
  +
# mkinitcpio -p linux
   
 
=== ブートローダーの設定 ===
 
=== ブートローダーの設定 ===
   
  +
暗号化した root パーティションを起動するには、以下のカーネルパラメータをブートローダーで設定する必要があります:
In order to boot the encrypted root partition, the following kernel parameters need to be set by the boot loader:
 
   
 
cryptdevice=/dev/sd''X'':enc cryptkey=/dev/sd''Z'':0:512 crypto=sha512:twofish-xts-plain64:512:0:
 
cryptdevice=/dev/sd''X'':enc cryptkey=/dev/sd''Z'':0:512 crypto=sha512:twofish-xts-plain64:512:0:
  +
  +
{{Note|encrypt の代わりに sd-encrypt を使用する場合、cryptdevice の代わりに {{ic|''luks.uuid''}} を使ってください。詳しくは ''systemd-cryptsetup-generator(8)'' を参照。}}
   
 
他に必要なパラメータについては [[Dm-crypt/システム設定#ブートローダー]] を見て下さい。
 
他に必要なパラメータについては [[Dm-crypt/システム設定#ブートローダー]] を見て下さい。
   
  +
{{Tip|GRUB を使用する場合、次のコマンドを使うことで {{ic|/boot}} パーティションと同じ USB にインストールすることができます:
{{Tip|If using GRUB, you can install it on the same USB as the {{ic|/boot}} partition with:
 
 
# grub-install --recheck /dev/sd''Y''
 
# grub-install --recheck /dev/sd''Y''
 
}}
 
}}
411行目: 547行目:
 
===インストール後===
 
===インストール後===
   
You may wish to remove the USB sticks after booting. Since the {{ic|/boot}} partition is not usually needed, the {{ic|noauto}} option can be added to the relevant line in {{ic|/etc/fstab}}:
+
起動後に USB スティックは取り除けます。{{ic|/boot}} パーティションは通常は必要ないため、{{ic|noauto}} オプションを {{ic|/etc/fstab}} に追加できます:
   
 
{{hc|/etc/fstab|
 
{{hc|/etc/fstab|
417行目: 553行目:
 
/dev/sd''Yn'' /boot ext2 '''noauto''',rw,noatime 0 2}}
 
/dev/sd''Yn'' /boot ext2 '''noauto''',rw,noatime 0 2}}
   
  +
ただしカーネルやブートローダーのアップグレードが必要なときは、{{ic|/boot}} パーティションがマウントされていなければなりません。{{ic|fstab}} に既にエントリが存在すれば、次のコマンドでマウントできます:
However, when an update to the kernel or bootloader is required, the {{ic|/boot}} partition must be present and mounted. As the entry in {{ic|fstab}} already exists, it can be mounted simply with:
 
   
 
# mount /boot
 
# mount /boot
423行目: 559行目:
 
== boot パーティションの暗号化 (GRUB) ==
 
== boot パーティションの暗号化 (GRUB) ==
   
  +
このセットアップでは [[#LVM on LUKS]] セクションと同じパーティションレイアウト・設定でシステムのルートパーティションを設定しますが、違いが2つあります:
This setup utilizes the same partition layout and configuration for the system's root partition as the previous [[#LVM on LUKS]] section, with two distinct differences:
 
   
  +
# セットアップは [[UEFI]] 環境で行います。
# The setup is performed for an [[UEFI]] system and
 
  +
# [[GRUB]] ブートローダーの特殊機能を使用してブートパーティション {{ic|/boot}} も暗号化します。[[GRUB#暗号化された /boot]]を見てください。
# A special feature of the [[GRUB]] bootloader is used to additionally encrypt the boot partition {{ic|/boot}}. See also [[GRUB#Boot partition]].
 
   
  +
ディスクレイアウトは以下のようになります:
The disk layout in this example is:
 
   
 
+---------------+----------------+----------------+----------------+----------------+
 
+---------------+----------------+----------------+----------------+----------------+
440行目: 576行目:
 
+---------------+----------------+--------------------------------------------------+
 
+---------------+----------------+--------------------------------------------------+
   
{{Tip|All scenarios are intended as examples. It is, of course, possible to apply both of the two above distinct installation steps with the other scenarios as well. See also the variants linked in [[#LVM on LUKS]].}}
+
{{Tip|All scenarios are intended as examples. It is, of course, possible to apply both of the two above distinct installation steps with the other scenarios as well. See also the variants linked in [[#LVM on LUKS]].}}
  +
{{Note|{{AUR|cryptboot}} パッケージの {{ic|cryptboot}} スクリプトを使うことで暗号化された boot の管理 (マウント・アンマウント・パッケージのアップグレード) を簡単にできます。また、[[セキュアブート#自分で署名した鍵を使う|UEFI Secure Boot]] を使用して [https://www.schneier.com/blog/archives/2009/10/evil_maid_attac.html 悪意あるメイド] 攻撃から身を守ることができます。詳しくは [https://github.com/xmikos/cryptboot cryptboot のプロジェクトページ] を参照。}}
   
 
=== ディスクの準備 ===
 
=== ディスクの準備 ===
   
  +
パーティションを作成する前に、[[Dm-crypt/ドライブの準備]]に書かれているように、ディスクを完全に消去するようにしてください。
Prior to creating any partitions, you should inform yourself about the importance and methods to securely erase the disk, described in [[Dm-crypt/ドライブの準備]].
 
   
Create an [[Unified_Extensible_Firmware_Interface#EFI_System_Partition|EFI System Partition (ESP)]] with an appropriate size, it will later be mounted at {{ic|/boot/efi}}.
+
[[Unified_Extensible_Firmware_Interface#EFI_System_Partition|EFI System Partition (ESP)]] を適当な容量で作成してください。後で {{ic|/boot/efi}} にマウントします。
   
Create a partition to be mounted at {{ic|/boot}} of type {{ic|8300}} with a size of 100 MB or more.
+
{{ic|/boot}} にマウントするパーティションをタイプ {{ic|8300}} の容量 100 MB 以上で作成します。
   
  +
{{Tip|BIOS/[[GPT]] で [[GRUB]] ブートローダーを使用する場合は、[[GRUB#BIOS システム]]に書かれているように ESP の代わりに BIOS Boot Partition を作成してください。}}
{{Tip|When using the [[GRUB]] bootloader together with a BIOS/[[GPT]], create a BIOS Boot Partition as explained in [[GRUB#BIOS システム]] instead of the ESP.}}
 
   
  +
タイプ {{ic|8E00}} のパーティションを作成してください。後で暗号化コンテナを入れます。
Create a partition of type {{ic|8E00}}, which will later contain the encrypted container.
 
   
  +
"system" パーティションに LUKS 暗号化コンテナを作成してください。
Create the LUKS encrypted container at the "system" partition.
 
   
 
# cryptsetup luksFormat /dev/''sdaZ''
 
# cryptsetup luksFormat /dev/''sdaZ''
   
For more information about the available cryptsetup options see the [[Dm-crypt/デバイスの暗号化#LUKS モードの暗号化オプション|LUKS encryption options]] prior to above command.
+
上記のコマンドの cryptsetup で使えるオプションについては [[Dm-crypt/デバイスの暗号化#LUKS モードの暗号化オプション|LUKS 暗号化オプション]]を参照してください。
   
  +
パーティションレイアウトは以下のようになります:
Your partition layout should look similar to this:
 
{{hc| gdisk /dev/sda |
+
{{hc|# gdisk /dev/sda |
 
Number Start (sector) End (sector) Size Code Name
 
Number Start (sector) End (sector) Size Code Name
 
1 2048 1050623 512.0 MiB EF00 EFI System
 
1 2048 1050623 512.0 MiB EF00 EFI System
468行目: 605行目:
 
}}
 
}}
   
  +
コンテナを開く:
Open the container:
 
   
 
# cryptsetup open --type luks /dev/''sdaZ'' lvm
 
# cryptsetup open --type luks /dev/''sdaZ'' lvm
   
The decrypted container is now available at {{ic|/dev/mapper/lvm}}.
+
復号化されたコンテナは {{ic|/dev/mapper/lvm}} から利用できます。
   
 
=== 論理ボリュームの準備 ===
 
=== 論理ボリュームの準備 ===
480行目: 617行目:
 
=== boot パーティションの準備 ===
 
=== boot パーティションの準備 ===
   
  +
ブートローダーは {{ic|/boot}} ディレクトリからカーネルや [[initramfs]]、あるいはブートローダーの設定ファイルをロードします。
The bootloader loads the kernel, [[initramfs]], and its own configuration files from the {{ic|/boot}} directory.
 
   
  +
まず、ファイルを配置・インストールするための LUKS コンテナを作成:
First, create the LUKS container where the files will be located and installed into:
 
 
 
# cryptsetup luksFormat /dev/sda''Y''
+
# cryptsetup luksFormat /dev/sda''Y''
   
  +
次に、コンテナをオープン:
Next, open it:
 
 
# cryptsetup open /dev/sda''Y'' cryptboot
 
# cryptsetup open /dev/sda''Y'' cryptboot
   
  +
{{ic|/boot}} にするパーティションにファイルシステムを作成。ブートローダーから読み込めるならどんなファイルシステムでもかまいません:
Create a filesystem on the partition intended for {{ic|/boot}}. Any filesystem that can be read by the bootloader is eligible:
 
   
 
# mkfs.ext2 /dev/mapper/''cryptboot''
 
# mkfs.ext2 /dev/mapper/''cryptboot''
   
Create the directory {{ic|/mnt/boot}}:
+
{{ic|/mnt/boot}} ディレクトリを作成:
   
 
# mkdir /mnt/boot
 
# mkdir /mnt/boot
   
Mount the partition to {{ic|/mnt/boot}}:
+
パーティションを {{ic|/mnt/boot}} にマウント:
   
 
# mount /dev/mapper/''cryptboot'' /mnt/boot
 
# mount /dev/mapper/''cryptboot'' /mnt/boot
   
Create a mountpoint for the [[Unified_Extensible_Firmware_Interface#EFI_System_Partition|ESP]] at {{ic|/boot/efi}} for compatibility with {{ic|grub-install}} and mount it:
+
{{ic|grub-install}} から利用できるように [[Unified_Extensible_Firmware_Interface#EFI_System_Partition|ESP]] のマウントポイントを {{ic|/boot/efi}} に作成してマウント:
   
 
# mkdir /mnt/boot/efi
 
# mkdir /mnt/boot/efi
 
# mount /dev/''sdaX'' /mnt/boot/efi
 
# mount /dev/''sdaX'' /mnt/boot/efi
   
  +
この時点で、{{ic|/mnt}} の中に以下のパーティションと論理ボリュームが作成されているはずです:
At this point, you should have the following partitions and logical volumes inside of {{ic|/mnt}}:
 
{{hc|lsblk|
+
{{hc|$ lsblk|
 
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
 
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
 
sda 8:0 0 200G 0 disk
 
sda 8:0 0 200G 0 disk
520行目: 657行目:
 
}}
 
}}
   
  +
インストールの手順を mkinitcpio の設定まで進めてください。
Afterwards continue with the installation procedure up to the mkinitcpio step.
 
   
 
=== mkinitcpio の設定 ===
 
=== mkinitcpio の設定 ===
   
[[mkinitcpio|mkinitcpio.conf]] に {{ic|encrypt}} {{ic|lvm2}} フックを追加:
+
[[mkinitcpio|mkinitcpio.conf]] に {{ic|keyboard}}, {{ic|encrypt}}, {{ic|lvm2}} フックを追加:
{{hc|/etc/mkinitcpio.conf|2=HOOKS="... '''encrypt''' '''lvm2''' ... filesystems ..."}}
+
{{hc|/etc/mkinitcpio.conf|2=HOOKS=(... '''keyboard''' '''keymap''' block '''encrypt''' '''lvm2''' ... filesystems ...)}}
   
 
詳細や必要な他のフックについては [[dm-crypt/システム設定#mkinitcpio]] を参照。
 
詳細や必要な他のフックについては [[dm-crypt/システム設定#mkinitcpio]] を参照。
   
=== ブートローダーの設定 ===
 
   
  +
設定後はイメージを再生成してください:
起動時に暗号化された root パーティションの暗号化が解除されるように、以下のカーネルパラメータをブートローダーで設定します:
 
   
  +
# mkinitcpio -p linux
cryptdevice=/dev/''partition'':MyStorage root=/dev/mapper/MyStorage-rootvol
 
   
詳しくは [[Dm-crypt/システム設定#ブートローダー]] を参照。
+
=== ブートローダーの設定 ===
   
  +
起動時に LUKS で暗号化された {{ic|/boot}} パーティションを認識して暗号化された root パーティションの暗号化が解除されるように GRUB を設定:
Now we prepare the GRUB bootloader installation to recognize the LUKS encrypted {{ic|/boot}} partition according to [[GRUB#Boot partition]].
 
   
{{ic|/etc/default/grub}} を開いてパラメーターを末端に追加:
+
{{hc|/etc/default/grub|2=
  +
GRUB_CMDLINE_LINUX="... cryptdevice=UUID=''<device-UUID>'':lvm ..."
  +
GRUB_ENABLE_CRYPTODISK=y
  +
}}
   
  +
詳しくは [[Dm-crypt/システム設定#ブートローダー]]や [[GRUB#暗号化された /boot]]を参照。{{ic|''<device-UUID>''}} は {{ic|/dev/sdaZ}} (ルートファイルシステムが存在する LVM が含まれているパーティション) の UUID に置き換えてください。詳しくは[[永続的なブロックデバイスの命名]]を参照。
{{ic|1=GRUB_ENABLE_CRYPTODISK=y}}
 
   
  +
GRUB の[[GRUB#メイン設定ファイルの生成|設定ファイル]]を作成して、マウントされている ESP に [[GRUB#インストール|GRUB をインストール]]:
GRUB メニュー設定ファイルを作成:
 
   
 
# grub-mkconfig -o /boot/grub/grub.cfg
 
# grub-mkconfig -o /boot/grub/grub.cfg
 
マウントされている ESP に [[GRUB#インストール|GRUB をインストール]]:
 
 
 
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub --recheck
 
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub --recheck
   
  +
設定に問題がなければ、次の起動時に GRUB は {{ic|/boot}} パーティションのロックを解除するためのパスフレーズを要求するはずです。
If this finished without errors, GRUB should prompt for the passphrase to unlock the {{ic|/boot}} partition after the next reboot.
 
   
 
=== fstab と crypttab の設定 ===
 
=== fstab と crypttab の設定 ===
559行目: 695行目:
 
While GRUB asks for a passphrase to unlock the encrypted {{ic|/boot}} after above instructions, the partition unlock is not passed on to the initramfs. Hence, {{ic|/boot}} will not be available after the system has re-/booted, because the {{ic|encrypt}} hook only unlocks the system's root.
 
While GRUB asks for a passphrase to unlock the encrypted {{ic|/boot}} after above instructions, the partition unlock is not passed on to the initramfs. Hence, {{ic|/boot}} will not be available after the system has re-/booted, because the {{ic|encrypt}} hook only unlocks the system's root.
   
  +
インストール時に ''genfstab'' スクリプトを使用した場合、{{ic|/boot}} と {{ic|/boot/efi}} マウントポイントのエントリが含まれた {{ic|/etc/fstab}} が作成されています。しかしながらシステムはブートパーティションに生成されたデバイスマッパーを見つけることができません。デバイスマッパーを使えるようにするために、以下を [[Dm-crypt/システム設定#crypttab|crypttab]] に追加してください。例:
If you used the ''genfstab'' script during installation, it will have generated {{ic|/etc/fstab}} entries for the {{ic|/boot}} and {{ic|/boot/efi}} mount points already, but the system will fail to find the generated device mapper for the boot partition. To make it available, add it to [[Dm-crypt/システム設定#crypttab|crypttab]]. For example:
 
   
 
{{hc|/etc/crypttab|
 
{{hc|/etc/crypttab|
 
cryptboot /dev/sdaY none luks}}
 
cryptboot /dev/sdaY none luks}}
   
  +
上記を設定するとパスフレーズが二回要求されるようになります (GRUB と systemd ユニットでそれぞれ一回ずつ入力しなくてはなりません)。{{ic|/boot}} のロックを解除するエントリを重複させたくない場合、[[Dm-crypt/デバイスの暗号化#キーファイル]]の指示に従ってください:
will make the system ask for the passphrase again (i.e. you have to enter it twice at boot: once for GRUB and once for systemd init). To avoid the double entry for unlocking {{ic|/boot}}, follow the instructions at [[Dm-crypt/デバイスの暗号化#キーファイル]] to:
 
   
# Create a [[Dm-crypt/デバイスの暗号化#ファイルシステムにキーファイルを保存|randomtext keyfile]],
+
# [[Dm-crypt/デバイスの暗号化#ファイルシステムにキーファイルを保存|ランダムなテキストのキーファイル]]を作成
# Add the keyfile to the ({{ic|/dev/sdaY}}) [[Dm-crypt/デバイスの暗号化#キーファイルを使用するように LUKS を設定|boot partition's LUKS header]] and
+
# キーファイルを ({{ic|/dev/sdaY}}) [[Dm-crypt/デバイスの暗号化#キーファイルを使用するように LUKS を設定|ブートパーティションの LUKS ヘッダ]]に追加
# Check the {{ic|/etc/fstab}} entry and add the {{ic|/etc/crypttab}} line to [[Dm-crypt/デバイスの暗号化#起動時にロックを解除|unlock it automatically at boot]].
+
# {{ic|/etc/fstab}} のエントリを確認して[[Dm-crypt/デバイスの暗号化#起動時にロックを解除|起動時に自動的にロックが解除]]されるように {{ic|/etc/crypttab}} 行を追加
   
  +
何らかの理由でキーファイルを使って boot パーティションのロックを解除できなかった場合、systemd はフォールバックして解除するためのパスフレーズを要求します。パスフレーズが正しければ、起動に進みます。
If for some reason the keyfile fails to unlock the boot partition, systemd will fallback to ask for a passphrase to unlock and, in case that is correct, continue booting.
 
   
 
{{Tip|Optional post-installation steps:
 
{{Tip|Optional post-installation steps:
 
* It may be worth considering to add the GRUB bootloader to the ignore list of {{ic|/etc/pacman.conf}} in order to take particular control of when the bootloader (which includes its own encryption modules) is updated.
 
* It may be worth considering to add the GRUB bootloader to the ignore list of {{ic|/etc/pacman.conf}} in order to take particular control of when the bootloader (which includes its own encryption modules) is updated.
 
* If you want to encrypt the {{ic|/boot}} partition to protect against offline tampering threats, the [[Dm-crypt/特記事項#mkinitcpio-chkcryptoboot|mkinitcpio-chkcryptoboot]] hook has been contributed to help.}}
 
* If you want to encrypt the {{ic|/boot}} partition to protect against offline tampering threats, the [[Dm-crypt/特記事項#mkinitcpio-chkcryptoboot|mkinitcpio-chkcryptoboot]] hook has been contributed to help.}}
  +
  +
== Btrfs サブボリュームとスワップ ==
  +
  +
以下の例では [[Btrfs]] のサブボリュームを使って LUKS によるフルシステム暗号化を作成します。
  +
  +
UEFI を使っている場合、[[EFI システムパーティション]] (ESP) が必要です。{{ic|/boot}} は {{ic|/}} の中に保存して暗号化することができますが、ESP を暗号化することは不可能です。ここでは例として、ESP は {{ic|/dev/sda''Y''}} で {{ic|/boot/efi}} にマウントするとします。{{ic|/boot}} はシステムパーティション ({{ic|/dev/sda''X''}}) に保存します。
  +
  +
{{ic|/boot}} を暗号化された {{ic|/}} の中に配置するため、ブートローダーは [[GRUB]] を使用する必要があります。GRUB だけが {{ic|/boot}} を復号化するのに必要なモジュールをロードできるからです (例: {{ic|crypto.mod}}, {{ic|cryptodisk.mod}}, {{ic|luks.mod}}) [http://www.pavelkogan.com/2014/05/23/luks-full-disk-encryption/]。
  +
  +
さらに任意で暗号化した[[スワップ]]パーティションも作成します。
  +
  +
{{Warning|スワップパーティションのかわりとして[[スワップファイル]]を使うことはできません。データを消失する可能性があります。[[Btrfs#スワップファイル]]を見てください。}}
  +
  +
+--------------------------+--------------------------+--------------------------+
  +
|ESP |System partition |Swap partition |
  +
|'''un'''encrypted |LUKS-encrypted |plain-encrypted |
  +
| | | |
  +
|/boot/efi |/ | |
  +
|/dev/sda''Y'' |/dev/sda''X'' |/dev/sda''Z'' |
  +
|--------------------------+--------------------------+--------------------------+
  +
  +
=== ディスクの準備 ===
  +
  +
{{Note|LUKS を使用する場合に[[Btrfs#パーティショニング|パーティションしない Btrfs ディスク]]を使用することは不可能です。作成するパーティションがひとつだけの場合でも伝統的なパーティショニングが必須です。}}
  +
  +
パーティションを作成する前に、[[dm-crypt/ドライブの準備]]に書かれているようにディスクを完全消去するようにしてください。[[UEFI]] を使っている場合、適当なサイズの [[EFI システムパーティション]]を作成してください。後で {{ic|/boot/efi}} にマウントします。スワップパーティションを暗号化する場合、パーティションを作成してもスワップとして設定してはいけません。plain ''dm-crypt'' でパーティションを使用するためです。
  +
  +
必要なパーティションを作成してください。最低でも {{ic|/}} のパーティションが必要です (例: {{ic|/dev/sda''X''}})。[[パーティショニング]]の記事を見てください。
  +
  +
=== システムパーティションの準備 ===
  +
  +
==== LUKS コンテナの作成 ====
  +
  +
[[dm-crypt/デバイスの暗号化#LUKS モードでデバイスを暗号化]]に従って {{ic|/dev/sda''X''}} を LUKS で設定してください。設定する前に [[Dm-crypt/デバイスの暗号化#LUKS モードの暗号化オプション]]を見てください。
  +
  +
==== LUKS コンテナの解錠 ====
  +
  +
[[dm-crypt/デバイスの暗号化#デバイスマッパーで LUKS パーティションのロックを解除・マップ]]に従って LUKS コンテナを解錠してマッピングしてください。
  +
  +
==== マッピングされたデバイスのフォーマット ====
  +
  +
[[Btrfs#新しいファイルシステムを作成する]]に書かれているようにデバイスをフォーマットしてください。{{ic|''/dev/partition''}} はマップしたデバイスの名前 ({{ic|cryptroot}}) に置き換えてください。{{ic|/dev/sda''X''}} を使ってはいけません。
  +
  +
==== マッピングされたデバイスのマウント ====
  +
  +
最後に、フォーマットされたマップ済みデバイス ({{ic|/dev/mapper/cryptroot}}) を {{ic|/mnt}} に[[マウント]]してください。
  +
  +
{{Tip|{{ic|1=compress=lzo}} マウントオプションを使うと良いでしょう。詳しくは [[Btrfs#圧縮]]を見てください。}}
  +
  +
=== btrfs サブボリュームの作成 ===
  +
  +
==== レイアウト ====
  +
  +
[[Btrfs#サブボリューム|サブボリューム]]をパーティションのように使いますが、他の (ネストした) サブボリュームも作成します。以下は作成するサブボリュームの例を示しています:
  +
  +
subvolid=5 (/dev/sda''X'')
  +
|
  +
├── @ (mounted as /)
  +
| |
  +
| ├── /bin (directory)
  +
| |
  +
| ├── /home (mounted @home subvolume)
  +
| |
  +
| ├── /usr (directory)
  +
| |
  +
| ├── /.snapshots (mounted @snapshots subvolume)
  +
| |
  +
| ├── /var/cache/pacman/pkg (nested subvolume)
  +
| |
  +
| ├── ... (other directories and nested subvolumes)
  +
|
  +
├── @snapshots (mounted as /.snapshots)
  +
|
  +
├── @home (mounted as /home)
  +
|
  +
└── @... (additional subvolumes you wish to use as mount points)
  +
  +
このセクションでは [[Snapper]] を使うときに便利な [[Snapper#推奨ファイルシステムレイアウト]]に従います。[https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Layout Btrfs Wiki SysadminGuide#Layout] も読んでください。
  +
  +
==== トップレベルサブボリュームの作成 ====
  +
  +
マウントポイントとして使用するサブボリュームの名前には {{ic|@}} を前に付けます。{{ic|/}} にマウントするサブボリュームは {{ic|@}} とします。
  +
  +
[[Btrfs#サブボリュームを作成する]]に従って {{ic|/mnt/@}}, {{ic|/mnt/@snapshots}}, {{ic|/mnt/@home}} にサブボリュームを作成します。
  +
  +
他にマウントポイントとして使用したいサブボリュームも作成してください。
  +
  +
==== トップレベルサブボリュームのマウント ====
  +
  +
{{ic|/mnt}} のシステムパーティションをアンマウントしてください。
  +
  +
{{ic|/}} として使用する、新しく作成した {{ic|@}} サブボリュームを {{ic|1=subvol=}} マウントオプションを使って {{ic|/mnt}} にマウントします。マップしたデバイスの名前が {{ic|cryptroot}} なら、コマンドは以下のようになります:
  +
  +
# mount -o compress=lzo,subvol=@ /dev/mapper/cryptroot /mnt
  +
  +
詳しくは [[Btrfs#サブボリュームをマウントする]]を見てください。
  +
  +
他のサブボリュームを適切なマウントポイントにマウントしてください: {{ic|@home}} は {{ic|/mnt/home}} に、{{ic|@snapshots}} は {{ic|/mnt/.snapshots}} にマウントします。
  +
  +
==== ネストされたサブボリュームの作成 ====
  +
  +
{{ic|/}} のスナップショットが作成されるときに、スナップショットを作りたくないサブボリュームを作成してください。例えば、{{ic|/var/cache/pacman/pkg}} のスナップショットなどは不要でしょう。サブボリュームは {{ic|@}} サブボリュームの下にネストしますが、{{ic|@}} と同じレベルに作成することもできます。
  +
  +
{{ic|@}} サブボリュームは {{ic|/mnt}} にマウントするため、{{ic|/mnt/var/cache/pacman/pkg}} に[[Btrfs#サブボリュームを作成する|サブボリュームを作成]]する必要があります。先に親のディレクトリを作成してください。
  +
  +
他にも {{ic|/var/abs}}, {{ic|/var/tmp}}, {{ic|/srv}} などのディレクトリのサブボリュームを作成してください。
  +
  +
==== ESP のマウント ====
  +
  +
EFI システムパーティションを準備済みなら、マウントポイントを作成してマウントしてください。
  +
  +
{{Note|Btrfs のスナップショットは {{ic|/boot/efi}} を除外します (btrfs ファイルシステムではないため)。}}
  +
  +
[[インストールガイド#ベースシステムのインストール|pacstrap]] でインストールを行うときに、{{Pkg|btrfs-progs}} もインストールする必要があります。
  +
  +
=== mkinitcpio の設定 ===
  +
  +
==== キーファイルの作成 ====
  +
  +
GRUB で LUKS パーティションを解錠するために、initramfs にキーファイルを埋め込みます。[[Dm-crypt/デバイスの暗号化#キーファイルを initramfs に埋め込む]]に従って ''luksAddKey'' を実行する段階でキーを {{ic|/dev/sda''X''}} に追加してください。
  +
  +
==== mkinitcpio.conf の編集 ====
  +
  +
上記のようにキーファイルを作成して埋め込んだら、[[mkinitcpio|mkinitcpio.conf]] に {{ic|encrypt}} フックを追加してください。詳しくは [[Dm-crypt/システム設定#mkinitcpio]] を参照。設定後は initramfs を再生成する必要があります。
  +
  +
{{Tip|{{ic|1=BINARIES=(/usr/bin/btrfs)}} を {{ic|mkinitcpio.conf}} に追加すると良いでしょう。詳しくは [[Btrfs#ファイルシステム破損のリカバリ]] を見てください。}}
  +
  +
=== ブートローダーの設定 ===
  +
  +
[[GRUB]] を {{ic|/dev/sda}} にインストールします。そして [[GRUB#暗号化された /boot]]に書かれているように {{ic|/etc/default/grub}} を編集します (ルートパーティションと boot パーティションの両方の手順に従ってください)。最後に、GRUB の設定ファイルを生成します。
  +
  +
=== スワップの設定 ===
  +
  +
スワップを暗号化するためにパーティションを作成していた場合、ここで設定してください。[[Dm-crypt/スワップの暗号化]]の手順に従ってください。
  +
  +
設定を完了したら、[[インストールガイド#再起動|インストールガイド]]にしたがって通常通りにシステムの設定を続行してください。

2024年9月1日 (日) 10:42時点における最新版

以下は dm-crypt を使って完全なシステム暗号化を行う一般的なシナリオの例です。通常のインストール手順に加える必要がある変更を全て説明しています。必要なツールは全て インストールイメージ に入っています。

目次

概要

root ファイルシステムの暗号化については機能やパフォーマンスの点で dm-crypt が優れています。システムの root ファイルシステムが dm-crypt デバイス上にあれば、システム上のほとんど全てのファイルが暗号化されます。root 以外のファイルシステムを選択的に暗号化するのと異なり、root ファイルシステムの暗号化は様々な情報を隠匿できます。インストールされているプログラム、ユーザーアカウントのユーザー名、mlocate/var/log/ など媒介してデータ漏洩の恐れがあるファイルなど。さらに、root ファイルシステムを暗号化することでシステムの改竄が非常に難しくなります。ブートローダーやカーネルを除く全てが暗号化されるためです。

以上の利点をのぞく、それぞれのシナリオのメリットやデメリットなどの違いをまとめて、全てのシナリオを以下の表で説明します:

シナリオ メリット デメリット
#LUKS を使用するシンプルなパーティションレイアウト

LUKS で root を完全に暗号化するベーシックなセットアップ

  • パーティショニングと設定がシンプル
  • 柔軟性がない、暗号化するディスク領域をあらかじめ指定する必要がある
#LVM on LUKS

LUKS 暗号化パーティションの中で LVM を使うことでパーティショニングの柔軟性を確保

  • LVM を使ったことがあるのであれば簡単にパーティショニングできます
  • 一つのキーで全てのボリュームのロックを解除できます (ディスクからの復帰を設定するのが簡単)
  • ロックされていればボリュームのレイアウトが外から分かりません
  • ハイバネートを利用したいときの一番簡単な方法
  • LVM によってマッピングレイヤーとフックが追加されます
  • ボリュームごとに別のキーを設定する場合は不便です
#LUKS on LVM

LVM をセットアップした後に dm-crypt を使用

  • LVM を使うことで複数のディスクにまたがる暗号化ボリュームを作成できます
  • 非暗号化・暗号化ボリュームグループを簡単に混ぜられます
  • 複雑です。ボリュームを変更するときは暗号化マッパーも変更する必要があります
  • ボリュームごとに個別のキーが必要になります
  • ロックされていても LVM レイアウトは外から分かってしまいます
#ソフトウェア RAID と LUKS

RAID を設定した後に dm-crypt を使います。

  • LUKS on LVM と同じ。
  • LUKS on LVM と同じ。
#Plain dm-crypt

dm-crypt の plain モードを使用、LUKS ヘッダーや LUKS の複数のキーのオプションは使わない
このシナリオでは /boot とキーストレージに USB デバイスを使いますが、これは他のデバイスでも利用可能です

  • LUKS ヘッダに損害が発生した場合の耐障害性があります
  • 否認可能暗号が使える
  • SSD の問題を解決できます
  • 全ての暗号化パラメータに注意する必要があります
  • 暗号鍵はひとつだけで変更する方法はありません
#boot パーティションの暗号化 (GRUB)

GRUB ブートローダーを使って boot パーティションを暗号化する方法を説明します。
このシナリオでは ESP パーティションを使いますが、他のシナリオでも ESP を使うことができます。

  • ベースにするシナリオと同じメリット (このページの例では LVM on LUKS)
  • ブートローダーや ESP パーティションまで暗号化されます
  • ベースにするシナリオと同じデメリット (このページの例では LVM on LUKS)
  • 設定が複雑です
  • 他のブートローダーのサポートがありません
#Btrfs サブボリュームとスワップ

UEFI 環境で Btrfs のシステムパーティションと /boot ディレクトリを暗号化して、スワップパーティションを追加する方法。

上記全てのシナリオが外部からの脅威に対して十分な保護を約束しますが、共通の欠点も存在します。暗号化キーを持っているユーザーなら誰でもデバイスの全てを復号化して、他のユーザーのデータにもアクセスすることが可能という点です。これが問題だという場合は、ブロックデバイスの暗号化とスタックファイルシステムの暗号化と組み合わせて使用することで、両者の利点を取り入れることができます。保存データ暗号化を見て下さい。

他にも、スワップパーティションの暗号化を設定するべきかどうか考慮する必要があります。Dm-crypt/スワップの暗号化を見て下さい。

シナリオで使用されているパーティショニングの外観について Dm-crypt/ドライブの準備#パーティショニング も参照してください。

警告: どのシナリオでも、暗号化ボリュームで fsck などのファイルシステム修復ソフトウェアを直接使ってはいけません。ファイルを復号化する鍵を破壊してしまいます。復号化した後に使うようにしてください。

LUKS を使用するシンプルなパーティションレイアウト

この例ではシンプルなパーティションレイアウトによる dmcrypt+ LUKS のフルシステム暗号化を説明します:

+--------------------+--------------------------+--------------------------+
|Boot partition      |LUKS encrypted system     |Optional free space       |
|                    |partition                 |for additional partitions |
|/dev/sdaY           |/dev/sdaX                 |or swap to be setup later |
+--------------------+--------------------------+--------------------------+

最初のステップは Arch Linux のインストールイメージを起動した後すぐに実行します。

ディスクの準備

パーティションを作成する前に、Dm-crypt/ドライブの準備 で説明されているように、ディスクを完全に消去する必要性・方法を学んでください。

それから必要なパーティションを作成します。最低でも / が必要です (例: /dev/sdaX) と /boot (/dev/sdaY)。パーティショニングを参照。

boot 以外のパーティションの準備

以下のコマンドは暗号化された root パーティションを作成・マウントします。Dm-crypt/root 以外のファイルシステムの暗号化#パーティション に詳しく説明されている手順に該当します (ページタイトルと相違して、mkinitcpioブートローダーが正しく設定されていれば、root パーティションにも適用できます)。デフォルトになってない特定の暗号化オプションを使いたいときは (例: 暗号アルゴリズムや鍵長など)、最初のコマンドを実行する前に暗号化オプションを読んでください:

# cryptsetup -y -v luksFormat /dev/sdaX
# cryptsetup open /dev/sdaX cryptroot
# mkfs.ext4 /dev/mapper/cryptroot
# mount /dev/mapper/cryptroot /mnt

マッピングが問題ないかチェック:

# umount /mnt
# cryptsetup close cryptroot
# cryptsetup open /dev/sdaX cryptroot
# mount /dev/mapper/cryptroot /mnt

パーティションを分割した場合 (例: /home)、以上のコマンドを全てのパーティションに繰り返し実行してください。ただし /boot は別です。起動時に追加のパーティションを扱う方法は Dm-crypt/root 以外のファイルシステムの暗号化#ロック解除とマウントの自動化 を見て下さい。

それぞれのブロックデバイスには個々のパスフレーズが必要になります。起動時に、別々のパスフレーズを入力しないといけないので、不便とも言えます。crypttab を使うことでシステムパーティションにキーファイルを保存して使用することで別のパーティションを解錠することができます。方法は Dm-crypt/デバイスの暗号化#LUKS を使ってキーファイルでパーティションをフォーマット を見て下さい。

boot パーティションの準備

セットアップする必要があるのは暗号化されない /boot パーティションで、暗号化する root に必要となります。例えば、標準的な MBR/BIOS/boot パーティションの場合、以下を実行します:

# mkfs.ext4 /dev/sdaY
# mkdir /mnt/boot
# mount /dev/sdaY /mnt/boot

デバイスのマウント

インストールガイド#パーティションのマウントでは実際のパーティションではなく、マップされたデバイスをマウントしてください。もちろん、/boot は暗号化されていないので、直接マウントします。

mkinitcpio の設定

keyboard, keymap, encrypt フックを mkinitcpio.conf 内の filesystems の前に追加します:

/etc/mkinitcpio.conf
HOOKS=(... keyboard keymap block encrypt ... filesystems ...)

他に必要なフックについては dm-crypt/システム設定#mkinitcpio を見て下さい。

設定後はイメージを再生成してください:

# mkinitcpio -p linux

ブートローダーの設定

暗号化された root パーティションを起動するには、ブートローダーに以下のカーネルパラメータを設定する必要があります (<device-UUID>/dev/sdaX の UUID に置き換えてください。詳しくは永続的なブロックデバイスの命名を参照):

cryptdevice=UUID=<device-UUID>:cryptroot root=/dev/mapper/cryptroot

他に必要なパラメータについては Dm-crypt/システム設定#ブートローダー を見て下さい。

LVM on LUKS

LVM の上に暗号化パーティションをセットアップするのではなく、暗号化パーティションの上に LVM をセットアップするほうが簡単です。技術的にはひとつの大きな暗号化ブロックデバイスの中に LVM をセットアップすることになります。LVM はブロックデバイスを解錠して、ボリュームをスキャンしてマウントされるまでは透過的ではなくなります。

ディスクレイアウトの例:

+-----------------------------------------------------------------------+ +----------------+
| Logical volume1       | Logical volume2       | Logical volume3       | |                |
|/dev/mapper/MyVol-swap |/dev/mapper/MyVol-root |/dev/mapper/MyVol-home | | Boot partition |
|_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _| | (may be on     |
|                                                                       | | other device)  |
|                        LUKS encrypted partition                       | |                |
|                          /dev/sdaX                                    | | /dev/sdbY      |
+-----------------------------------------------------------------------+ +----------------+
警告: この方法では論理ボリュームを複数のディスクに跨がらせることはできません。後で変更することも不可能です。#複数のパーティションの encrypt フックを修正を見てください。
ヒント: Two variants of this setup:

ディスクの準備

パーティションを作成する前に、Dm-crypt/ドライブの準備 で説明されているように、ディスクを完全に消去する必要性・方法を学んでください。

GPTGRUB ブートローダーを使う時は、GRUB#BIOS システム で説明されているように BIOS Boot Partition を作成してください。

/boot にマウントするパーティションをタイプ 8300 で容量 100 MB 以上にして作成します。

タイプ 8E00 のパーティションを作成してください。後で暗号化コンテナを入れます。

"system" パーティションに LUKS 暗号化コンテナを作成してください。選んだパスワードを二回入力します。

# cryptsetup luksFormat /dev/sdaX

cryptsetup のオプションについては LUKS 暗号化のオプションを見て下さい。

コンテナを開いてください:

# cryptsetup open /dev/sdaX cryptolvm

復号化されたコンテナが /dev/mapper/cryptolvm から利用できるようになります。

論理ボリュームの準備

開いた LUKS コンテナの上に物理ボリュームを作成:

# pvcreate /dev/mapper/cryptolvm

MyVol という名前のボリュームグループを作成して、先に作成した物理ボリュームを追加:

# vgcreate MyVol /dev/mapper/cryptolvm

ボリュームグループに論理ボリュームを作成:

# lvcreate -L 8G MyVol -n swap
# lvcreate -L 15G MyVol -n root
# lvcreate -l 100%FREE MyVol -n home

論理ボリュームのファイルシステムをフォーマット:

# mkfs.ext4 /dev/mapper/MyVol-root
# mkfs.ext4 /dev/mapper/MyVol-home
# mkswap /dev/mapper/MyVol-swap

ファイルシステムをマウント:

# mount /dev/mapper/MyVol-root /mnt
# mkdir /mnt/home
# mount /dev/mapper/MyVol-home /mnt/home
# swapon /dev/mapper/MyVol-swap

boot パーティションの準備

ブートローダーは /boot ディレクトリから、カーネルや initramfs、あるいはブートローダーの設定ファイルをロードします。このディレクトリは暗号化されていない別のファイルシステム上に配置する必要があります。

/boot にするパーティションに Ext2 ファイルシステムを作成します。ブートローダーが読み込めるファイルシステムなら何でもかまいません。

# mkfs.ext2 /dev/sdbY

/mnt/boot ディレクトリを作成:

# mkdir /mnt/boot

パーティションを /mnt/boot にマウント:

# mount /dev/sdbY /mnt/boot

インストールの手順を mkinitcpio の設定まで進めてください。

mkinitcpio の設定

keyboard, encrypt, lvm2 フックを mkinitcpio.conf 内の filesystems の前に追加します:

/etc/mkinitcpio.conf
HOOKS=(... keyboard keymap block encrypt lvm2 ... filesystems ...)
ノート: lvm2 の最新実装ではフックの順番は特に意味を持ちません。

他に必要なフックについては dm-crypt/システム設定#mkinitcpio を見て下さい。

設定後はイメージを再生成してください:

# mkinitcpio -p linux

ブートローダーの設定

起動時に暗号化された root パーティションの暗号化が解除されるように、以下のカーネルパラメータをブートローダーで設定します (<device-UUID>/dev/sdaX の UUID に置き換えてください。詳しくは永続的なブロックデバイスの命名を参照):

cryptdevice=UUID=device-UUID:cryptolvm root=/dev/mapper/MyVol-root

詳しくは Dm-crypt/システム設定#ブートローダー を見て下さい。

LUKS on LVM

LVM 上で暗号化を利用するには、まず LVM ボリュームをセットアップして、それから暗号化パーティションのベースとして使うことになります。この方法では、暗号化パーティションと非暗号化パーティションのミックスが可能です。

ヒント: #LVM on LUKS とは違って、複数のディスクにまたがる論理ボリュームを通常通り使うことができます。

以下の短い例では LUKS on LVM 構成を作成して、/home パーティションでキーファイルを使用して /tmp/swap の一時的な暗号化ボリュームを混ぜ合わせます。機密データを含む一時データが再起動しても残ってしまう可能性がないため、セキュリティ的に優れています。論理ボリュームを複数のディスクにまたがるようにしたい場合、手順は Dm-crypt/特記事項#LVM を複数のディスクに拡張で説明しています。

ディスクの準備

パーティションスキーム:

+----------------+-----------------------------------------------------------------------+
|                | LUKS encrypted volume | LUKS encrypted volume | LUKS encrypted volume |
|                | /dev/mapper/swap      | /dev/mapper/root      | /dev/mapper/home      |
|                |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _|
|                | Logical volume1       | Logical volume2       | Logical volume3       |
|                |/dev/mapper/MyVol-swap |/dev/mapper/MyVol-root |/dev/mapper/MyVol-home |
|                |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _|
| Boot partition |                                                                       |
|   /dev/sda1    |                               /dev/sda2                               |
+----------------+-----------------------------------------------------------------------+

Dm-crypt/ドライブの準備#dm-crypt で空のディスクまたはパーティションを消去を見て /dev/sda2 をランダム化してください。

論理ボリュームの準備

# pvcreate /dev/sda2
# vgcreate MyVol /dev/sda2
# lvcreate -L 10G -n lvroot MyVol
# lvcreate -L 500M -n swap MyVol
# lvcreate -L 500M -n tmp MyVol
# lvcreate -l 100%FREE -n home MyVol
# cryptsetup luksFormat -c aes-xts-plain64 -s 512 /dev/mapper/MyVol-lvroot
# cryptsetup open /dev/mapper/MyVol-lvroot root
# mkfs.ext4 /dev/mapper/root
# mount /dev/mapper/root /mnt

この例では /home後で暗号化します。Arch-ISO から暗号化したルートにアクセスする必要がある場合、上記の open アクションで LVM を表示した後にアクセスできます。

boot パーティションの準備

# dd if=/dev/zero of=/dev/sda1 bs=1M status=progress
# mkfs.ext4 /dev/sda1
# mkdir /mnt/boot
# mount /dev/sda1 /mnt/boot

暗号化した LVM のパーティションを設定したら、インストールを行ってください: Arch Install Scripts

mkinitcpio の設定

encryptlvm2 フックを mkinitcpio.conf 内の filesystems の前に追加します:

/etc/mkinitcpio.conf
HOOKS=(... keyboard keymap block lvm2 encrypt ... filesystems ...)

他に必要なフックについては dm-crypt/システム設定#mkinitcpio を見て下さい。

設定ファイルを変更した後は次のコマンドを root 権限で実行してください:

# mkinitcpio -p linux

ブートローダーの設定

上の例の場合、ブートローダーの設定で root デバイスのカーネルオプションを以下のように変更します:

cryptdevice=/dev/mapper/MyVol-lvroot:root root=/dev/mapper/root

詳しくは Dm-crypt/システム設定#ブートローダー を見て下さい。

fstab と crypttab の設定

/etc/fstab
 /dev/mapper/root        /       ext4            defaults        0       1
 /dev/sda1               /boot   ext4            defaults        0       2
 /dev/mapper/tmp         /tmp    tmpfs           defaults        0       0
 /dev/mapper/swap        none    swap            sw              0       0

以下の crypttab オプションは再起動するたびに一時ファイルシステムを暗号化します:

/etc/crypttab
swap	/dev/mapper/MyVol-swap	/dev/urandom	swap,cipher=aes-xts-plain64,size=256
tmp	/dev/mapper/MyVol-tmp	/dev/urandom	tmp,cipher=aes-xts-plain64,size=256

論理ボリューム /home の暗号化

Since this scenario uses LVM as the primary and dm-crypt as secondary mapper, each encrypted logical volume requires its own encryption. Yet, unlike the temporary filesystems configured with volatile encryption above, the logical volume for /home should be persistent, of course. The following assumes you have rebooted into the installed system, otherwise you have to adjust paths. To safe on entering a second passphrase at boot for it, a keyfile is created:

# mkdir -m 700 /etc/luks-keys
# dd if=/dev/random of=/etc/luks-keys/home bs=1 count=256 status=progress

論理ボリュームは以下のように暗号化します:

# cryptsetup luksFormat -v -s 512 /dev/mapper/MyVol-home /etc/luks-keys/home
# cryptsetup -d /etc/luks-keys/home open /dev/mapper/MyVol-home home
# mkfs.ext4 /dev/mapper/home
# mount /dev/mapper/home /home

暗号化されたマウントは crypttab で設定します:

/etc/crypttab
home /dev/mapper/MyVol-home  /etc/luks-keys/home
/etc/fstab
/dev/mapper/home        /home  ext4        defaults        0      2

これでセットアップは完了です。

If you want to expand the logical volume for /home (or any other volume) at a later point, it is important to note that the LUKS encrypted part has to be resized as well. For a procedure see Dm-crypt/特記事項#LVM を複数のディスクに拡張.

ソフトウェア RAID と LUKS

以下の例では同じ容量の SSD を2台とストレージ用の HDD を搭載したワークステーション向けノートパソコンの設定を元にしています。最終的には LUKS ベースの (/boot を含む) 完全ディスク暗号化を実現し、SSD は RAID0 アレイにして、起動時に GRUB にパスフレーズを指定した後にキーファイルで暗号化を解除します。SSD の TRIM のサポートは有効にしますが、Dm-crypt/特記事項#ソリッドステートドライブ (SSD) の Discard/TRIM のサポートも読むと良いでしょう。

非常にシンプルなパーティションスキームを使用し、RAID ストレージは全て / にマウントして (/boot パーティションは分割しません)、HDD は /mnt/data にマウントします。システムは BIOS モードで起動し GPT でパーティショニングします。

定期的にバックアップを取ることが非常に重要です。SSD のどちらかが故障すると、RAID アレイに保存されていたデータは復元できなくなります。耐障害性が大事なのであれば RAID レベルを慎重に選択してください。

The encryption is not deniable in this setup.

For the sake of the instructions below, the following block devices are used:

/dev/sda = first SSD
/dev/sdb = second SSD
/dev/sdc = HDD

Be sure to substitue them with the appropriate device designations for your setup, as they may be different.

ディスクの準備

パーティションを作成する前に、Dm-crypt/ドライブの準備に書かれているようにディスクの完全消去について考慮してください。

GRUB ブートローダーを GPT で使用する場合、GRUB#BIOS システムに書かれているように BIOS Boot Partition を作成する必要があります。例として /dev/sda1 に "BIOS boot" の 1M パーティションを作成して、残りの空き容量は全て "Linux RAID" として /dev/sda2 にパーティションします。

/dev/sda にパーティションを作成したら以下のコマンドを使って /dev/sdb に複製:

# sfdisk -d /dev/sda > sda.dump
# sfdisk /dev/sdb < sda.dump

The HDD is prepared with a single Linux partition covering the whole drive at /dev/sdc1.

RAID アレイの構築

Create the RAID array for the SSDs. This example utilizes RAID0, you may wish to substitute a different level based on your preferences or requirements.

# mdadm --create --verbose --level=0 --metadata=1.2 --raid-devices=2 /dev/md0 /dev/sda2 /dev/sdb2

ブロックデバイスの準備

Dm-crypt/ドライブの準備に書かれているように /dev/zero を使ってデバイスを消去してからランダムなキーでデバイスを暗号化してください。もしくは dd/dev/random/dev/urandom を使うこともできます:

# cryptsetup open --type plain /dev/md0 container --key-file /dev/random
# dd if=/dev/zero of=/dev/mapper/container bs=1M status=progress
# cryptsetup close container

And repeat above for the HDD (/dev/sdc1 in this example).

Set up encryption for /dev/md0:

# cryptsetup -y -v luksFormat -c aes-xts-plain64 -s 512 /dev/md0
# cryptsetup open /dev/md0 cryptroot
# mkfs.ext4 /dev/mapper/cryptroot
# mount /dev/mapper/cryptroot /mnt

And repeat for the HDD:

# cryptsetup -y -v luksFormat -c aes-xts-plain64 -s 512 /dev/sdc1
# cryptsetup open /dev/sdc1 cryptdata
# mkfs.ext4 /dev/mapper/cryptdata
# mkdir -p /mnt/mnt/data
# mount /dev/mapper/cryptdata /mnt/mnt/data

ブートローダーの設定

Configure GRUB for the encrypted system by editing /etc/default/grub with the following. Note that the :allow-discards option enables TRIM support on the SSDs, if you do not wish to use it you should omit this.

GRUB_CMDLINE_LINUX="cryptdevice=/dev/md0:cryptroot:allow-discards root=/dev/mapper/cryptroot"
GRUB_ENABLE_CRYPTODISK=y

詳しくは Dm-crypt/システム設定#ブートローダーGRUB#暗号化された /bootを見てください。

Complete the GRUB install to both SSDs (in reality, installing only to /dev/sda will work).

# grub-install --target=i386-pc /dev/sda
# grub-install --target=i386-pc /dev/sdb
# grub-mkconfig -o /boot/grub/grub.cfg

キーファイルの作成

システムの起動時にパスフレーズを二回入力する手間を省く設定です。キーファイルを作成して initramfs イメージに追加することで encrypt フックでルートデバイスを解除できるようにします。詳しくは dm-crypt/デバイスの暗号化#キーファイルを initramfs に埋め込む を参照。

  • キーファイルを作成して /dev/md0 にキーを追加。
  • HDD (/dev/sdc1) のキーファイルを作成することで起動時に解錠が可能です。上記で作成したパスフレーズは残すことで後で必要になったときに復旧が簡単です。/etc/crypttab を編集して起動時に HDD を復号化してください。詳しくは dm-crypt/デバイスの暗号化#起動時にロックを解除を参照。

システムの設定

/etc/fstab を編集して cryptroot と cryptdata ブロックデバイスをマウントしてください。TRIM のサポートを有効にしなかった場合、discard マウントオプションは削除してください:

/dev/mapper/cryptroot  /           ext4    rw,noatime,discard  0   1 
/dev/mapper/cryptdata  /mnt/data   ext4    defaults            0   2  

RAID の設定を保存:

# mdadm --detail --scan > /etc/mdadm.conf 

mkinitcpio.conf を編集してキーファイルを適切なフックを追加してください:

FILES=(/crypto_keyfile.bin)
HOOKS=( ... keyboard keymap block mdadm_udev encrypt filesystems ... )

詳しくは dm-crypt/システム設定#mkinitcpio を参照。

Plain dm-crypt

Contrary to LUKS, dm-crypt plain mode does not require a header on the encrypted device: this scenario exploits this feature to set up a system on an unpartitioned, encrypted disk that will be indistinguishable from a disk filled with random data, which could allow deniable encryption. See also wikipedia:Disk encryption#Full disk encryption.

Note that if full-disk encryption is not required, the methods using LUKS described in the sections above are better options for both system encryption and encrypted partitions. LUKS features like key management with multiple passphrases/key-files or re-encrypting a device in-place are unavailable with plain mode.

Plain dm-crypt encryption can be more resilient to damage than LUKS encrypted disks, because it does not rely on an encryption master-key which can be a single-point of failure if damaged. However, using plain mode also requires more manual configuration of encryption options to achieve the same cryptographic strength. See also ディスク暗号化#暗号メタデータ. Using plain mode could also be considered if concerned with the problems explained in Dm-crypt/特記事項#ソリッドステートドライブ (SSD) の Discard/TRIM のサポート.

ヒント: If headerless encryption is your goal but you are unsure about the lack of key-derivation with plain mode, then two alternatives are:
  • dm-crypt LUKS mode by using the cryptsetup --header option. It cannot be used with the standard encrypt hook, but the hook may be modified.
  • tcplay which offers headerless encryption but with the PBKDF2 function.

このシナリオでは2つの USB スティックを使います:

  • one for the boot device, which also allows storing the options required to open/unlock the plain encrypted device in the boot loader configuration, since typing them on each boot would be error prone;
  • another for the encryption key file, assuming it stored as raw bits so that to the eyes of an unaware attacker who might get the usbkey the encryption key will appear as random data instead of being visible as a normal file. See also Wikipedia:Security through obscurity, follow Dm-crypt/デバイスの暗号化#キーファイル to prepare the keyfile.
|--------------------+------------------+--------------------+ +---------------+ +---------------+
|Volume 1:           |Volume 2:         |Volume 3:           | |Boot device    | |Encryption key |
|                    |                  |                    | |               | |file storage   |
|root                |swap              |home                | |/boot          | |(unpartitioned |
|                    |                  |                    | |               | |in example)    |
|/dev/store/root     |/dev/store/swap   |/dev/store/home     | |/dev/sdY1      | |/dev/sdZ       |
|--------------------+------------------+--------------------| |---------------| |---------------|
|disk drive /dev/sdaX encrypted using plain mode and LVM     | |USB stick 1    | |USB stick 2    |
+------------------------------------------------------------+ +---------------+ +---------------+
ヒント:
  • It is also possible to use a single usb key by copying the keyfile to the initram directly. An example keyfile /etc/keyfile gets copied to the initram image by setting FILES=(/etc/keyfile) in /etc/mkinitcpio.conf. The way to instruct the encrypt hook to read the keyfile in the initram image is using rootfs: prefix before the filename, e.g. cryptkey=rootfs:/etc/keyfile.
  • エントロピーが十分なパスフレーズを使用するという選択肢も存在します。

ディスクの準備

It is vital that the mapped device is filled with data. In particular this applies to the scenario usecase we apply here.

Dm-crypt/ドライブの準備Dm-crypt/ドライブの準備#dm-crypt 固有の方法 を見て下さい。

boot 以外のパーティションの準備

詳しくは Dm-crypt/デバイスの暗号化#plain モードの暗号化オプション を参照。

Using the device /dev/sdX, with the twofish-xts cipher with a 512 bit key size and using a keyfile we have the following options for this scenario:

# cryptsetup --hash=sha512 --cipher=twofish-xts-plain64 --offset=0 --key-file=/dev/sdZ --key-size=512 open --type=plain /dev/sdX enc

Unlike encrypting with LUKS, the above command must be executed in full whenever the mapping needs to be re-established, so it is important to remember the cipher, hash and key file details.

We can now check a mapping entry has been made for /dev/mapper/enc:

# fdisk -l

Next, we setup LVM logical volumes on the mapped device, see LVM#Arch Linux を LVM にインストールする for further details:

# pvcreate /dev/mapper/enc
# vgcreate store /dev/mapper/enc
# lvcreate -L 20G store -n root
# lvcreate -L 10G store -n swap
# lvcreate -l +100%FREE store -n home

論理ボリュームをフォーマットしてマウントします。詳しくはファイルシステム#デバイスのフォーマットを見て下さい

# mkfs.ext4 /dev/store/root
# mkfs.ext4 /dev/store/home
# mount /dev/store/root /mnt
# mkdir /mnt/home
# mount /dev/store/home /mnt/home
# mkswap /dev/store/swap
# swapon /dev/store/swap

boot パーティションの準備

必要であれば、USB スティックの vfat パーティションに /boot パーティションをインストールできます。ただし、手動のパーティションが必要な場合、小さな 200MB のパーティションで十分です。お好きな パーティションツールを使ってパーティションを作成してください。

vfat でフォーマットされていない場合、/boot パーティションのフラッシュメモリを保護するため非ジャーナリングファイルシステムを選択します:

# mkfs.ext2 /dev/sdY1
# mkdir /mnt/boot
# mount /dev/sdY1 /mnt/boot

mkinitcpio の設定

keyboard, encrypt, lvm2 フックを mkinitcpio.conf 内の filesystems の前に追加します:

etc/mkinitcpio.conf
HOOKS=(... keyboard keymap block encrypt lvm2 ... filesystems ...)

他に必要なフックについては dm-crypt/システム設定#mkinitcpio を見て下さい。

設定後はイメージを再生成してください:

# mkinitcpio -p linux

ブートローダーの設定

暗号化した root パーティションを起動するには、以下のカーネルパラメータをブートローダーで設定する必要があります:

cryptdevice=/dev/sdX:enc cryptkey=/dev/sdZ:0:512 crypto=sha512:twofish-xts-plain64:512:0:
ノート: encrypt の代わりに sd-encrypt を使用する場合、cryptdevice の代わりに luks.uuid を使ってください。詳しくは systemd-cryptsetup-generator(8) を参照。

他に必要なパラメータについては Dm-crypt/システム設定#ブートローダー を見て下さい。

ヒント: GRUB を使用する場合、次のコマンドを使うことで /boot パーティションと同じ USB にインストールすることができます:
# grub-install --recheck /dev/sdY

インストール後

起動後に USB スティックは取り除けます。/boot パーティションは通常は必要ないため、noauto オプションを /etc/fstab に追加できます:

/etc/fstab
# /dev/sdYn
/dev/sdYn /boot ext2 noauto,rw,noatime 0 2

ただしカーネルやブートローダーのアップグレードが必要なときは、/boot パーティションがマウントされていなければなりません。fstab に既にエントリが存在すれば、次のコマンドでマウントできます:

# mount /boot

boot パーティションの暗号化 (GRUB)

このセットアップでは #LVM on LUKS セクションと同じパーティションレイアウト・設定でシステムのルートパーティションを設定しますが、違いが2つあります:

  1. セットアップは UEFI 環境で行います。
  2. GRUB ブートローダーの特殊機能を使用してブートパーティション /boot も暗号化します。GRUB#暗号化された /bootを見てください。

ディスクレイアウトは以下のようになります:

+---------------+----------------+----------------+----------------+----------------+
|ESP partition: |Boot partition: |Volume 1:       |Volume 2:       |Volume 3:       |
|               |                |                |                |                |
|/boot/efi      |/boot           |root            |swap            |home            |
|               |                |                |                |                |
|               |                |/dev/store/root |/dev/store/swap |/dev/store/home |
|/dev/sdaX      |/dev/sdaY       +----------------+----------------+----------------+
|unencrypted    |LUKS encrypted  |/dev/sdaZ encrypted using LVM on LUKS             |
+---------------+----------------+--------------------------------------------------+
ヒント: All scenarios are intended as examples. It is, of course, possible to apply both of the two above distinct installation steps with the other scenarios as well. See also the variants linked in #LVM on LUKS.
ノート: cryptbootAUR パッケージの cryptboot スクリプトを使うことで暗号化された boot の管理 (マウント・アンマウント・パッケージのアップグレード) を簡単にできます。また、UEFI Secure Boot を使用して 悪意あるメイド 攻撃から身を守ることができます。詳しくは cryptboot のプロジェクトページ を参照。

ディスクの準備

パーティションを作成する前に、Dm-crypt/ドライブの準備に書かれているように、ディスクを完全に消去するようにしてください。

EFI System Partition (ESP) を適当な容量で作成してください。後で /boot/efi にマウントします。

/boot にマウントするパーティションをタイプ 8300 の容量 100 MB 以上で作成します。

ヒント: BIOS/GPTGRUB ブートローダーを使用する場合は、GRUB#BIOS システムに書かれているように ESP の代わりに BIOS Boot Partition を作成してください。

タイプ 8E00 のパーティションを作成してください。後で暗号化コンテナを入れます。

"system" パーティションに LUKS 暗号化コンテナを作成してください。

# cryptsetup luksFormat /dev/sdaZ

上記のコマンドの cryptsetup で使えるオプションについては LUKS 暗号化オプションを参照してください。

パーティションレイアウトは以下のようになります:

# gdisk /dev/sda 
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         1050623   512.0 MiB   EF00  EFI System
   2         1050624         1460223   200.0 MiB   8300  Linux filesystem
   3         1460224        41943006   19.3 GiB    8E00  Linux LVM

コンテナを開く:

# cryptsetup open --type luks /dev/sdaZ lvm

復号化されたコンテナは /dev/mapper/lvm から利用できます。

論理ボリュームの準備

The LVM logical volumes of this example follow the exact layout as the previous scenario. Therefore, please follow Preparing the logical volumes above or adjust as required.

boot パーティションの準備

ブートローダーは /boot ディレクトリからカーネルや initramfs、あるいはブートローダーの設定ファイルをロードします。

まず、ファイルを配置・インストールするための LUKS コンテナを作成:

# cryptsetup luksFormat /dev/sdaY

次に、コンテナをオープン:

# cryptsetup open /dev/sdaY cryptboot 

/boot にするパーティションにファイルシステムを作成。ブートローダーから読み込めるならどんなファイルシステムでもかまいません:

# mkfs.ext2 /dev/mapper/cryptboot

/mnt/boot ディレクトリを作成:

# mkdir /mnt/boot

パーティションを /mnt/boot にマウント:

# mount /dev/mapper/cryptboot /mnt/boot

grub-install から利用できるように ESP のマウントポイントを /boot/efi に作成してマウント:

# mkdir /mnt/boot/efi
# mount /dev/sdaX /mnt/boot/efi

この時点で、/mnt の中に以下のパーティションと論理ボリュームが作成されているはずです:

$ lsblk
NAME              	  MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                       8:0      0   200G  0 disk  
├─sda1                    8:1      0   512M  0 part  /boot/efi
├─sda2                    8:2      0   200M  0 part  
│ └─boot		  254:0    0   198M  0 crypt /boot
└─sda3                    8:3      0   100G  0 part  
  └─lvm                   254:1    0   100G  0 crypt 
    ├─MyStorage-swapvol   254:2    0     8G  0 lvm   [SWAP]
    ├─MyStorage-rootvol   254:3    0    15G  0 lvm   /
    └─MyStorage-homevol   254:4    0    77G  0 lvm   /home

インストールの手順を mkinitcpio の設定まで進めてください。

mkinitcpio の設定

mkinitcpio.confkeyboard, encrypt, lvm2 フックを追加:

/etc/mkinitcpio.conf
HOOKS=(... keyboard keymap block encrypt lvm2 ... filesystems ...)

詳細や必要な他のフックについては dm-crypt/システム設定#mkinitcpio を参照。


設定後はイメージを再生成してください:

# mkinitcpio -p linux

ブートローダーの設定

起動時に LUKS で暗号化された /boot パーティションを認識して暗号化された root パーティションの暗号化が解除されるように GRUB を設定:

/etc/default/grub
GRUB_CMDLINE_LINUX="... cryptdevice=UUID=<device-UUID>:lvm ..."
GRUB_ENABLE_CRYPTODISK=y

詳しくは Dm-crypt/システム設定#ブートローダーGRUB#暗号化された /bootを参照。<device-UUID>/dev/sdaZ (ルートファイルシステムが存在する LVM が含まれているパーティション) の UUID に置き換えてください。詳しくは永続的なブロックデバイスの命名を参照。

GRUB の設定ファイルを作成して、マウントされている ESP に GRUB をインストール:

# grub-mkconfig -o /boot/grub/grub.cfg
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub --recheck

設定に問題がなければ、次の起動時に GRUB は /boot パーティションのロックを解除するためのパスフレーズを要求するはずです。

fstab と crypttab の設定

This section deals with extra configuration to let the system mount the encrypted /boot.

While GRUB asks for a passphrase to unlock the encrypted /boot after above instructions, the partition unlock is not passed on to the initramfs. Hence, /boot will not be available after the system has re-/booted, because the encrypt hook only unlocks the system's root.

インストール時に genfstab スクリプトを使用した場合、/boot/boot/efi マウントポイントのエントリが含まれた /etc/fstab が作成されています。しかしながらシステムはブートパーティションに生成されたデバイスマッパーを見つけることができません。デバイスマッパーを使えるようにするために、以下を crypttab に追加してください。例:

/etc/crypttab
cryptboot  /dev/sdaY      none        luks

上記を設定するとパスフレーズが二回要求されるようになります (GRUB と systemd ユニットでそれぞれ一回ずつ入力しなくてはなりません)。/boot のロックを解除するエントリを重複させたくない場合、Dm-crypt/デバイスの暗号化#キーファイルの指示に従ってください:

  1. ランダムなテキストのキーファイルを作成
  2. キーファイルを (/dev/sdaY) ブートパーティションの LUKS ヘッダに追加
  3. /etc/fstab のエントリを確認して起動時に自動的にロックが解除されるように /etc/crypttab 行を追加

何らかの理由でキーファイルを使って boot パーティションのロックを解除できなかった場合、systemd はフォールバックして解除するためのパスフレーズを要求します。パスフレーズが正しければ、起動に進みます。

ヒント: Optional post-installation steps:
  • It may be worth considering to add the GRUB bootloader to the ignore list of /etc/pacman.conf in order to take particular control of when the bootloader (which includes its own encryption modules) is updated.
  • If you want to encrypt the /boot partition to protect against offline tampering threats, the mkinitcpio-chkcryptoboot hook has been contributed to help.

Btrfs サブボリュームとスワップ

以下の例では Btrfs のサブボリュームを使って LUKS によるフルシステム暗号化を作成します。

UEFI を使っている場合、EFI システムパーティション (ESP) が必要です。/boot/ の中に保存して暗号化することができますが、ESP を暗号化することは不可能です。ここでは例として、ESP は /dev/sdaY/boot/efi にマウントするとします。/boot はシステムパーティション (/dev/sdaX) に保存します。

/boot を暗号化された / の中に配置するため、ブートローダーは GRUB を使用する必要があります。GRUB だけが /boot を復号化するのに必要なモジュールをロードできるからです (例: crypto.mod, cryptodisk.mod, luks.mod) [1]

さらに任意で暗号化したスワップパーティションも作成します。

警告: スワップパーティションのかわりとしてスワップファイルを使うことはできません。データを消失する可能性があります。Btrfs#スワップファイルを見てください。
+--------------------------+--------------------------+--------------------------+
|ESP                       |System partition          |Swap partition            |
|unencrypted               |LUKS-encrypted            |plain-encrypted           |
|                          |                          |                          |
|/boot/efi                 |/                         |                          |
|/dev/sdaY                 |/dev/sdaX                 |/dev/sdaZ                 |
|--------------------------+--------------------------+--------------------------+

ディスクの準備

ノート: LUKS を使用する場合にパーティションしない Btrfs ディスクを使用することは不可能です。作成するパーティションがひとつだけの場合でも伝統的なパーティショニングが必須です。

パーティションを作成する前に、dm-crypt/ドライブの準備に書かれているようにディスクを完全消去するようにしてください。UEFI を使っている場合、適当なサイズの EFI システムパーティションを作成してください。後で /boot/efi にマウントします。スワップパーティションを暗号化する場合、パーティションを作成してもスワップとして設定してはいけません。plain dm-crypt でパーティションを使用するためです。

必要なパーティションを作成してください。最低でも / のパーティションが必要です (例: /dev/sdaX)。パーティショニングの記事を見てください。

システムパーティションの準備

LUKS コンテナの作成

dm-crypt/デバイスの暗号化#LUKS モードでデバイスを暗号化に従って /dev/sdaX を LUKS で設定してください。設定する前に Dm-crypt/デバイスの暗号化#LUKS モードの暗号化オプションを見てください。

LUKS コンテナの解錠

dm-crypt/デバイスの暗号化#デバイスマッパーで LUKS パーティションのロックを解除・マップに従って LUKS コンテナを解錠してマッピングしてください。

マッピングされたデバイスのフォーマット

Btrfs#新しいファイルシステムを作成するに書かれているようにデバイスをフォーマットしてください。/dev/partition はマップしたデバイスの名前 (cryptroot) に置き換えてください。/dev/sdaX を使ってはいけません。

マッピングされたデバイスのマウント

最後に、フォーマットされたマップ済みデバイス (/dev/mapper/cryptroot) を /mntマウントしてください。

ヒント: compress=lzo マウントオプションを使うと良いでしょう。詳しくは Btrfs#圧縮を見てください。

btrfs サブボリュームの作成

レイアウト

サブボリュームをパーティションのように使いますが、他の (ネストした) サブボリュームも作成します。以下は作成するサブボリュームの例を示しています:

subvolid=5 (/dev/sdaX)
   |
   ├── @ (mounted as /)
   |       |
   |       ├── /bin (directory)
   |       |
   |       ├── /home (mounted @home subvolume)
   |       |
   |       ├── /usr (directory)
   |       |
   |       ├── /.snapshots (mounted @snapshots subvolume)
   |       |
   |       ├── /var/cache/pacman/pkg (nested subvolume)
   |       |
   |       ├── ... (other directories and nested subvolumes)
   |
   ├── @snapshots (mounted as /.snapshots)
   |
   ├── @home (mounted as /home)
   |
   └── @... (additional subvolumes you wish to use as mount points)

このセクションでは Snapper を使うときに便利な Snapper#推奨ファイルシステムレイアウトに従います。Btrfs Wiki SysadminGuide#Layout も読んでください。

トップレベルサブボリュームの作成

マウントポイントとして使用するサブボリュームの名前には @ を前に付けます。/ にマウントするサブボリュームは @ とします。

Btrfs#サブボリュームを作成するに従って /mnt/@, /mnt/@snapshots, /mnt/@home にサブボリュームを作成します。

他にマウントポイントとして使用したいサブボリュームも作成してください。

トップレベルサブボリュームのマウント

/mnt のシステムパーティションをアンマウントしてください。

/ として使用する、新しく作成した @ サブボリュームを subvol= マウントオプションを使って /mnt にマウントします。マップしたデバイスの名前が cryptroot なら、コマンドは以下のようになります:

# mount -o compress=lzo,subvol=@ /dev/mapper/cryptroot /mnt

詳しくは Btrfs#サブボリュームをマウントするを見てください。

他のサブボリュームを適切なマウントポイントにマウントしてください: @home/mnt/home に、@snapshots/mnt/.snapshots にマウントします。

ネストされたサブボリュームの作成

/ のスナップショットが作成されるときに、スナップショットを作りたくないサブボリュームを作成してください。例えば、/var/cache/pacman/pkg のスナップショットなどは不要でしょう。サブボリュームは @ サブボリュームの下にネストしますが、@ と同じレベルに作成することもできます。

@ サブボリュームは /mnt にマウントするため、/mnt/var/cache/pacman/pkgサブボリュームを作成する必要があります。先に親のディレクトリを作成してください。

他にも /var/abs, /var/tmp, /srv などのディレクトリのサブボリュームを作成してください。

ESP のマウント

EFI システムパーティションを準備済みなら、マウントポイントを作成してマウントしてください。

ノート: Btrfs のスナップショットは /boot/efi を除外します (btrfs ファイルシステムではないため)。

pacstrap でインストールを行うときに、btrfs-progs もインストールする必要があります。

mkinitcpio の設定

キーファイルの作成

GRUB で LUKS パーティションを解錠するために、initramfs にキーファイルを埋め込みます。Dm-crypt/デバイスの暗号化#キーファイルを initramfs に埋め込むに従って luksAddKey を実行する段階でキーを /dev/sdaX に追加してください。

mkinitcpio.conf の編集

上記のようにキーファイルを作成して埋め込んだら、mkinitcpio.confencrypt フックを追加してください。詳しくは Dm-crypt/システム設定#mkinitcpio を参照。設定後は initramfs を再生成する必要があります。

ヒント: BINARIES=(/usr/bin/btrfs)mkinitcpio.conf に追加すると良いでしょう。詳しくは Btrfs#ファイルシステム破損のリカバリ を見てください。

ブートローダーの設定

GRUB/dev/sda にインストールします。そして GRUB#暗号化された /bootに書かれているように /etc/default/grub を編集します (ルートパーティションと boot パーティションの両方の手順に従ってください)。最後に、GRUB の設定ファイルを生成します。

スワップの設定

スワップを暗号化するためにパーティションを作成していた場合、ここで設定してください。Dm-crypt/スワップの暗号化の手順に従ってください。

設定を完了したら、インストールガイドにしたがって通常通りにシステムの設定を続行してください。