NixOSでLUKSによるディスク暗号化を設定する

ディスク暗号化を設定する動機は?

ちょうど、Arch LinuxをインストールしていたラップトップマシンをNixOSに移行するタイミングで、 それなりに持ち歩くマシンなので、前々から暗号化したいな~と思っていたのでこのタミングでディスク暗号化のされたインストールを行いました。

Arch LinuxからNixOSに移行した事や後から設定したセキュアブートについてはまた別の記事にしようと思います。

ディスクの構成

インストール先のディスク(以降では、/dev/sdaとします)には、以下の表のようにgdiskでパーティションを直接(LVMは使用していない)設定しました。

partition mounting point capacity hexcode
/dev/sda1 /boot 1 GiB ef00
/dev/sda2 / 残り全て デフォルト値

このとき、 暗号化するパーティションは/すなわち/dev/sda2のみで、 /dev/sda1は暗号化せずに平文のままにします。

暗号化されたインストール

LUKSによる/の暗号化

まず以下のコマンドで、/dev/sda2LUKSによって暗号化します。

1
cryptsetup luksFormat /dev/sda2 # 暗号化

続いて、暗号化された/dev/sda2を以下でopenします。

1
cryptsetup open --type luks /dev/sda2 cryptsda # open

この時openされたボリュームは以降では/dev/mapper/cryptsdaとして利用できます。

インストール

ここまでで、ディスクパーティションが用意できたので、インストール作業を進めていきます。

まず/boot,/を以下でそれぞれvfat,ext4にフォーマットします。

1
2
mkfs.vfat -F32 /dev/sda1 # /boot
mkfs.ext4 /dev/mapper/cryptsda # /

ファイルシステムを用意できたので、続いてマウントを以下のように行います。

1
2
3
mount /dev/mapper/cryptsda /mnt # /をマウント
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot # /bootをマウント

ここまで来たらあとは通常のインストールと同じです。 まず、/mnt以下にconfigを生成します。

1
nixos-generate-config --root /mnt

参考にした以下の記事では、起動時にディスクの復号を行う設定を手で追加していました。

しかし、インストールを行なった時には(2025 12/7)、configを生成した段階で、/mnt/etc/nixos/hardware-configuration.nixに以下のような設定が生えて、特にLUKS固有の設定されて特に追加の設定は不必要でした。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
fileSystems."/" = {
  device = "/dev/disk/by-uuid/7e224d65-2f57-402f-b4b1-24afd7b2e7a2";
  fsType = "ext4";
};

boot.initrd.luks.devices."cryptsda".device =
  "/dev/disk/by-uuid/dedace0a-cb3a-4994-86db-7ef7af2017ad";

fileSystems."/boot" = {
  device = "/dev/disk/by-uuid/8D75-2067";
  fsType = "vfat";
  options = [
    "fmask=0022"
    "dmask=0022"
  ];
};

最後に、

1
nixos-install 

を実行すればインストールが実行されます。無事インストールに成功するとパスワード設定を促され再起動します。

再起動時に途中でLUKSのパスワードを求められるので、それを入力してから無事起動できれば成功です。

後はお好みに/etc/nixos/configuration.nix を設定するなり、flake化するなりお好みにしてください。

CC BY
Hugo で構築されています。
テーマ StackJimmy によって設計されています。