---
title: "Szyfrowanie LUKS niezaszyfrowanego LVM w Ubuntu 22 Server bez reinstalacji systemu"
url: https://michalasobczak.pl/pl/posts/encrypt-with-luks-an-unencrypted-lvm-ubuntu-22-server-without-system-reinstallation.html
author: "Michał Sobczak"
description: "Chroń swoje dane. Skutki utraty urządzenia lub nieautoryzowanego dostępu można ograniczyć, szyfrując dysk w serwerze i stacji roboczej. Być może masz instalację Ubuntu Linux na bare metal lub maszynie wirtualnej. Czy ma zaszyfrowany dysk?"
published: 2024-05-14T20:49:41.000Z
updated: 2024-08-29T08:21:39.000Z
language: pl
categories: ["Security"]
tags: ["Storage", "Proxmox", "Security", "Ubuntu"]
license: CC BY-NC-ND 4.0 (https://creativecommons.org/licenses/by-nc-nd/4.0/)
---
# Szyfrowanie LUKS niezaszyfrowanego LVM w Ubuntu 22 Server bez reinstalacji systemu

**Chroń swoje dane. Skutki utraty urządzenia lub nieautoryzowanego dostępu można ograniczyć, szyfrując dysk w serwerze i stacji roboczej.**

Być może masz instalację Ubuntu Linux na bare metal lub maszynie wirtualnej. Czy ma zaszyfrowany dysk? Jeśli nie, możesz mieć kłopoty, gdy urządzenie zostanie skradzione lub zgubione albo ktoś po prostu uzyska nieautoryzowany dostęp do Twojego sprzętu. W tym krótkim artykule krok po kroku zobaczysz, co zrobić, aby zaszyfrować niezaszyfrowane dyski bez konieczności reinstalacji systemu.

W przypadku stacji roboczej reinstalacja systemu jest znacznie mniejszym problemem. Wystarczy w dogodnym momencie przenieść dane i konfigurację, a potem przeprowadzić czystą instalację systemu, tym razem z poprawnie skonfigurowanym szyfrowaniem dysku. Ale chwileczkę. Skoro istnieje możliwość zaszyfrowania bez reinstalacji systemu, to dlaczego by nie spróbować?

Jest to szczególnie ważne w przypadku instalacji serwerowych z oprogramowaniem produkcyjnym przetwarzającym dane klientów. Możesz zdecydować się na wymianę systemu w oknie serwisowym i wykonać całą pracę od nowa. Czasem jednak nie wchodzi to w grę. Właściwie nie ma znaczenia, jakie nieutrzymywane i przestarzałe oprogramowanie działa na Twoich niezaszyfrowanych serwerach. Myślę, że większość z nas zna przynajmniej jeden taki przykład. Przy tak problematycznym oprogramowaniu lepiej po prostu zrobić to na istniejącym systemie, bez dodatkowych kroków.

## Jak zmigrować dane?

Tutaj dowiesz się, jak zaszyfrować istniejące dane na dyskach opartych o LVM w maszynie wirtualnej z Ubuntu 22 Server. Na początek musisz dodać do systemu dodatkowy dysk o pojemności równej lub większej niż dysk niezaszyfrowany. Załóżmy, że źródło to /dev/sda, a zapasowy dysk to /dev/sdb. Zakładam, że to domyślna konfiguracja z 3 partycjami. Pierwsza to odstęp dla GRUB-a, druga to boot, a trzecia to główny system plików.

Uruchom VM z ISO GRML. W Proxmoxie podczas startu VM naciśnij Esc i wybierz napęd z zamontowanym ISO.

Po uruchomieniu GRML…

Utwórz PV i rozszerz istniejącą VG o nowy dysk:

```text
pvcreate /dev/sdb
vgextend ubuntu-vg /dev/sdb
```

Przenieś dane na nowy dysk:

```text
pvmove /dev/sda3 /dev/sdb
```

Usuń istniejący, niezaszyfrowany dysk źródłowy z VG i usuń PV:

```text
vgreduce ubuntu-vg /dev/sda3
pvremove /dev/sda3
```

Teraz czas wyczyścić istniejący niezaszyfrowany dysk:

```text
crypt setup open --type plain -d /dev/urandom /dev/sda3 to_be_wiped
dd if=/dev/zero of=/dev/mapper/to_be_wiped bs=1M status=progress
cryptsetup close to_be_wiped
```

Teraz najważniejszy element procedury. Utwórz punkt montowania dla boot i zapisz tam nagłówek LUKS. Zapisanie tego nagłówka na trwałym nośniku jest krytyczne. Jeśli nagłówek z kluczami zostanie utracony, utracisz również dane. Pamiętaj o tym:“\`

```bash
mkdir /mnt/boot
mount /dev/sda2 /mnt/boot
```

Zaszyfruj i otwórz kontener dysku:

```text
cryptsetup -y luksFormat /dev/sda3 --header /mnt/boot/luksheader.img
cryptsetup luksOpen /dev/sda3 lvmcrypt --header /mnt/boot/luksheader.img
```

Utwórz nowy PV i dołącz go do istniejącej VG.

```text
pvcreate /dev/mapper/lvmcrypt
vgextend ubuntu-vg /dev/mapper/lvmcrypt
```

Przenieś dane z dodatkowego, zapasowego dysku do nowo utworzonego kontenera lvmcrypt:

```text
pvmove /dev/sdb /dev/mapper/lvmcrypt
```

I na koniec usuń ten nowy dysk z VG oraz sam PV:

```text
vgreduce ubuntu-vg /dev/sdb
pvremove /dev/sdb
```

## Jak zaktualizować initramfs z odłączonym nagłówkiem LUKS2

O co więc chodzi z tym odłączonym nagłówkiem LUKS2? W tym formacie pierwsze 16MB przestrzeni zajmuje nagłówek. Gdyby oryginalny dysk zawierał tę przestrzeń, nie miałby wystarczająco dużo miejsca na dane, które trzeba z powrotem przenieść. Drugim powodem odłączenia nagłówka jest w pewnym stopniu podniesienie poziomu bezpieczeństwa. Pamiętaj jednak, że w razie utraty urządzenia lub systemu plików, na którym się znajduje, bezpowrotnie tracisz również dane. Tak więc…

Jeśli ponownie uruchamiasz GRML:

```bash
mkdir /mnt/luks
cryptsetup luksOpen /dev/sdb3 lvmcrypt --header /mnt/boot/luksheader.img
vgchange -ay
mount /dev/mapper/ubuntu--vg-ubuntu--lv /mnt/luks
```

Jeśli kontynuujesz bez restartu, wystarczy utworzyć katalog punktu montowania i zamontować:

```bash
mkdir /mnt/luks
mount /dev/mapper/ubuntu--vg-ubuntu--lv /mnt/luks
```

Zamontuj i podepnij (bind) potrzebne katalogi specjalne, a następnie wykonaj chroot do systemu:

```bash
mount -t proc proc /mnt/luks/proc
mount -t sysfs sys /mnt/luks/sys
mount -o bind /dev /mnt/luks/dev
mount --bind /run /mnt/luks/run
mount /dev/sda2 /mnt/luks/boot
chroot /mnt/luks /bin/bash
```

Jesteś z powrotem w swoim Ubuntu, na zaszyfrowanym dysku. Czy to koniec? Nie. Musimy wskazać, gdzie podczas uruchamiania znajduje się nagłówek LUKS2. Skopiuj nagłówek na dowolny dodatkowy dysk. W przypadku VM może to być dysk 0.1GB. W przypadku stacji roboczej może to być pendrive USB:

```text
dd if=/boot/luksheader.img of=/dev/sdb
```

Zmodyfikuj plik /etc/crypttab w następujący sposób:

```text
lvmcrypt PARTUUID=A none luks,header=/dev/disk/by-uuid/B
```

gdzie A to wynik blkid /dev/sda3, a B to wynik blkid /dev/sdb.

Na koniec wygeneruj ponownie initramfs:

```text
update-initramfs -c -k all
exit
reboot
```

Gotowe. Twój dysk jest teraz zaszyfrowany i przy każdym uruchomieniu systemu zostaniesz poproszony o ustawione wcześniej hasło. Dla jasności: musisz bezpiecznie przechowywać dodatkowy dysk z nagłówkiem LUKS2. Po uruchomieniu systemu dysk lub pendrive można wyjąć, ale trzeba go ponownie podłączać przy każdym kolejnym restarcie.

## Dalsza lektura

https://unix.stackexchange.com/questions/444931/is-there-a-way-to-encrypt-disk-without-formatting-it  
https://www.michelebologna.net/2020/encrypt-an-existing-linux-installation-with-zero-downtime-luks-on-lvm/  
https://dev.to/goober99/encrypt-an-existing-linux-installation-online-with-the-magic-of-lvm-1mjc  
https://linuxconfig.org/how-to-use-luks-with-a-detached-header  
https://medium.com/@privb0x23/lose-your-head-attempting-to-boot-from-luks-without-a-header-2d61174df360  
https://askubuntu.com/questions/1351911/what-does-regenerate-your-initramfs-mean  
https://superuser.com/questions/111152/whats-the-proper-way-to-prepare-chroot-to-recover-a-broken-linux-installation  
https://unix.stackexchange.com/questions/720202/detached-luks-header-on-debian-based-gnu-linux
