Wpisywanie hasła jest uciążliwe

Nie dość, że uciążliwe to w sytuacji gdzie musimy odblokować dysk publicznie mniej bezpieczne.

Na szczęście takie odblokowywanie możemy zrobić za pomocą zwykłego USB za 5 zł.

boot = {
  tmp.cleanOnBoot = true;
  loader.efi.canTouchEfiVariables = false;
  supportedFilesystems = [ "zfs" ];
  loader.timeout = 1;

  loader.grub = {
    enable = true;
    device = "nodev";
    enableCryptodisk = true;
    zfsSupport = true;
    efiSupport = true;
    efiInstallAsRemovable = true;
    mirroredBoots = [
      {
        devices = [ "nodev" ];
        path = "/boot";
      }
    ];
  };

  initrd.kernelModules = [
    "usb_storage"
    "vfat"
    "nls_cp437"
  ];

  initrd.systemd = {
    enable = true;
    contents."/etc/fstab".text = ''
      LABEL=Usbkey   /key   vfat   defaults,nofail,x-systemd.device-timeout=5   0   2
    '';
  };

  initrd.luks.devices = {
    root = {
      device = "/dev/disk/by-uuid/dddddddd-dddd-dddd-dddd-dddddddddddd";
      keyFile = "/key/KEYFILE";
      fallbackToPassword = true;
    };
  };
};

Używam zfs, ale po prostu pomiń związane z tym opcje.

Ogólnie chodzi o dodanie systemd do initrd i użycie zwykłej składni fstaba żeby zamontować nasz USB gdziekolwiek.

W moim przypadku USB ma label “Usbkey”, pamiętaj o tym, najlepiej też użyć prostego filesystemu jak FAT i oczywiście dodać odpowiednie moduły kernelowe.

Wykonaj ls -l /dev/disk/by-uuid żeby zobaczyć jaki UUID ma twój dysk

KEYFILE to po prostu plik który jest kluczem w głównym folderze na USB, możesz go wygenerować z dd if=/dev/urandom of=/mnt/myusb/KEYFILE bs=4096 count=1

A do dysku zaszyfrowanego LUKSem dodaj ten klucz:

cryptsetup luksAddKey /dev/sdx /mnt/myusb/KEYFILE

Pamiętaj by go backupować.