UbuntuをLUKS(暗号化)しながらPartitionを分けたりWindows10とDual Bootしたり(Xubuntu 18.04)

WorkstationのDISK暗号化は、今の時代は必須となっていることが多いと思います。
会社で必須化されていなくとも、やっておくことでセキュリティ事故の被害を減らせるでしょう。

暗号化の手段としては、以下の内容が今時の標準のようです。

- Windows: BitLocker
- MacOS: FileVault
- Linux: LUKS

パーティショニングをしながらLUKSを適用するには`cryptsetup luksFormat`を実行して`/etc/crypttab`を編集する方法が記事として見つかります。

これらの操作を、Ubuntuのインストーラー上で簡単に実現できました。
いくつか注意点がありましたので、メモとして残しておこうと思いました。
(実際につかったInstallerはXubuntu 18.04のものですが、Ubuntuでも基本は同じかなと思います)

ちなみに、私は以下の目的で手動でのパーティショニングを実施しました。

- Windowsと共存したい
    - Windows上だとBIOSの更新が簡単
- homeディレクトリを分離したい
    - 再インストールやディストリビューションを変更時に、home配下のファイルを再利用しやすい


## パーティショニングを手動で行う

インストール手順の中で「インストールの種類」というステップがあります。
そこで「それ以外」を選択すると、パーテーションを手動で設定する画面になります。

![1.それ以外を選ぶ画面.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106949/e481a71f-1a17-519d-9446-639c4b45f304.jpeg)

ここで、最低限以下のパーティションを切ります。

- efi
    - Windows 10がインストールされている場合はもともと存在する
    - マウントポイントを設定しなくても勝手に`/boot/efi`としてマウントされる
- ext4
    - `/boot`
- 暗号化パーティション
    - `/`

efiは自動的に`/boot/efi`としてマウントされるようです。
これに加え、好みに合わせて暗号化パーテーションを追加します。

暗号化パーティションを作る際にパスワードを入力します。
作られた暗号化パーティションは、画面の上部に`/dev/mapper/xxxx_crypt`というデバイスとして表示されます。
LVMみたいなものと考えてもらい、そのデバイスに対して`ext4`でパーティションを作ります。

複数暗号化パーティションを作る場合は、`/dev/mapper/xxxx_crypt`をその分だけ作ることになります。
コマンドで作るときは、ひとつの`/dev/mapper/xxxx_crypt`に対して`ext4`ではなくLVMを作ってさらに分割することもできるようなのですが、Ubuntuのインストーラーだとそこまでできなさそうでした。


## パーティショニングのサンプル

ここでは、以下の内容を実現したときのサンプルを記載します

- Windowsとデュアルブート
- homeとルートディレクトリのパーティションを分離

いかが、そのサンプルです。
`/dev/nvme0n1p1`は、各環境によって異なると思います。
例えば環境にあわせて`/dev/sda1`等に読み替えてください。

- /dev/nvme0n1p1: efi
    - bootloaderを保管する領域
    - windowsのbootloaderも格納されている
- /dev/nvme0n1p2: ???
    - 謎の空白領域、Windows10によって作られた
- /dev/nvme0n1p3: ntfs
    - Windows本体
- /dev/nvme0n1p4: ntfs
    - Windowsの復元領域
- /dev/nvme0n1p5: ext4
    - マウントポイント: `/boot`
- /dev/nvme0n1p6: 暗号化領域 (LUKS -> ext4)
    - マウントポイント: `/`
- /dev/nvme0n1p7: 暗号化領域 (LUKS -> ext4)
    - マウントポイント: `/home`

![2.パーティショニング.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106949/7449c399-f4c7-1c8e-3738-b3f43203c921.jpeg)

最後にフォーマットの可否の確認ダイアログが表示されます。
再インストール時など、初期化したくないパーティションに「フォーマット」のチェックが入っていないことを確認してください。

![3.確定時の確認画面.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106949/26ea4931-4b99-ae7c-f966-e6c21f08fccd.jpeg)

## 注意事項

「それ以外」を選択して手動でパーティショニングをする際、暗号化パーティションを作った場合は以下の点に注意してください。

### `/boot`用の暗号化していないパーティションを作る

`/`が暗号化されている場合、`/boot`を暗号化していないパーティションで作成する必要があります。
`/boot`がない場合は、以下のようなエラーになります。


![4.bootが無い場合のエラー画面.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106949/380ac50a-0901-3f6b-fa30-83768a7eed66.jpeg)

`/boot`が暗号化されていると`initrd`が読み込めないため、`/`をマウントできないということのようです。

### `swap`用のパーティションは作らない

swap用のパーティションを作ると、セキュリティに関する問題があるとのエラーが表示されます。

![5.swapがある場合のエラー画面.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106949/de7835cb-d071-d347-4e72-9a7e5f3c74f4.jpeg)


### Windows10とのデュアルブート

Windows10の復元ツールには、パーティショニング機能が無いようです。
（パッケージ版のインストーラーにはパーティショニング機能があるのかもしれませんが）

Ubuntuを先にインストールしていると、Windows10の復元ツールを使った際にパーティションがすべて上書きされるようです。
Windows10をDISKに導入した後、Ubuntuを入れるという手順を取る必要があります。

## 起動時

OS起動時に、パーティションをマウントするためのパスワード入力画面が表示されるようになります。
パスワードファイルを`/boot配下`に作り、パスワード入力をスキップする方法もあるようです。

## fstabとcrypttab

以下、インストールが完了したあとの設定ファイルの内容です。
暗号化ボリュームの読み込みが`crypttab`に書いてあり、これに従って自動的に`luksOpen`されるようです。
そのあと、`fstab`に従ってマウントされるようです。


```config:/etc/crypttab 
nvme0n1p6_crypt UUID=aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa none luks,discard
nvme0n1p7_crypt UUID=aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa none luks,discard
```

```config:/etc/fstab 
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/mapper/nvme0n1p6_crypt /               ext4    errors=remount-ro 0       1
# /boot was on /dev/nvme0n1p5 during installation
UUID=aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa /boot           ext4    defaults        0       2
# /boot/efi was on /dev/nvme0n1p1 during installation
UUID=AAAA-AAA  /boot/efi       vfat    umask=0077      0       1
/dev/mapper/nvme0n1p7_crypt /home           ext4    defaults        0       2
/swapfile                                 none            swap    sw              0       0
```

```bash:df
Filesystem                  1K-blocks      Used Available Use% Mounted on
udev                         10101296         0  10101296   0% /dev
tmpfs                         2027424      1476   2025948   1% /run
/dev/mapper/nvme0n1p6_crypt 195810932  10480704 175313924   6% /
tmpfs                        10137104    649004   9488100   7% /dev/shm
tmpfs                            5120         4      5116   1% /run/lock
tmpfs                        10137104         0  10137104   0% /sys/fs/cgroup
/dev/nvme0n1p5                1935632    166888   1652368  10% /boot
/dev/nvme0n1p1                 262144     32456    229688  13% /boot/efi
/dev/mapper/nvme0n1p7_crypt 657052112 138626128 484979892  23% /home
tmpfs                         2027420         8   2027412   1% /run/user/1000
```

##最後に

複数のパーティションを暗号化しても、設定しているパスワードが同じの場合は、マウント時のパスワードの入力は一回で済みました。