Ubuntu 24.04 をフルディスク暗号化インストールしよう 【UEFI+LUKS】
はじめに
ローカルLLMを実行するためのPCを製作したため、Ubuntu 24.04 を従来通りにLUKSを使用してインストールしたところ、LUKSパーティションがインストーラに認識されず躓いたためこの記事を投稿します。StackExchangeの質問についた回答によると、新しいFlutterベースのインストーラの制限とのことです。Liveイメージに含まれるインストーラを使用せず、ファイルをそのままコピーする方法で進めます。そのため、この手順でインストールをした後は余分な設定やファイルを削除する必要があります。
フルディスク暗号化とは
ストレージの暗号化には大きく分けて「フルディスク暗号化」と「ファイルベース暗号化」があります。前者はディスクまたはパーティション全体を暗号化でき、後者はファイルごとに異なる暗号化キーを用いることができる点が特徴です。この記事では / (rootfs)
パーティションと /boot
パーティションを暗号化します。EFIシステムパーティションは暗号化しません。
フルディスク暗号化でできること
ディスク単体があっても復号できません。復号にはパスワードやTPMに保管されているキーが必要です。
フルディスク暗号化でできないこと
- コンピュータが起動した後のデータの保護
データは暗号化解除されるため、コンピュータが起動した後の不正アクセスに対しては耐性がありません。 - コールドブート攻撃への耐性はない
メモリに残る暗号化キーを攻撃対象とする「コールドブート攻撃」への耐性はありません。
前提条件
- インストールするOS: Ubuntu 24.04.2 LTS
- ファームウェア: UEFI
- アーキテクチャ: x86_64
- TPMは使用せず、パスワードによるディスク保護を行う
インストール用USBメモリを作成する
まず、Ubuntu 24.04のISOイメージ をダウンロードしてください。ダウンロードが終わったらUSBメモリにISOイメージを書き込みます:
sudo dd if=/path/to/ubuntu-24.04-desktop.iso of=/dev/sdX bs=1G # (sdXはUSBメモリデバイス)
インストール用USBメモリを使用してコンピュータを起動する
Ubuntu 24.04をインストールするコンピュータに先ほど作成したUSBメモリを接続し、起動してください。するとGRUBの画面が表示されるはずです。Try or Install Ubuntu を選択し、Enterキーを押してください。

しばらくするとGUIインストーラーが起動しますが、Alt+F4キーを押して閉じてください。

スーパーキー (Windowsキー) を押して「terminal」と入力し、Terminalを起動します。

