dm-crypt/システム全体の暗号化
dm-crypt に戻る。
以下は dm-crypt を使って完全なシステム暗号化を行う一般的なシナリオの例です。通常のインストール手順に加える必要がある変更を全て説明しています。必要なツールは全て インストールイメージ に入っています。
目次
概要
root ファイルシステムの暗号化については機能やパフォーマンスの点で dm-crypt が優れています。システムの root ファイルシステムが dm-crypt デバイス上にあれば、システム上のほとんど全てのファイルが暗号化されます。root 以外のファイルシステムを選択的に暗号化するのと異なり、root ファイルシステムの暗号化は様々な情報を隠匿できます。インストールされているプログラム、ユーザーアカウントのユーザー名、mlocate や /var/log/
など媒介してデータ漏洩の恐れがあるファイルなど。さらに、root ファイルシステムを暗号化することでシステムの改竄が非常に難しくなります。ブートローダーやカーネルを除く全てが暗号化されるためです。
以上の利点をのぞく、それぞれのシナリオのメリットやデメリットなどの違いをまとめて、全てのシナリオを以下の表で説明します:
シナリオ | メリット | デメリット |
---|---|---|
#LUKS を使用するシンプルなパーティションレイアウト
LUKS で root を完全に暗号化するベーシックなセットアップ |
|
|
#LVM on LUKS
LUKS 暗号化パーティションの中で LVM を使うことでパーティショニングの柔軟性を確保 |
|
|
#LUKS on LVM
LVM をセットアップした後に dm-crypt を使用 |
|
|
#ソフトウェア RAID と LUKS
RAID を設定した後に dm-crypt を使います。 |
|
|
#Plain dm-crypt
dm-crypt の plain モードを使用、LUKS ヘッダーや LUKS の複数のキーのオプションは使わない |
| |
#boot パーティションの暗号化 (GRUB)
GRUB ブートローダーを使って boot パーティションを暗号化する方法を説明します。 |
|
|
#Btrfs サブボリュームとスワップ
UEFI 環境で Btrfs のシステムパーティションと |
|
|
上記全てのシナリオが外部からの脅威に対して十分な保護を約束しますが、共通の欠点も存在します。暗号化キーを持っているユーザーなら誰でもデバイスの全てを復号化して、他のユーザーのデータにもアクセスすることが可能という点です。これが問題だという場合は、ブロックデバイスの暗号化とスタックファイルシステムの暗号化と組み合わせて使用することで、両者の利点を取り入れることができます。ディスク暗号化を見て下さい。
他にも、スワップパーティションの暗号化を設定するべきかどうか考慮する必要があります。Dm-crypt/スワップの暗号化を見て下さい。
シナリオで使用されているパーティショニングの外観について Dm-crypt/ドライブの準備#パーティショニング も参照してください。
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
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 | | | |/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 | +-----------------------------------------------------------------------+ +----------------+
ディスクの準備
パーティションを作成する前に、Dm-crypt/ドライブの準備 で説明されているように、ディスクを完全に消去する必要性・方法を学んでください。
GPT で GRUB ブートローダーを使う時は、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 ...)
他に必要なフックについては 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 ボリュームをセットアップして、それから暗号化パーティションのベースとして使うことになります。この方法では、暗号化パーティションと非暗号化パーティションのミックスが可能です。
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 /tmp
and /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 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
Note that /home
will be encrypted later in this example. Further, note that if you ever have to access the encrypted root from the Arch-ISO, the above open
action will allow you to after the LVM shows up.
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 の設定
encrypt
と lvm2
フックを 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
これでセットアップは完了です。 and setup is done.
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
や {{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 (/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/defaults/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 のサポート.
このシナリオでは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 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:
他に必要なパラメータについては Dm-crypt/システム設定#ブートローダー を見て下さい。
インストール後
起動後に 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つあります:
- セットアップは UEFI 環境で行います。
- 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 | +---------------+----------------+--------------------------------------------------+
ディスクの準備
パーティションを作成する前に、Dm-crypt/ドライブの準備に書かれているように、ディスクを完全に消去するようにしてください。
EFI System Partition (ESP) を適当な容量で作成してください。後で /boot/efi
にマウントします。
/boot
にマウントするパーティションをタイプ 8300
の容量 100 MB 以上で作成します。
タイプ 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.conf に keyboard
, 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/デバイスの暗号化#キーファイルの指示に従ってください:
- ランダムなテキストのキーファイルを作成
- キーファイルを (
/dev/sdaY
) ブートパーティションの LUKS ヘッダに追加 /etc/fstab
のエントリを確認して起動時に自動的にロックが解除されるように/etc/crypttab
行を追加
何らかの理由でキーファイルを使って boot パーティションのロックを解除できなかった場合、systemd はフォールバックして解除するためのパスフレーズを要求します。パスフレーズが正しければ、起動に進みます。
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]。
さらに任意で暗号化したスワップパーティションも作成します。
+--------------------------+--------------------------+--------------------------+ |ESP |System partition |Swap partition | |unencrypted |LUKS-encrypted |plain-encrypted | | | | | |/boot/efi |/ | | |/dev/sdaY |/dev/sdaX |/dev/sdaZ | |--------------------------+--------------------------+--------------------------+
ディスクの準備
パーティションを作成する前に、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
にマウントしてください。
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 システムパーティションを準備済みなら、マウントポイントを作成してマウントしてください。
pacstrap でインストールを行うときに、btrfs-progs もインストールする必要があります。
mkinitcpio の設定
キーファイルの作成
GRUB で LUKS パーティションを解錠するために、initramfs にキーファイルを埋め込みます。Dm-crypt/デバイスの暗号化#キーファイルを initramfs に埋め込むに従って luksAddKey を実行する段階でキーを /dev/sdaX
に追加してください。
mkinitcpio.conf の編集
上記のようにキーファイルを作成して埋め込んだら、mkinitcpio.conf に encrypt
フックを追加してください。詳しくは Dm-crypt/システム設定#mkinitcpio を参照。設定後は initramfs を再生成する必要があります。
ブートローダーの設定
GRUB を /dev/sda
にインストールします。そして GRUB#暗号化に書かれているように /etc/default/grub
を編集します (ルートパーティションと boot パーティションの両方の手順に従ってください)。最後に、GRUB の設定ファイルを生成します。
スワップの設定
スワップを暗号化するためにパーティションを作成していた場合、ここで設定してください。Dm-crypt/スワップの暗号化の手順に従ってください。
設定を完了したら、インストールガイドにしたがって通常通りにシステムの設定を続行してください。