Instalacja i szyfrowanie całego systemu Ubuntu 16.04 przy użyciu logicznych woluminów

Od czasu pierwszej mojej notki odnośnie szyfrowania Ubuntu 12.04 przy pomocy lvm’a i LUKSa trochę minęło. Warto odświeżyć i doprecyzować temat zwłaszcza, że po migracji bloga cały wpis trochę ucierpiał.

Aby skorzystać z szyfrowania LUKS’em będziemy znów potrzebowali alternatywnego, tekstowego instalatora. Tak naprawdę sam proces praktycznie nie różni się prawie niczym (dochodzi tylko kwestia EFI) od tego opisywanego dla Ubuntu 12.04.

Obraz instalatora ściągamy w postaci małego obrazu: http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/mini.iso. Podczas instalacji dodatkowe pakiety będą się ściągać z internetu.

Kilka założeń:
– opisywany poniższy przykład zakłada użycie partycji UEFI
– utworzenie woluminów logicznych dla partycji swap, root, home
– utworzenie nieszyfrowanej partycji boot
– brak innych systemów w komputerze, czyli instalacja od zera
– co najważniejsze, w tym przykładzie szyfrowane jest całe urządzenie blokowe (wszystko poza partycją dla UEFI i boot), a dopiero na tej całej zaszyfrowanej partycji tworzone są woluminy logiczne.

Ma to taką zaletę (na ogół), że jednym kluczem odszyfrowujemy wszystkie partycje i jest proste do konfiguracji. Wadą tego rozwiązania jest brak możliwości dodania nowego dysku do już istniejących woluminów.

Tak czy owak wydaje się to być dobre zastosowanie w laptopach, w których mamy tylko jeden dysk.

Przed rozpoczęciem wszelkich działań warto zrobić kopię zapasową, przeczytać, zrozumieć i poćwiczyć np. w virtualbox’ie.

Instalację rozpoczynamy od uruchomienia komputera z dysku instalacyjnego mini.iso

luks1

Wybieramy język

luks2

luks3

Wybieramy lokalizację

luks4

Konfigurujemy klawiaturę

luks5

luks6

luks7

Wybieramy nazwę komputera

luks8

Zgadzamy się na wybór servera repozytorium Ubuntu

luks9

luks10

luks11

 

Ustawiamy nazwę użytkownika oraz hasło. Przy pytaniu o szyfrowanie katalogu domowego odpowiadamy Nie

luks12

luks13

luks14

Ustawiamy zegar

luks15

Najważniejsza część czyli partycjonowanie. Wybieramy opcję: Ręcznie

luks16

Wybieramy dysk, który chcemy zpartycjonować.

luks17
Dalej jesteśmy pytani o utworzenie nowej  tablicy partycji, w przypadku włączonego UEFI, automatycznie stworzy się partycja typu GPT chociaż instalator na żadnym etapie tego nie pokaże.

luks18

Po utworzeniu tablicy partycji ponownie wybieramy nasz dysk i tworzymy pierwszą partycję typu EFI o rozmiarze 512MB.

luks19

luks20

luks21

luks22

luks23

Zakańczamy tworzenie partycji EFI.
Wybieramy resztę wolnej przestrzeni i tworzymy drugą partycję typu EXT4 o rozmiarze 512MB i punkcie montowania /boot

luks24

luks25

Zakańczamy tworzenie partycji boot.
Wybieramy ponownie resztę naszej wolnej przestrzeni i tworzymy nową partycję o maksymalnym rozmiarze o typie: fizyczny wolumin do szyfrowania.

luks26

luks27

luks28

luks29

luks30

luks31

Zakańczamy ustawianie partycji i wybieramy opcję: Konfiguruj szyfrowane woluminy.

luks32

Zapisujemy zmianę na dyskach.

luks33

Wybieramy opcję Create encrypted volumes.

luks34

Z listy dostępnych urządzeń wybieramy to o największym rozmiarze z flagą szyfrowanie, u mnie akurat /dev/sda3.

 

luks35

Finish.

luks36

Następnie musimy utworzyć silne hasło, o które komputer będzie pytał przy starcie systemu.

 

luks37

Teraz już z górki. Utworzyliśmy dwie partycję: jedną EFI oraz drugą z punktem montowania w /boot. Zaszyfrowaliśmy również resztę dysku.

Teraz czas na utworzenie woluminów na naszej zaszyfrowanej przestrzeni. Wybieramy nasz zaszyfrowany wolumin, u mnie sda3_crypt.

luks38

Wybieramy: fizyczny wolumin dla LVM.

luks39

luks40

Przedostatnia cześć partycjonowania to utworzenie woluminów logicznych, które zostaną później użyte jako partycje swap, root, home w Ubuntu.
Wybieramy Konfiguruj menedżera woluminów logicznych i zapisujemy zmiany.

luks41

luks42

Wpierw tworzymy grupę woluminów na naszej zaszyfrowanej partycji, u mnie: /dev/mapper/sda3_crypt i nadajemy jej nazwę.

luks43

luks44

 

