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.
Nitrokey Pro 2 lub Nitrokey Storage 2 z zainicjalizowanymi kluczami.
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#
Zainstaluj zależności
$ sudo apt install scdaemon opensc gnupg2
Utwórz katalog smartcard-luks
$ mkdir smartcard-luks && cd smartcard-luks
Pobierz skrypt smartcard-luks-script
$ wget https://raw.githubusercontent.com/daringer/smartcard-key-luks/main/smartcard-key-luks $ sudo chmod +x smartcard-key-luks
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.
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/.
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](../../_images/luks_1.png)
Po odblokowaniu Nitrokey, zostaniesz poproszony o podanie OLD passphrase
. Jest to fraza hasła, którą wprowadziłeś podczas instalacji, aby zaszyfrować swój wolumin.
![img2](../../_images/luks_2.png)
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](../../_images/luks_3.png)
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](../../_images/luks_5.png)
Wprowadź swój kod PIN użytkownika, aby odblokować napęd
![img6](../../_images/luks_6.png)
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 obsługuje odblokowywanie partycji LUKS2 za pomocą certyfikatu X509, znajdź świetny wpis na blogu, jak to zrealizować ` Osobisty blog Vladimira Timofeenko`_.