パーティショニングする
Terminalが起動したらパーティショニングを行います。
ubuntu@ubuntu:~ sudo gdisk /dev/vdX # /dev/vdX は実際のインストール先ディスクに読み替える GPT fdisk (gdisk) version 1.0.10 Partition table scan: MBR: not present BSD: not present APM: not present GPT: not present Creating new GPT entries in memory Command (? for help):
まず、パーティションが無くなるまで d
コマンドを繰り返し使用して全てのパーティションを削除してください (データが全く存在しない空のディスクでは不要です) 。その後EFIシステムパーティションを作成します:
Command (? for help): n Partition number (1-128, default 1): First sector (34-67108830, default = 2048) or {+-}size{KMGTP}: Last sector (2048-67108830, default = 67106815) or {+-}size{KMGTP}: +512M Current type is 8300 (Linux filesystem) Hex code or GUID (L to show codes, Enter = 8300): ef00 Changed type of partition to 'EFI system partition'
次に /boot
パーティションを作成します。
Command (? for help): n Partition number (2-128, default 2): First sector (34-67108830, default = 1050624) or {+-}size{KMGTP}: Last sector (1050624-67108830, default = 67106815) or {+-}size{KMGTP}: +2G Current type is 8300 (Linux filesystem) Hex code or GUID (L to show codes, Enter = 8300): 8309 Changed type of partition to 'Linux LUKS'
最後に / (root)
パーティションを作成します。
Command (? for help): n Partition number (3-128, default 3): First sector (34-67108830, default = 5244928) or {+-}size{KMGTP}: Last sector (5244928-67108830, default = 67106815) or {+-}size{KMGTP}: Current type is 8300 (Linux filesystem) Hex code or GUID (L to show codes, Enter = 8300): 8309 Changed type of partition to 'Linux LUKS'
p
コマンドを使用して、作成したパーティションテーブルを確認します。
Command (? for help): p Disk /dev/vdX: 67108864 sectors, 32.0 GiB Sector size (logical/physical): 512/512 bytes Disk identifier (GUID): 7895CA31-EF57-408A-AC86-FAAB79027CE1 Partition table holds up to 128 entries Main partition table begins at sector 2 and ends at sector 33 First usable sector is 34, last usable sector is 67108830 Partitions will be aligned on 2048-sector boundaries Total free space is 4029 sectors (2.0 MiB) Number Start (sector) End (sector) Size Code Name 1 2048 1050623 512.0 MiB EF00 EFI system partition 2 1050624 5244927 2.0 GiB 8301 Linux LUKS 3 5244928 67106815 29.5 GiB 8304 Linux LUKS
w
コマンドを使用してパーティションテーブルを書き込みます。
Command (? for help): w Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed? (Y/N): y OK; writing new GUID partition table (GPT) to /dev/vdX. The operation has completed successfully.
ファイルシステムを作成する
パーティショニングが完了したらファイルシステムを作成します。
まず、EFIシステムパーティションをFAT32でフォーマットします。
sudo mkfs.vfat /dev/vdX1
次に /boot
パーティションに LUKS1ファイルシステム を作成します。
UbuntuのGRUB2がluks2モジュールなしでビルド・署名されているため、LUKS1を使う必要があります。
sudo cryptsetup luksFormat --type=luks1 /dev/vdX2 WARNING! ======== This will overwrite data on /dev/vdX2 irrevocably. Are you sure? (Type 'yes' in capital letters): YES Enter passphrase for /dev/vdX2: # パスワードを入力します Verify passphrase: # パスワードを入力します
最後に / (root)
パーティションに LUKS2 ファイルシステムを作成します。
ubuntu@ubuntu:~$ sudo cryptsetup luksFormat --type=luks2 /dev/vdX3 WARNING! ======== This will overwrite data on /dev/vdX3 irrevocably. Are you sure? (Type 'yes' in capital letters): YES Enter passphrase for /dev/vdX3: # パスワードを入力します Verify passphrase: # パスワードを入力します
LUKSパーティションを開く
前セクションで作成したLUKSパーティションを開きます。
ubuntu@ubuntu:~$ sudo cryptsetup open /dev/vdX2 LUKS_BOOT Enter passphrase for /dev/vdX2: ubuntu@ubuntu:~$ sudo cryptsetup open /dev/vdX3 LUKS_ROOTFS Enter passphrase for /dev/vdX3: ubuntu@ubuntu:~$ ls /dev/mapper/ LUKS_BOOT LUKS_ROOTFS control
LUKSパーティションにファイルシステムを作成する
LUKSパーティションには直接ファイルを置くことができません。別途 ext4
などのファイルシステムが必要ですので作成します。
sudo mkfs.ext4 -L boot /dev/mapper/LUKS_BOOT sudo mkfs.ext4 -L rootfs /dev/mapper/LUKS_ROOTFS
ファイルシステムをマウントする
作成したファイルシステムをマウントしましょう。
mkdir rootfs sudo mount /dev/mapper/LUKS_ROOTFS rootfs/ sudo mkdir rootfs/boot sudo mount /dev/mapper/LUKS_BOOT rootfs/boot/ sudo mkdir rootfs/boot/efi sudo mount /dev/vdX1 rootfs/boot/efi
ファイルを配置する
必要なファイルをコピー・作成します。rsyncコマンドの引数の末尾の /
は除去しないでください。
sudo rsync -aX /boot/ rootfs/boot/ sudo rsync -aX /etc/ rootfs/etc/ sudo rsync -aX /usr/ rootfs/usr/ sudo rsync -aX /var/ rootfs/var/ sudo ln -s usr/bin rootfs/bin sudo ln -s usr/lib rootfs/lib sudo ln -s usr/lib64 rootfs/lib64 sudo ln -s usr/sbin rootfs/sbin sudo mkdir rootfs/{dev,proc,root,run,sys,tmp} sudo mkdir -p rootfs/home/ubuntu sudo chown ubuntu:ubuntu rootfs/home/ubuntu sudo chmod 750 rootfs/home/ubuntu rsync -aX /etc/skel/ rootfs/home/ubuntu/
chrootする
ここまできたら、新環境にchrootすることができるようになります。chrootして必要なファイルシステムをマウントします。
$ sudo chroot rootfs # mount -t devtmpfs devtmpfs /dev # mount -t proc proc /proc # mount -t sysfs sysfs /sys # mount -t tmpfs tmpfs /tmp
initramfsを設定する
コンピュータの起動時に1回のLUKSパスワード入力で済むようにするため、initramfsを設定します。chroot内で次のコマンドを実行します:
echo "KEYFILE_PATTERN=/etc/luks/*.keyfile" >> /etc/cryptsetup-initramfs/conf-hook echo "UMASK=0077" >> /etc/initramfs-tools/initramfs.conf
LUKSパーティションにキーを追加する
chroot内で次のコマンドを実行します:
mkdir /etc/luks dd if=/dev/urandom of=/etc/luks/boot_os.keyfile bs=512 count=1 chmod u=rx,go-rwx /etc/luks chmod u=r,go-rwx /etc/luks/boot_os.keyfile cryptsetup luksAddKey /dev/vdX2 /etc/luks/boot_os.keyfile cryptsetup luksAddKey /dev/vdX3 /etc/luks/boot_os.keyfile
/etc/crypttabを編集する
crypttabはシステムが起動するときにセットアップされる暗号化された暗号化されたディスクを設定するファイルです。chroot内で次のコマンドを実行します:
echo "LUKS_BOOT UUID=$(blkid -s UUID -o value /dev/vdX2) /etc/luks/boot_os.keyfile luks,discard" >> /etc/crypttab echo "LUKS_ROOTFS UUID=$(blkid -s UUID -o value /dev/vdX3) /etc/luks/boot_os.keyfile luks,discard" >> /etc/crypttab
注意点として、 discard
オプションには僅かながらセキュリティリスクが存在するようです。詳細については Arch Linux の Wikiページ を参照してください。
/etc/fstabを編集する
chroot内で次のコマンドを実行します:
rm /etc/fstab echo "/dev/mapper/LUKS_ROOTFS / ext4 errors=remount-ro 0 1" >> /etc/fstab echo "/dev/mapper/LUKS_BOOT /boot ext4 defaults 0 2" >> /etc/fstab echo "UUID=$(blkid -s UUID -o value /dev/vdX1) /boot/efi vfat defaults 0 2" >> /etc/fstab
不要なものを削除する
chroot内で次のコマンドを実行します:
deluser installer apt remove casper # 削除しないと起動時にインストールディスクを探索されてしまう systemctl disable snap.ubuntu-desktop-bootstrap.subiquity-server.service # インストーラが起動しないようにする rm /usr/lib/systemd/system/serial-getty\@.service.d/subiquity-serial.conf # gettyを正常に機能させるために必要
initramfsファイルを作成する
chroot内で次のコマンドを実行します:
rm /etc/initramfs-tools/conf.d/* (cd /usr/sbin; mv update-initramfs.distrib update-initramfs) update-initramfs -c -k all
ブートローダー (GRUB2) をインストールする
chroot内で次のコマンドを実行します:
echo "GRUB_ENABLE_CRYPTODISK=y" >> /etc/default/grub.d/local.cfg grub-install --efi-directory=/boot/efi update-grub
再起動する
ここまで来たらインストール自体は完了です。再起動しましょう。このとき、USBメモリの抜去が求められますので指示に従い抜去してください。
exit # chrootを抜ける sudo reboot # 指示に従いUSBメモリを抜去する
再起動後の操作
ディスクが暗号化されていますので、パスワードの入力が必要です:

しばらくすると Ubuntu 24.04 が起動します。
Terminalを起動して次の操作を行います:
- インストーラ (ubuntu-destktop-bootstrap) を削除する
- GLibスキーマオーバーライドファイルを削除し、dconfをリセットする
- 画面のロックをするために必要です
sudo snap remove ubuntu-desktop-bootstrap sudo rm /usr/share/glib-2.0/schemas/{casper.gschema.override,livecd-rootfs.gschema.override} sudo glib-compile-schemas /usr/share/glib-2.0/schemas dconf reset -f /
おわりに
以上で Ubuntu 24.04 のインストールは完了です。お疲れ様でした!冒頭で「ローカルLLMを実行するためのPCを製作した」と述べましたが、実際にローカルLLMを動かしたら別途記事を執筆予定です。弊社の別メンバーがOllamaを使用してローカルLLMを動かした記事もご参照ください。