Po utworzeniu grupy woluminów tworzymy trzy woluminy logiczne na swap, root, home o odpowiednim rozmiarze.
Warto również nadać etykiety woluminom aby móc jest łatwiej rozpoznać.

luks45

luks46

luks47

luks48

luks49

Ostatnia część partycjonowania to przypisanie woluminom logicznym punktów montowania i typu partycji.
Dla woluminu dla swap’a wybieramy typ partycji swap.
Dla woluminu dla root’a wybieramy montowanie / i typ partycji EXT4.
Dla woluminu dla home’a wybieramy montowanie /home i typ partycji EXT4.

luks50

luks51

luks52

luks53

luks54

Zapisujemy ustawienia partycjonowania!

luks55

Rozpoczynamy już zwykłą instalację Ubuntu, która może trochę potrwać (u mnie raz poszło szybko, a innym razem bardzo długo ściągały się pakiety).
luks56

luks57

luks58

Po restarcie komputera system powinien zapytać nas o hasło jakie ustawiliśmy w trakcie partycjonowania celem zamontowania woluminów. Jeśli zapomnimy hasła to nie ma możliwości jego odzyskania.

luks59
Kilka uwag instalacyjnych:
– warto spisać nazwy wszystkich dysków/partycji i zasymulować taką instalację pod Virtualboxem

– Przy pracy z VB należy pamiętać aby ustawić tryb EFI w ustawieniach wirtualnej maszyny

– Jeśli ktoś posiada płytę ze zwykłym biosem i wystarczy mu tablica msdos to krok z tworzeniem partycji EFI pomijamy

– Jeśli po instalacji i restarcie wirtualnej maszyny zobaczymy żółtą interaktywną konsolę to należy wpisać komendę: fs0:\efi\ubuntu\grubx64.efi aby wystartować system. Aby na stałe dokonać zmiany wpisujemy:
fs0:
edit startup.nsh i dodajemy dwie linijki:
FS0:
\EFI\ubuntu\grubx64.efi
ctrl-s  enter zapis, ctrl-q wyjście

– Innym problem może być niemożność wpisania hasła do odblokowania woluminów: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1359689 Efekt jest taki jakby nie działała nam klawiatura. Rozwiązaniem jest przełączenie startowania komputera w tryb tekstowy.

Z opcji Grub’a wybieramy tryb recovery, potem normalnie wpisujemy hasło i wybieramy opcję bootowania systemu. Powinniśmy móc się zalogować już do Ubuntu. Dalej należy wyedytować plik:  /etc/default/grub

Usunąć z linii: GRUB_CMDLINE_LINUX_DEFAULT opcje: quiet splash
oraz dodać linię GRUB_GFXPAYLOAD_LINUX=text

Na koniec zaktualizować gruba: sudo update-grub

Po restarcie ekran będzie wyglądał tak:
luks60

 

