Szyfrowanie całego dysku za pomocą cryptsetup/LUKS

Ten przewodnik pokazuje, jak skonfigurować woluminy szyfrowane LUKS, aby uwierzytelnić się przy rozruchu za pomocą Nitrokey Pro lub Nitrokey Storage.

Aby zapewnić trochę tła, cryptsetup-initramfs ma teraz wsparcie dla używania kart OpenPGP jak Nitrokey Pro i Nitrokey Storage do odblokowania woluminów szyfrowanych LUKS. Po zakończeniu konfiguracji, będziesz musiał po prostu włożyć swoją kartę Nitrokey podczas uruchamiania systemu i wprowadzić PIN użytkownika, zamiast wpisywania hasła szyfrowania dysku.

Instrukcje te zostały przetestowane na Ubuntu 20.04 i Debianie 10.

Ostrzeżenie

Poniższa instrukcja może potencjalnie zablokować dostęp do komputera. Należy być świadomym tego ryzyka i zalecamy korzystanie z poniższego skryptu na komputerze pomocniczym lub po wykonaniu pełnej kopii zapasowej, ponieważ może to spowodować utratę danych.

Wymagania

  • Komputer Ubuntu lub Debian z co najmniej jednym woluminem szyfrowanym LUKS.

Zapoznaj się z poniższą sekcją, aby określić, która metoda jest zgodna z tym przewodnikiem.

Znane problemy

Jak dotąd skrypt działa tylko z woluminami podzielonymi na partycje ręczne, które składają się z niezaszyfrowanej partycji /boot i zaszyfrowanej partycji głównej /.

Proszę nie wybierać automatycznego szyfrowania całego dysku w systemie operacyjnym, którego używasz do tego poradnika. Napotkasz powtarzające się błędy, gdy partycjonowanie zostanie wykonane automatycznie, przy użyciu interfejsu instalacyjnego w Ubuntu i Debianie.

Instrukcje

  1. Zainstaluj zależności

    $ sudo apt install scdaemon opensc gnupg2
    
  2. Utwórz katalog smartcard-luks

    $ mkdir smartcard-luks && cd smartcard-luks
    
  3. Pobierz skrypt smartcard-luks-script

    $ wget https://raw.githubusercontent.com/daringer/smartcard-key-luks/main/smartcard-key-luks
    $ sudo chmod +x smartcard-key-luks
    
  4. Wyeksportuj klucz publiczny

    Aby wyeksportować swój klucz publiczny z magazynu kluczy GnuPG:

    $ gpg2 --armor --export KeyID > pubkey.asc
    

    Jeśli masz już wgrany klucz publiczny do serwera kluczy (lub przechowujesz go w innym miejscu), powinieneś pobrać go w sposób, który jest dla Ciebie najwygodniejszy, a następnie przejść do kroku 5.

  5. Ustalić i zweryfikować prawidłową nazwę urządzenia LUKS dla partycji głównej:

    $ cat /etc/crypttab
    # if there is only one entry, you want the 1st column of this entry
    

    Podpowiedź

    Zazwyczaj powinno to być coś takiego jak nvme0n1p3_crypt (dla NitroPC) lub sda3_crypt (dla NitroPads). Możesz i powinieneś sprawdzić, czy UUID podany w /etc/crypttab jest wskazaną partycją, sprawdzając dowiązanie symboliczne w /dev/disks/by-uuid/.

  6. Wykonaj skrypt podając jako argumenty nazwę urządzenia luks (np. nvme0n1p3_crypt) i pubkey.asc.

    $ sudo ./smartcard-key-luks nvme0n1p3_crypt pubkey.asc
    

Po uruchomieniu skryptu z kluczem publicznym OpenPGP jako argumentem, automatycznie ustawi on nowy sekret LUKS, zaszyfruje go z tym kluczem publicznym i ustawi crypttab, LUKS, initramfs i GRUB.

Najpierw zostaniesz poproszony o podanie User PIN.

img1

Po odblokowaniu Nitrokey, zostaniesz poproszony o podanie OLD passphrase. Jest to fraza hasła, którą wprowadziłeś, aby zaszyfrować swój wolumin podczas instalacji.

img2

Informacja

Jest to alternatywa awaryjna na wypadek utraty Nitrokey, lub gdy jest on niedostępny. Jak na razie nie została ona przetestowana, a użytkownicy muszą być świadomi ryzyka zablokowania komputera, jeśli metoda awaryjna nie zadziała.

Po wprowadzeniu hasła, skrypt kończy konfigurację w ciągu około minuty. Nie przerywaj działania skryptu, w przeciwnym razie możesz zostać zablokowany po ponownym uruchomieniu komputera.

img3

Zrobione!

Teraz musisz zrestartować komputer i powinieneś być w stanie użyć Nitrokey do odblokowania zaszyfrowanego dysku.

Zastosowanie

Po restarcie powinieneś zostać poproszony o podanie kodu PIN użytkownika.

img5

Wprowadź swój kod PIN użytkownika, aby odblokować napęd

img6

Dalsze wskazówki

Zmień hasło

Po wykonaniu tej konfiguracji, nie powinieneś już używać narzędzia disks (gnome) do zmiany (awaryjnego) hasła. Właściwym sposobem jest bezpośrednie wywołanie cryptsetup w ten sposób:

$ sudo cryptsetup luksChangeKey /dev/nvme0n1p3

Przy czym nvme0n1p3 to partycja, dla której ustawiłeś klucze.

Użyj wielu klawiszy

Łatwo jest użyć wielu (sprzętowych) kluczy bezpieczeństwa, tak aby każdy z nich mógł niezależnie odblokować napęd LUKS. Wystarczy wyeksportować wiele kluczy publicznych, a także przekazać wiele kluczy do skryptu konfiguracyjnego w ten sposób:

$ sudo ./smartcard-key-luks nvme0n1p3_crypt pubkey-1.asc pubkey-2.asc

Ustawianie nazwy posiadacza karty

Podczas wprowadzania kodu PIN przy starcie systemu w celu odszyfrowania partycji głównej LUKS użytkownikowi prezentowany jest posiadacz karty, aby to ustawić należy użyć $ gpg --edit-card i wewnątrz monitu wpisać admin i name, aby ustawić posiadacza karty dla karty OpenPGP (Nitrokey Storage 2 lub Nitrokey Pro 2).

Wymiana/usuwanie kluczy

Nie jest możliwe bezpośrednie dodawanie/usuwanie kluczy. Dlatego należy skasować/usunąć starą konfigurację i ponownie uruchomić konfigurację z wyznaczonym kluczem(ami):

Usuń plik kluczowy (ścieżkę, jeśli użyłeś powyższego skryptu) z luks-device (nvme0n1p3):

$ sudo cryptsetup luksRemoveKey /dev/nvme0n1p3 /etc/cryptsetup-initramfs/cryptkey.gpg

Usuń sam plik kluczowy:

$ sudo rm /etc/cryptsetup-initramfs/cryptkey.gpg

Ponownie uruchomić powyższą konfigurację.

Odblokowywanie LUKS2 za pomocą certyfikatu X509

SystemD wspiera odblokowywanie partycji LUKS2 przy użyciu certyfikatu X509, znajdź świetny wpis na blogu, jak to zrealizować Personalny blog Vladimira Timofeenko.