Prostsza wersja instrukcji bez użycia bez użycia LVM’a znajduje się tu: http://nocnypingwin.pl/szyfrowanie-calego-systemu-wraz-z-partycja-home-przy-uzycia-hasla-i-klucza/

    • koval, 19 października 2016, 23:11

    Odpowiedz

    Mam w domu serwer na ubuntu. Chciałbym zaszyfrować na nim dane, lecz serwer znajduje sie na strychu wraz z modemem (kablówka), routerem, switchem. Jak zabezpieczyć dane przed dostępem fizycznym jeżeli do serwera dostęp jest tylko po ssh i vnc. Chciałbym w razie restartu, ponownego uruchomienia mieć dostęp do danych po sambie, RDP (VNC), DLNA itp. Jak to zrobić?

    1. Nocny Pingwin

      Odpowiedz

      To wszystko zależy przed czym chcemy chronić dane, które dane i jak bardzo są one dla nas cenne. W wersji paranoidalnej dostęp fizyczny daje dostęp do wszystkiego gdyż teoretycznie, kiedy maszyna jest włączona wszystkie dyski/partycje są w tym czasie odszyfrowane.

      Pytanie czy ma być szyfrowany cały komputer wraz z partycją root czy tylko jakaś jedna partycja. Jeśli cały komputer tudzież root to nie da się uniknąć wpisywania hasła przy starcie komputera no chyba, że startowaliśmy go z pendrive’a z zaszytym hasłem, ale to i tak wymagałoby włożenia go wcześniej do portu.

      Jeśli ma być szyfrowany dowolny inny filesystem to sytuacja jest bardzo prosta (https://wiki.archlinux.org/index.php/Dm-crypt/Encrypting_a_non-root_file_system) wystarczy dm-crypt (cryptsetup), którym szyfrujemy wskazany filesystem. Odblokować go można ręcznie przez np. logując się ssh i podając hasło lub automatycznie w czasie logowania się użytkownika.

        • Koval, 25 listopada 2016, 23:14

        Odpowiedz

        Właśnie doprowadziłem system do takiego stanu, że nie wskrzesiłem go do żywych. Ale kopia ustawień jest i partycji /home. Postawiłem nowy system 16 LTS wraz z szyfrowaniem partycji /home i z multimediami (zdjęcia, filmy itp.) Jednak przed startem systemu system woła o hasło do obydwu partycji, bark dostępu po ssh. Jak to zrobić?? W sumie najprościej zaszyfrować tylko multimedia i wyłączyć automatyczne montowanie ale /home zostanie niezaszyfrowany a na nim znajdują się maile, zapamiętane hasła w przeglądarce itp. (korzystam z tego, że serwer „chodzi” 24h i mogę podłączyć się zdalnie np. z pracy).

    • Arek, 6 listopada 2016, 18:39

    Odpowiedz

    Fajna rzecz.
    Może polecisz jakiś tutoriał żeby zaszyfrować zewnętrzny dysk na USB równie bezpiecznie?
    A i pytanie: czy fakt że /boot nie jest zaszyfrowane nie wpływa negatywnie na bezpieczeństwo? Nie da się tego szyfrowania przez to w jakiś sposób obejść?

    1. Nocny Pingwin

      Odpowiedz

      Wystarczą 3 pierwsze komendy z 2 lub 3 punktu : http://nocnypingwin.pl/szyfrowanie-calego-systemu-wraz-z-partycja-home-przy-uzycia-hasla-i-klucza/, zarówno Gnome jak i KDE w pełni wspierają luksa. Polecam dokumentację arch wiki.
      Co do pozostawionej niezaszyfrowanej partycji boot to nie obawiałbym się, nie zawiera ona niczego specjalnego co było przydatne do „złamania” szyfrowania w zagubionym laptopie.

    • Arek, 3 grudnia 2016, 14:10

    Odpowiedz

    Nie chciałoby Ci się zrobić podobnie z tym że na opensuse z graficznym instalatorem?

    • Przemek, 15 stycznia 2017, 14:18

    Odpowiedz

    Witam!
    Właśnie wykonałem udaną próbę pod VirtualBoksem.
    Czy w takiej konfiguracji jak wyżej jest możliwość zainstalowania systemu od nowa bez formatowania partycji home? Jeśli nie, to jaka jest przewaga takiego rozwiązania w porównaniu z zainstalowaniem całego systemu na jednej zaszyfrowanej partycji?

    1. Nocny Pingwin

      Odpowiedz

      Oczywiście, że jest.
      Opcja najprostsza czyli zrobić backup /home na niezaszyfrowanej partycji i potem wszystko przekopiować do nowego homea.

      Opcja trochę dłuższa to użyć dokładnie tego samego instalatora co w notce, odszyfrować dysk (instalator powinien zapytać o hasło i ładnie pokazać wszystkie woluminy) i wskazać punkt montowania homea (bez opcji format!).

        • Anonim, 16 stycznia 2017, 15:22

        Odpowiedz

        Dzięki za odpowiedź!
        Co do pierwszego sposobu: Do tego nie są chyba potrzebne oddzielne woluminy. Co za różnica, czy kopiuję dane z oddzielnego woluminu, czy tylko z podkatalogu.

        Co do drugiego sposobu: Właśnie o to mi chodziło. Po kilku próbach udało mi się tego dokonać. Żeby wszystko wyszło, jak należy i żeby instalator rozpoznał istniejące woluminy, to w głównym oknie partycjonowania (po wybraniu opcji „ręcznie”) należy najpierw wybrać „konfiguruj szyfrowane woluminy” , na pytanie, czy zostawić aktualny układ partycji odpowiedzieć „TAK” a następnie wybrać z menu „Activate existing encrypted volumes” i podać hasło ustalone przy poprzedniej instalacji. Następnie trzeba jeszcze ponownie wybrać rodzaj systemu plików i podać punkty montowania dla poszczególnych woluminów.

        1. Nocny Pingwin

          Odpowiedz

          To prawda, to tylko zwykłe kopiowanie.

          Co do drugiego sposobu to dokładnie tak to działa jak przedstawiłeś i instalator sieciowy Ubuntu potrafi sobie z tym poradzić. Najpopularniejsze są tutoriale właśnie z Ubuntu luks/lvm głównie z powodu, że Ubuntu jest w stanie to obsłużyć oraz dlatego, że przy szyfrowaniu całego dysku i na tym utworzeniu woluminów, wymagane jest tylko jedno hasło przy bootowaniu. Bez tego w standardowej konfiguracji należałoby podawać osobno hasło dla każdej montowanej partycji. Chociaż i na to można znaleźć sposób: http://nocnypingwin.pl/szyfrowanie-calego-systemu-wraz-z-partycja-home-przy-uzycia-hasla-i-klucza/

    • Rico, 23 marca 2017, 13:55

    Odpowiedz

    Ile czasu moze trwac tworzenie partycji typu ext4 o rozmarze 11000mb podczas instalacji UBUNTU 15.04 Czy to normalne ze trwa to 4 godziny

    1. Nocny Pingwin

      Odpowiedz

      To zdecydowanie za długo, nie powinno to trwać dłużej niż 1-2 minuty.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.